x32dbg (x64dbg)の使い方に関するメモ
アドレスへの移動
1.逆アセンブル画面を右クリック
2.Go toからExpressionを選択し、移動先のアドレスを入力
あるいはCtrl + g
アセンブリ命令の書き換え
逆アセンブル画面をダブルクリックして命令文を書き換える
ブレークポイントのセット
対象のアドレスを選択して、右クリック、BreakpointからToggleを選択あるいはF2キーを打つ
コマンドからブレークポイントをセットする
画面最下部のCommandフィールドより以下のコマンドを入力するSetBPX <Address or API Name>
例:SetBPX VirtualAlloc
※ API名を指定する場合は、大文字・小文字を正しく指定しなければならない。
スタック・アドレスにハードウェア・ブレークポイントをセットする
- 画面右上のレジスタ画面よりESPの値を確認する。
- 画面右下のスタック画面より、1.で確認したアドレスを選択して右クリック。
- Break PointよりHardware, Accessを選びByte、Word、Dwordの中から任意のものを選ぶ。(32ビット・プログラムを解析している場合は、大抵はDwordでOK)
- プログラムを実行して、該当のスタック・アドレスへのアクセスが発生すると、ブレークポイントが起動する。
デバッガが現在停止している位置へ戻る
shift + 8
(アスタリスク)キーを押す
メモリ・ダンプ画面の値の書き換え
メモリ・ダンプ画面より、書き換えたい箇所を選択して右クリック、BinaryからEditを選択して書き換え。
もしくは、最初に上書き用の値(16進数形式)をクリップボードにコピーしておいて、書き換えたい箇所を選択して右クリック、BinaryからPaste (Ignore Size) を選択すると、クリップボードにコピーした値に上書きされる。
メモリ領域からペイロードをダンプする
メモリ・ダンプ画面を選択して右クリックし、「Follow in Memory Map」を選択するとMemory Mapタブに飛ぶ。ハイライトされている行を右クリックして、「Dump Memory to File」を選択する。
ファイルをコマンドライン引数付きでデバッグする
ファイルをロードした後に、FileメニューからChange Command Lineを選択してコマンドラインを入力する。
プロセスをダンプした後にインポート・テーブルを修正する
- PluginsメニューよりScyllaを選択してAttach to an active processよりダンプしたいプロセスを選択してDumpボタンをクリックする。(ダンプ前に必要に応じてOEPの値を書き換える。)
- IAT AutosearchボタンをクリックしてIATのサーチが完了したらOKボタンをクリックする。次にGet ImportsボタンをクリックしてFix Dumpボタンをクリックする。
- 1.でダンプしたファイルを選択する。
- インポート・テーブルの修正された新しいダンプファイルが作成される。(ファイル名に_SCYが付与される)
Windows API関数をスキップしてプログラム独自のコード (user code)まで処理を進める
DebugメニューよりRun to user codeを選択する。(または Alt + F9
)
例外をトラップせずに、プログラムに渡す
DebugメニューよりAdvancedから
- Run (pass exceptions) :
Shift + F9
- Step into (pass exceptions) :
Shift + F7
- Step over (pass exceptions) :
Shift + F8
DLLのエクスポート関数をデバッグする
- rundll32.exeをデバッガにロードする。(64ビットのDLLをデバッグする場合は
C:\Windows\System32\rundll32.exe
を、32ビットのDLLをデバッグする場合はC:\Windows\SysWOW64\rundll32.exe
を選択する) - FileメニューからChange Command Lineを選択して、解析対象のDLLを引数に渡す。(例:
"C:\Windows\SysWOW64\rundll32.exe" C:\path\to\example.dll,SampleExportFunc
) - OptionsメニューからPreferencesを選択し、EventsタブのDLL Loadのチェックボックスにチェックを入れる。
- 解析対象のDLLがデバッガにロードされるまでF9実行する。(デバッグ画面最下部のステータス・バーからDLLがロードされたか確認できる)
- DLLがロードされたら、エクスポート関数のアドレスにブレークポイントをセットする。
- ブレークポイントに到達するまでF9実行する。