その他デバッグ関連
その他デバッグ関連 目次
●仮想アドレス空間内でメモリ領域を確保(UsaMimi32.exeおよびUsaMimi64.exeでは「メモリ領域の確保とアクセス属性変更」)●DLLのロードとアンロード
●アンロードされたモジュールを表示
●選択アドレスでCreateRemoteThread関数を実行
●AMSIでメモリ領域やモジュールをスキャン
●スレッド/ハンドル情報のダンプファイルを作成
●アクセス可能な全てのメモリ領域のダンプファイルを作成
●選択アドレス以降をモジュールとしてダンプ
仮想アドレス空間内でメモリ領域を確保(UsaMimi32.exeおよびUsaMimi64.exeでは「メモリ領域の確保とアクセス属性変更」)
対象プロセスの仮想アドレス空間内で、読み書き実行可能なアクセス属性を持つ
指定したサイズのメモリ領域を確保します。基本操作としては、確保サイズをページサイズ(0x1000)の
倍数で設定し、[確保実行]ボタンを押します。 確保可能なメモリエリアの数は16エリアが上限です。確保したメモリエリアの情報は当ソフトウェア内部で保持するため、この管理用ダイアログをいったん閉じても問題ありません。再度このダイアログを表示した際に、確保済みメモリエリアの情報を自動で読み込みます。 メモリ領域確保に成功すると、当機能ダイアログ内でその先頭アドレスを表示し、 さらにその先頭アドレスでダンプ表示ウィンドウの表示アドレスを変更します。 確保したメモリ領域が不要になった場合は[解放実行]ボタンで解放可能です。 この機能はWindows9x/Meでは使用できません。 64ビット版では、プログラムコードの書き換え時にRIP相対アドレスのバッファが必要となることもあるため、画面左側メモリマップで選択されたメモリ領域のアドレスから、なるべく近い後方のアドレスでメモリ領域の確保を行うようにしています。 |
●参考画面(新型32ビット版「UsaMimi32.exe」および64ビット版「UsaMimi64.exe」) ●画面説明 ●メモリエリア確保 ■確保サイズ 対象プロセスのプロセスメモリ上で確保するメモリエリアのサイズを指定します。確保サイズをページサイズ(0x1000)の倍数で設定してください。 ■先頭アドレス メモリエリア確保に成功した場合の、同メモリエリアの先頭アドレスを表示します。 ■アクセス属性 確保するメモリエリアに設定する、アクセス保護属性を指定します。指定は、E(実行可能)、R(読み込み可能)、W(書き込み可能)の組み合わせ例から選択してください。 ■TOP_DOWN 確保するメモリエリアを、できる限り高いアドレスから確保するオプションです。 ■確保実行 メモリエリアの確保を実行します。 ●確保済みメモリエリア一覧・解放 ■解放実行 下部の確保済みメモリエリア一覧で指定されたメモリエリアの解放を行います。 ■確保済みメモリエリア一覧(リストビュー) 確保されたメモリエリアの一覧です。16エリアまで保持することができます。 |
DLLのロードとアンロード
対象プロセスの仮想アドレス空間内で、指定したDLLファイルのロードと
アンロードを行います。このようなロード操作を「DLL インジェクション」(DLL
Injection)と呼びます。基本的に、32ビットアプリケーションのプロセスに対して、64ビットアプリケーション用の64ビットDLLファイルはロードできません。同様に、64ビットアプリケーションのプロセスへ32ビットDLLをロードさせることもできません。 ロードの基本操作としては、対象DLLファイルのパスを指定して[ロード実行]ボタンです。DLLファイルのドラッグ・アンド・ドロップでパスを指定することも可能です。ロードの対象となる実行ファイルはDLLファイル全般であり、拡張子"DLL"に限定されません。EXEファイルをロードさせることも可能ですが、リロケートの問題が解決されませんので注意して下さい。 Windows8や10での、AppContainerプロセス分離環境で実行されるアプリケーションに対しては、アクセス権その他の要因によりロードに失敗します。ただし、ロード対象DLLファイルをAppContainer専用フォルダにコピーすればロードできるケースがあるため、同フォルダをエクスプローラでオープンするかメッセージで尋ねるようにしました。 DLL側ではDLLロード(DllMain関数内でfdwReason==DLL_PROCESS_ATTACH)を トリガーとして、対象プロセスに何らかの操作を行わせることも可能です。 アンロードの基本操作としては、対象プロセスのモジュール一覧からアンロード対象DLLモジュールを選択して[アンロード実行]ボタンです。対象DLLモジュールが見つからない場合は[一覧更新]ボタンでモジュール一覧を更新してみて下さい。DLLをアンロードする場合、対象プロセスの各モジュールにおける関数呼び出し等 依存関係が原因で、対象プロセスがクラッシュすることがあります。 この機能はWindows9x/Meでは使用できません。 |
アンロードされたモジュールを表示
対象プロセスがアンロードしたモジュールを一覧表示します。この機能でのモジュールとは通常DLLを意味します。 新型32ビット版「UsaMimi32.exe」および64ビット版「UsaMimi64.exe」では、この機能は上記「DLLのロードとアンロード」に統合されています。 視認性を考慮して、アンロードされたモジュールは直近のものほどリストの上部に表示されるようにしています。また、アンロードはプロセスの処理としてリアルタイムで行われるため、必要に応じて[リスト更新]ボタンで一覧を更新可能にしています。当機能で取得できるアンロードされたモジュールの情報件数は、Windows OSの仕様により、XPでは直近16件、Vista以降では直近64件です。なお、仮想PCなどの特殊環境上では一時的に情報取得ができなくなることがあります。この場合は、若干の時間をおいてから、当ダイアログを開き直してみてください。 モジュールの一覧で表示される情報のうち、「チェックサム」や「タイムスタンプ」は当該モジュールのPEヘッダに格納されている情報です。「チェックサム」は情報が存在せず値0のケースもあります。「タイムスタンプ」は実際の値と日時形式の2通りの表示を切り替えられるようにしています。通常、この「タイムスタンプ」はモジュールがコンパイルされた日時を指します。 [-][+]ボタンで当ダイアログの縮小表示と通常表示を切り替え可能です。 この機能はWindows9x/Me/2000では使用できません。 |
選択アドレスでCreateRemoteThread関数を実行
ダンプ表示ウィンドウ上の選択アドレスをプロシージャ開始アドレスとみなして、CreateRemoteThread関数を実行します。
プロシージャとは、プログラム上の処理単位で、演算等の各種命令の連続を一つにまとめたものです。サブルーチンと同様のものといえます。 この機能はWindows9x/Meでは使用できません。 作成するスレッドの使用スタックサイズは、対象プロセスのプライマリスレッドのスタックサイズと同サイズに設定します。 もし指定アドレス以降に実行可能なプロシージャが存在しなければ、対象プロセスはクラッシュしますので注意が必要です。 実行するプロシージャが含まれるメモリエリアのアクセス属性に、「実行」属性が含まれているか事前に確認し、必要に応じてアクセス属性を変更してください。 この機能により、改造対象プロセス内にコードを埋め込んで作成したパラサイトルーチンを、新しいスレッドとして実行可能です。 |
AMSIでメモリ領域やモジュールをスキャン
この機能では、Antimalware Scan Interface
(AMSI)という仕組みを使って、PCに導入されているマルウェア対策ソフトウェアが行うスキャンを、当ソフトウェアから行います。 詳細は解説ページを参照してください。 |
スレッド/ハンドル情報のダンプファイルを作成
Microsoftの「Debugging Tools for
Windows」で解析できるMiniDump形式のダンプファイルを作成します。ただし、自分でMiniDump系APIを用いた解読ツールを組んだ方が、より詳細な情報を表示可能です。 この機能を使用するためにはDbgHelp.dllのバージョン6.3以上が必要です。このDLLを当ソフトウェアのインストールフォルダにコピーすれば使用可能になります。DbgHelp.dllの新しいバージョンは、「Debugging Tools for Windows」に含まれています。 この機能はWindows9x/Meでは使用できません。 |
アクセス可能な全てのメモリ領域のダンプファイルを作成
Microsoftの「Debugging Tools for
Windows」で解析できるMiniDump形式のダンプファイルを作成します。ただし、プロセスメモリのスナップショットですので、バイナリファイルエディタでの解析が役立ちます。また、複数のダンプファイルを用いた時系列での解析も可能です。なお、作成されるダンプファイルのサイズは、対象プロセスの状況によっては巨大なサイズとなることに注意してください。 この機能は、プログラム解析及び、デジタル・フォレンジックへの用途を想定して実装しました。 この機能を使用するためにはDbgHelp.dllのバージョン6.3以上が必要です。このDLLを当ソフトウェアのインストールフォルダにコピーすれば使用可能になります。DbgHelp.dllの新しいバージョンは、「Debugging Tools for Windows」に含まれています。 Windows9x/Meでは、この機能は上記DLL導入で使用可能と考えられますが、不具合発生の可能性があるため非推奨とします。 |
選択アドレス以降をモジュールとしてダンプ
選択アドレス以降をモジュールとみなして、該当プロセスメモリ領域をファイルに保存します。この機能は、マルウェアが用いるモジュールなどが、通常のモジュール列挙方法では認識できないケースへの対処を目的としています。もし、モジュール先頭「MZ」やPEヘッダ先頭「PE」のシグネチャが書き換えられていたならば、それらを復元して保存します。保存するモジュールのサイズには、PEヘッダ内の「ImageSize」の値を用いますので、必要に応じてこの値をプロセスメモリ上で修正しておいてください。同様に、モジュール先頭+3Chの値(IMAGE_DOS_HEADER構造体のe_lfanew)がPEヘッダの開始位置を指していないならば、この値の修正が必要です。 ダンプ時には「pe_unmapper.exe」を使って、作成されたファイルをPEファイルとして解析しやすいように内部構成の修正を行います。これはIAT再構築ではありません。ダンプ時にShiftキーを押し下げておくと、pe_unmapper.exe による修正をスキップします。 |