見出し画像

x64dbgとは & 使い方

x64dbg は、一般的なマルウェア分析ツールである Windows 用のオープンソース デバッガーです。デバッガーは、実行時にコードをステップ実行するために使用されるため、実行内容を正確に確認できます。デバッガーはバグのトラブルシューティングに不可欠ですが、マルウェアのリバース エンジニアリングにも使用されます。

この投稿は、ツールと次の内容をカバーする 4 部構成のシリーズの始まりです。

  • その1:x64dbgとは+使い方

  • パート 2: x64dbg でマルウェアを解凍する方法

  • パート 3: スタック メモリ: 概要

  • パート 4: x64dbg チュートリアル

x64dbg の概要

デバッグ時に独自のソース コードにアクセスできるプログラマーとは異なり、マルウェア アナリストは通常​​、コンパイル済みのアセンブリ コード (Windows .exe または .dll ファイルなど) を使用します。

アセンブリ コードは、64 ビット アーキテクチャなどの特定のコンピューター アーキテクチャ用に設計された低レベルのプログラミング言語であるため、x64dbg という名前が付けられています。x32dbg と呼ばれる 32 ビット アーキテクチャ用のバージョンもあります。

マルウェア アナリストがデバッガーから始めることはめったにありません。最初に、静的分析を実行し、おそらく行動分析ツールを使用して仮想マシンでマルウェアを実行し、マルウェアの動作を理解しようとします。この元のフェーズの後にデバッガーを使用してマルウェアを解凍し、リバース エンジニアリングとして知られるマルウェアの特定の機能を分析することができます。

x64dbg のインストール方法

ツールのインストールは簡単で、公式 Web サイトのhttps://x64dbg.com/ダウンロード ページからダウンロードできます。

  • 免責事項: 最初に安全な仮想化環境をセットアップせずに、マルウェアを分析しようとしないでください。マルウェアを分析するために、x64dbg をホスト マシンにインストールしないでください。

x64dbg サイトのダウンロード セクションにある ZIP 形式の x64dbg の最新バージョンをダウンロードします。コンテンツは選択したフォルダーに抽出でき、スタンドアロン バイナリを実行してソフトウェアを起動できます。インストール手順に従う必要はありません。

前述のように、64 ビット バイナリ用と 32 ビット バイナリ用の 2 つのバージョンがあります。x96 (64 + 32) と呼ばれる 3 番目のオプションもあります。これにより、ユーザーはマルウェアの一部をこのアイコンにドラッグするだけで、アーキテクチャをチェックして正しいバージョンのデバッガーが読み込まれます。

分かりずらい場合、こちらの記事でご参照ください。

各ウィンドウは何をしますか?

マルウェアの一部が x64dbg で開かれると、最初は非常に圧倒されて混乱するように見えることがあります。

このツールには 6 つの主な領域があります。5 つのウィンドウと、下に表示されているメイン ツールバーです。

X64dbg メイン ツールバー

ウィンドウの上部の最も外側の部分には、分析中のファイルの名前「267.exe」、オペレーティング システムによって割り当てられたプロセス ID、および現在分析中のモジュールが表示されます (モジュールは今後の記事で)。

ツールバーのアイコンは、マルウェアのアセンブリ コードを調査するための鍵となります。初心者が理解するための重要なものは、下の画像で見ることができます.

次のアイコンは非常に簡単です。

  • フォルダ アイコンは、分析用にファイルを開くために使用されます

  • 円形の矢印は、プログラムの最初に戻るために使用されます

  • x64dbgで実行されている場合、停止アイコンはプログラムを停止します

  • 矢印アイコンはプログラムを実行します

  • 一時停止アイコンはプログラムを一時停止します

マルウェア アナリストがよく使用するのは、最後の 2 つです。

1 つ目は下向きの矢印で、その下に小さな円があります。これは「ステップ イン」ボタンで、次のアイコンは「ステップ オーバー」ボタンです。マルウェアは、マルウェアの作成者によって作成またはインポートされた多数の関数で構成されています。特定の関数を分析するには、アナリストが関数に「ステップ イン」して、その関数のアセンブリ コードを表示する必要があります。または、関心のない関数を「ステップ オーバー」にすることもできます。まだ意味が分からなくても心配しないでください。これについては、今後の記事で詳しく説明します。

画像の下部にあるタブの行には、分析を容易にするために使用できるさまざまなビューとデータが含まれています。

理解すべき主要なタブは次のとおりです。

  • CPU:アセンブリ コードを上から順に表示します。

  • グラフ:グラフ ビューを表示するため、ユーザーはどの関数が別の関数によって呼び出されているかを視覚的に確認できます。これは、IDAPro や Ghidra などの他のツールと同様です。

  • ブレークポイント:興味のある命令または文字列を検索し、これらの命令に対してブレークポイントを設定することができます。その後、x64dbg は、ユーザーがこのブレークポイントに到達するまでプログラムを実行できるようにして、分析できるようにします。以下の画像は、Windows 関数 'CreateDirectoryW' および 'WriteFile' に設定されたいくつかのブレークポイントを示しています。

  • メモリ マップ:メモリに格納されているデータと、そのデータが存在するアドレスを示します。以下の例では、分析中のマルウェアの「.text」セクションはアドレス「00F21000」にあります。「保護」列には、メモリ内のその領域が実行可能、読み取り可能、または書き込み可能かどうかも表示されます。これらはフラグ E、R、W で識別できます。これは、メモリ マップを使用してマルウェアをアンパックする方法を説明するときに役立ちます。

  • コール スタック:これは、特定の Windows 関数にブレークポイントが設定されている場合に便利です。前の画像では、「CreateDirectoryW」にブレークポイントを設定していたので、マルウェアが侵害されたデバイスでディレクトリの作成を開始するたびに、このブレークポイントがヒットし、x64dbg がこの関数で停止します。コール スタックを使用して、マルウェアの作成者が作成した「CreateDirectoryW」というコードを確認し、そのディレクトリが作成される場所とそのディレクトリの名前を特定できます。

X64dbg メイン ウィンドウ

x64dbg のメイン ウィンドウには、選択されたタブの内容が含まれています。デフォルトでは、これはアセンブリ手順を含む CPU タブです。

最初の列には、命令ポインターである EIP が含まれています。これは、実行される次のコード部分を単に指しています。

2 番目の列には、命令が存在するバイナリ内のアドレスが含まれているため、上記の例では、EIP はアドレス「0138CD97」を指しています。

3 列目は、4 列目の命令を 16 進数で表したものです。

列 4 は、アセンブリ命令が配置されている場所です。上記の例でも、実行される次の命令を指す EIP が「push ebp」であることを示しています。

5 番目の列には、x64dbg によって入力されたデータ、またはアナリストによって追加されたメモが含まれます。上記の例は、「0138CD97」がマルウェアの「エントリポイント」であることを示しています。これは、マルウェア作成者のコードの開始点であり、主要な機能が開始される場所であることを意味します。

3 番目の列には組み立て手順が含まれており、このデータはマルウェア アナリストがマルウェアの動作を理解するために使用するものであるため、おそらく最も重要です。

いくつかの一般的な指示:

  • PUSH:値をスタックにプッシュします

  • POP:スタックから値をポップします

  • CALL:関数を実行します

  • RET:完了した関数の値を返します

  • JMP:アドレスの場所にジャンプします

  • CMP: 2 つの値を比較します

  • MOV:ある場所から別の場所にデータを移動します

  • ADD:値を追加します

  • SUB: 値を減算します

レジスタに関する x64dbg ウィンドウ

次のウィンドウには、レジスタに関する情報が含まれています。

レジスタは、後で使用するために簡単に参照できるデータを格納するためにプログラムによって使用されます。レジスタの一部には特定の用途があります。

  • EAX:加算、乗算、戻り値に使用

  • EBX:さまざまな操作に使用される汎用レジスタ

  • ECX:カウンターとして使用

  • EDX:さまざまな操作に使用される汎用レジスタ

  • EBP:引数とローカル変数の参照に使用

  • ESP:スタックの最後の引数を指す

  • ESI/EDI:メモリ転送命令で使用

EIP はレジスタではなく、x64dbg の現在の命令を指す命令ポインタです。このフィールドには、命令が存在するアドレスが含まれます。

スタック メモリに関連する x64dbg ウィンドウ

6 番目で最後のウィンドウには、ダンプ データが含まれます。「ダンプ」ウィンドウを使用すると、ユーザーはどのデータがレジスタに保存されているか、またはどのデータが特定のアドレスに存在するかを確認できます。

最初は理解するのが大変に思えるかもしれませんが、この記事で x64dbg とは何か、およびツールの操作方法を少しでも確実に理解できるようになれば幸いです。

2022/07/31 IT情報&技術アウトプット
エンジニアファーストの会社
株式会社CRE-CO

この記事が気に入ったらサポートをしてみませんか?