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を始めて起動するときに、次の確認ダイアログが表示されます。
検索性を高めるために、ダイアログの内容を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
チェックボックスを操作して切り替えます:
デフォルトの新旧体系キーボードショートカット比較
本節の内容は、次の手順で新旧体系のコマンド一覧をファイルへ保存して比較することで得ました。
- キーボードショートカットを新体系または旧体系へ切り替えます。
- 念のため、
IDA View
画面を表示している状態に統一します。 - メニューの
Options
→Show command palette...
を選択して、Command pallete
ウィンドウを表示します。 Command pallette
ウィンドウの適当な行を右クリックして、表示されるコンテキストメニューからCopy all
を実行し、全コマンドの内容や割り当てショートカットをクリップボードへコピーします。- コピー結果をファイルへ保存します。
- 適当なツールで新旧体系の差分を取ります。
コピー結果の各種コマンドは、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個が、新体系では割り当てなしになっています。中には有用なショートカットもあるので、新体系を使う人でも別途割り当てたほうが良さそうに思います。
- 気付いた範囲では、
ExportData
のShift-E
割り当てが削除されている点が不便に思いました。Hex View
などで範囲選択してからExportData
をすると、選択範囲をHex文字列などで得られる便利な機能です。詳細は Igor’s tip of the week #39: Export Data – Hex Rays をご参照ください。- メニューの
Edit
→Export Data
からでも実行できますが、よく使うキーにはやはりキーボードショートカット割り当てが欲しくなります。
- メニューの
- 他には、私自身はあまり使いませんが、逆アセンブル画面などで整数リテラルを検索できる
AskNextImmediate
やJumpImmediate
は、旧体系ではAlt-I
とCtrl-I
に割り当たっていました。一方で新体系ではデフォルトではキー割り当てが削除されています。
- 気付いた範囲では、
- 新体系の
NextWindow
にはCtrl-Tab
が割り当たっており問題なく使えます。一方でPrevWindow
にはCtrl-Shift-Backtab
が割り当たっています。Tab
ではなくBacktab
という別の何かが割り当たっていることに注意してください。- 私の環境では
Ctrl-Shift-Tab
を押してもPrevWindow
が発動しなかったため、キー割り当てを編集しました。 - なお、旧体系では
WindowsListNext
にCtrl-Tab
が、WindowsListPrev
にCtrl-Shift-Tab
が割り当たっていました。旧体系のそれらは画面中央のIDA View
などの箇所の範囲でタブを切り替える機能です。一方で新体系で割り当てられているNextWindow
やPrevWindow
は、他にもFunctions
やOutput
ウィンドウにもフォーカスを切り替えられます。お好みの方をお使いください。
- 私の環境では
- 逆コンパイル画面でよく使うものは新旧どちらもキー割り当てなので、そこは同じ感覚で使えます。例えば
X
キーでの相互参照、F5
キーでの逆コンパイル、N
キーでの変数名変更、Y
キーでの型変更や、整数リテラル箇所でのH
キーでの表示基数変更、R
キーでの文字リテラル変換、M
キーでのenum
メンバー変換、T
キーでのstruct
メンバーオフセット変換などは同一です。 - 新体系を使い始めている現状、データベースファイルを保存しようとして
Ctrl-W
を押してしまい、現在のウィンドウ(逆コンパイル画面など)を閉じてしまう事故を頻繁に起こしています!