プログラム系統備忘録ブログ

記事中のコードは自己責任の下でご自由にどうぞ。

IDA 9.0追加の新体系ショートカットの変更点と雑感

IDAとはバイナリ解析用ツールです。2024/09/30に最新バージョン9.0が公開されました。IDA 9.0の新機能として新しいキーボードショートカット体系が追加されています。本記事では、新旧体系の変更点や雑感を紹介します。

概要

  • 新旧どちらのキーボードショートカット体系を使うかは、初回起動時やオプションから設定できます。
  • IDAの文献を読む際は、記載ショートカットが旧体系のものである可能性があるため注意してください。
  • 新体系デフォルト割当の1つのCtrl-Shift-Backtab操作は、私の環境では実行不可能だったため変更しました。
  • なお、逆コンパイル画面でよく使う、変数などの名前変更や型変更、数値の表示形式変更等は新旧どちらも同一割り当てです。

確認バージョン

  • IDA Free Version 9.0.240925 Windows x64 (64-bit address size)

公式ドキュメントでの新体系キーボードショートカットの扱いは移行途中の模様

  • ブログ記事のDiscover IDA 9.0: Exciting New Features and Improvementsでは Finally, we've got a range of user interface refinements. の一文にまとめて含められていそうです。
  • IDA 9.0と同時期に公開されたドキュメントサイトHex-Rays Docsでの、IDA 9.0時のリリースノートページIDA 9.0 | Hex-Rays Docsでは、UI Improvementsセクション中でA refreshed set of shortcuts that better matches the modern OS conventions can now be selected instead of the traditional shortcuts と言及されています。
  • 一方で本記事執筆時点では、ドキュメントサイトでのショートカット紹介ページShortcuts | Hex-Rays Docsには、旧体系のキーボードショートカットのみが言及されています。新体系のキーボードショートカットには全く言及されていません。
    • 当該ページ最下部Get the handy shortcuts cheatsheetからダウンロードできるida_cheatsheet.pdfでも、同様に旧体系のキーボードショートカットのみが言及されており、新体系のキーボードショートカットには全く言及されていません。

新旧体系のキーボードショートカット切り替えは初回起動時やオプションから可能

IDA 9.0を始めて起動するときに、次の確認ダイアログが表示されます。

IDA9.0初回起動時に表示されるキーボードショートカット体系切り替えダイアログ

検索性を高めるために、ダイアログの内容をCtrl+Cでコピーした内容も記載します:

---------------------------
Would you like to try-out the revised shortcut set?
---------------------------
We're in the process of curating a new set of keyboard shortcuts that reuse standard keyboard sequences.
It is not definitive, your feedback about it would be welcome.

You can always switch between the old and new shortcut set via the Shortcut Editor.
---------------------------
&Yes, switch!   &No
---------------------------

このダイアログでYes, switch!を選択すると新体系へ切り替わり、Noを選択すると旧体系のままになります。

上記のダイアログは、IDA 9.0の初回起動時にだけ表示されます。その後にショートカットの体系を切り替えたい場合は、メニューのOptions→Shortcuts...をクリックすると表示されるShortcutsウィンドウのUse new shortcutsチェックボックスを操作して切り替えます:

ShortcutsウィンドウのUse new shortcutsチェックボックスから新旧ショートカットを切り替え可能

デフォルトの新旧体系キーボードショートカット比較

本節の内容は、次の手順で新旧体系のコマンド一覧をファイルへ保存して比較することで得ました。

  1. キーボードショートカットを新体系または旧体系へ切り替えます。
  2. 念のため、IDA View画面を表示している状態に統一します。
  3. メニューのOptionsShow command palette...を選択して、Command palleteウィンドウを表示します。
  4. Command pallette ウィンドウの適当な行を右クリックして、表示されるコンテキストメニューからCopy allを実行し、全コマンドの内容や割り当てショートカットをクリップボードへコピーします。
  5. コピー結果をファイルへ保存します。
  6. 適当なツールで新旧体系の差分を取ります。

コピー結果の各種コマンドは、Action順で並んでいるようです。また、1つのActionへ複数のShortcutが割り当てられている場合はカンマ区切りで表現されます。

新体系で変更されたショートカット

次の表のショートカットは、旧体系と新体系で変更された項目です。列で旧体系のショートカットを、列で新体系のショートカットを示します。

Label Action Description
Text... AskNextText Alt-T Ctrl-F Search for text
Close window CloseWindow Alt-F3 Ctrl-W,Ctrl-F4 Close the current window
Next text JumpText Ctrl-T Ctrl-G,F3 Repeat search for text
Next window NextWindow F6 Ctrl-Tab,Ctrl-F6,Forward Switch to the next window
Previous window PrevWindow Shift-F6 Ctrl-Shift-Backtab,Ctrl-Shift-F6,Back Switch to the previous window
Jump to previous position Return Esc Esc,Alt-Left,Backspace Return to the previous saved position
Save SaveBase Ctrl-W Ctrl-S Save the database
Jump to next position UndoReturn Ctrl-Enter Ctrl-Enter,Alt-Right,Shift-Backspace Go to the next saved position

新体系で追加されたショートカット

次の表のショートカットは、旧体系ではショートカット割り当てがありませんでしたが、新体系で追加された項目です。

Label Action Shortcut Description
Open... LoadNewFile Ctrl-O Load a new file or database
New instance NewInstance Ctrl-N Open a new IDA instance
Select all SelectAll Ctrl-A Select all

新体系で削除されたショートカット

次の表のショートカットは、旧体系ではショートカット割り当てがありましたが、新体系で削除された項目です。

Label Action Shortcut Description
Begin selection Anchor Alt-L Begin selection
Sequence of bytes... AskBinaryText Alt-B Search for sequence of bytes
Immediate value... AskNextImmediate Alt-I Search for immediate value
Breakpoint list Breakpoints Ctrl-Alt-B Open breakpoints window
Center in window... CenterInWindow NumpadClear,Clear,Ctrl-Shift-C Center in window
Change stack pointer... ChangeStackPointer Alt-K Change stack pointer
Struct var... DeclareStructVar Alt-Q Declare a structure variable
Edit segment... EditSegment Alt-S Edit segment attributes
Script file... Execute Alt-F7 Execute a script file
Script command... ExecuteLine Shift-F2 Execute a script command
Export data ExportData Shift-E Export data
External help ExternalHelp Ctrl-F1 External help
Print register value FindRegisterValue Alt-Shift-V Print register value
Full screen FullScreen F11 Display the current view in full screen
Set function end FunctionEnd E Change the function end address
Proximity browser GraphProximityView Numpad- Show proximity browser
Hide Hide Ctrl-Numpad- Hide the current function, segment, structure, enumeration or create a hidden range
Next sequence of bytes JumpBinaryText Ctrl-B Repeat search for sequence of bytes
Next code JumpCode Alt-C Search for the next instruction
Next data JumpData Ctrl-D Search for the next data item
Error operand JumpError Ctrl-F Error operand
Next explored JumpExplored Ctrl-A Search for the next instruction or data
Jump to function... JumpFunction Ctrl-P Jump to the selected function
Next immediate value JumpImmediate Ctrl-I Repeat search for immediate value
Jump to next function JumpNextFunc Ctrl-Shift-Down Jump to the next function
Jump to prev function JumpPrevFunc Ctrl-Shift-Up Jump to the previous function
Jump to problem... JumpQ Ctrl-Q Jump to the selected problematic location
Jump to segment... JumpSegment Ctrl-S Jump to the selected segment
Jump to segment register... JumpSegmentRegister Ctrl-G Jump to the selected segment register change point
Next void JumpSuspicious Ctrl-V Search for the next instruction with void operand
Next unexplored JumpUnknown Ctrl-U Search for the next unexplored byte
List cross references to... JumpXref Ctrl-X Jump to the selected cross reference
Parse C header file... LoadHeaderFile Ctrl-F9 Parse C header file
... (unassigned) LockHighlight_0 Ctrl-Alt-1 Lock/unlock highlight color 1
... (unassigned) LockHighlight_1 Ctrl-Alt-2 Lock/unlock highlight color 2
... (unassigned) LockHighlight_2 Ctrl-Alt-3 Lock/unlock highlight color 3
... (unassigned) LockHighlight_3 Ctrl-Alt-4 Lock/unlock highlight color 4
... (unassigned) LockHighlight_4 Ctrl-Alt-5 Lock/unlock highlight color 5
... (unassigned) LockHighlight_5 Ctrl-Alt-6 Lock/unlock highlight color 6
... (unassigned) LockHighlight_6 Ctrl-Alt-7 Lock/unlock highlight color 7
... (unassigned) LockHighlight_7 Ctrl-Alt-8 Lock highlight color 8
Create alignment directive... MakeAlignment L Create alignment directive
Manual instruction... ManualInstruction Alt-F2 Specify alternate representation of the current instruction
Manual... ManualOperand Alt-F1 Enter the current operand manually
Pan the screen down one line NavFlatPanDown Ctrl-Down Pan the screen down one line
Pan the screen up one line NavFlatPanUp Ctrl-Up Pan the screen up one line
Jump to listing end NavJumpListingEnd Ctrl-PgDown,Ctrl-Shift-PgDown Jump to listing end
Jump to listing start NavJumpListingStart Ctrl-PgUp,Ctrl-Shift-PgUp Jump to listing start
Jump to the bottom of the window NavJumpWindowBottom Ctrl-End,Ctrl-Shift-End Jump to the bottom of the window
Jump to the top of the window NavJumpWindowTop Ctrl-Home,Ctrl-Shift-Home Jump to the top of the window
Offset (current segment) OpOffsetCs Ctrl-O Convert the current operand to an offset in the current segment
Bookmarks OpenBookmarks Ctrl-Shift-M Open bookmarks window
Output window OutputWindow Alt-0 Display the output window if hidden
Patched bytes PatchedBytes Ctrl-Alt-P Patched bytes
Create ASM file... ProduceAsm Alt-F10 Create an assembler file
Quick debug view QuickDbgView Ctrl-2 Quickly open a debug view
Quick run plugins QuickRunPlugins Ctrl-3 Quickly run a plugin
Quick view QuickView Ctrl-1 Quickly open a view
Recent scripts RecentScripts Alt-F9 Recent scripts
Rename register... RenameRegister V Rename a general processor register
Repeat last palette command RepeatLastPaletteCommand Ctrl-Shift-R Repeat last palette command
Take database snapshot... SaveBaseSnap Ctrl-Shift-W Take database snapshot...
Select identifier SelectIdentifier Shift-Enter Select identifier
Select union member... SelectUnionMember Alt-Y Choose the representation of a union member
Change segment register value... SetSegmentRegister Alt-G Change segment register value
String literals... SetStrlitStyle Alt-A Setup string literal style
Setup data types... SetupData Alt-D Setup data types
Print segment registers ShowRegisters Ctrl-Space Print segment registers in the messages window
Database snapshot manager... ShowSnapMan Ctrl-Shift-T Show the database snapshot manager...
Run current... SnippetsRunCurrent Ctrl-Shift-X Run current...
Windows list (next) WindowsListNext Ctrl-Tab Windows list (next)
Windows list (prev) WindowsListPrev Ctrl-Shift-Tab Windows list (prev)

新体系のキーボードショートカット雑感

  • リリースノートでmatches the modern OS conventionsと言及されているように、新体系のキーボードショートカットは一般的なアプリケーションへ寄せたキー割り当てになっている印象です。そのため、これからIDAを触り始める人にとっては新体系のほうが取っつきやすそうに思いました。
    • 特に、データベースファイル(.i64ファイル)として保存するSaveBaseコマンドが、旧体系ではCtrl-Wだったものが新体系ではCtrl-Sになったのが、大きな変更点だと思います。
  • 一方で、旧体系では割り当てがあったショートカットの約70個が、新体系では割り当てなしになっています。中には有用なショートカットもあるので、新体系を使う人でも別途割り当てたほうが良さそうに思います。
    • 気付いた範囲では、ExportDataShift-E割り当てが削除されている点が不便に思いました。Hex Viewなどで範囲選択してからExportDataをすると、選択範囲をHex文字列などで得られる便利な機能です。詳細は Igor’s tip of the week #39: Export Data – Hex Rays をご参照ください。
      • メニューの EditExport Dataからでも実行できますが、よく使うキーにはやはりキーボードショートカット割り当てが欲しくなります。
    • 他には、私自身はあまり使いませんが、逆アセンブル画面などで整数リテラルを検索できるAskNextImmediateJumpImmediateは、旧体系ではAlt-ICtrl-Iに割り当たっていました。一方で新体系ではデフォルトではキー割り当てが削除されています。
  • 新体系のNextWindowにはCtrl-Tabが割り当たっており問題なく使えます。一方でPrevWindowにはCtrl-Shift-Backtabが割り当たっています。TabではなくBacktabという別の何かが割り当たっていることに注意してください。
    • 私の環境ではCtrl-Shift-Tabを押してもPrevWindowが発動しなかったため、キー割り当てを編集しました。
    • なお、旧体系ではWindowsListNextCtrl-Tabが、WindowsListPrevCtrl-Shift-Tabが割り当たっていました。旧体系のそれらは画面中央のIDA Viewなどの箇所の範囲でタブを切り替える機能です。一方で新体系で割り当てられているNextWindowPrevWindowは、他にもFunctionsOutputウィンドウにもフォーカスを切り替えられます。お好みの方をお使いください。
  • 逆コンパイル画面でよく使うものは新旧どちらもキー割り当てなので、そこは同じ感覚で使えます。例えばXキーでの相互参照、F5キーでの逆コンパイル、Nキーでの変数名変更、Yキーでの型変更や、整数リテラル箇所でのHキーでの表示基数変更、Rキーでの文字リテラル変換、Mキーでのenumメンバー変換、Tキーでのstructメンバーオフセット変換などは同一です。
  • 新体系を使い始めている現状、データベースファイルを保存しようとしてCtrl-Wを押してしまい、現在のウィンドウ(逆コンパイル画面など)を閉じてしまう事故を頻繁に起こしています!