troushoo

オープンソースのデバッガー x64_dbg を用いて、ソースコードを編集することなく、アプリにパッチを適用

オープンソースのデバッガーx64_dbg を用いて、ソースコードを編集することなく、アプリにパッチを適用

概要

オープンソースのデバッガーであるx64_dbg を用いて、ソースコードを編集することなく、アプリケーションにパッチを適用する方法を紹介します。

内容

x64_dbg とは?
x64_dbg とは、オープンソースのデバッガーです。x32 とx64 のWindows アプリケーションに対応しています。
公式サイトの”Download” から、x64_dbg のダウンロードが可能です。
x64_dbg のサイト

今回紹介する内容
x64_dbg を用いて、アプリケーションをアセンブラレベルで変更し、アプリにパッチを適用する方法を紹介します。
すなわち、アプリのソースコードやシンボルファイルは必要ありません。

今回用いるアプリは、実行するとメッセージボックスが表示される64bit のアプリです。
アプリを実行すると、メッセージボックスが表示される

このアプリを、アセンブラレベルで変更し、メッセージボックスを表示させないようにさせます。

x64_dbg を用いた、アプリにパッチを適用する方法
1. ダウンロードしたrar ファイルを展開し、x64 フォルダにある”x64_dbg.exe” を起動します。
x64_dbg.exe を起動

2. “File” → “Open” から、サンプルアプリ(名前は、mytest1.exe) を起動します。
Open

3. mytest1.exe のアセンブラを開きます。
3.1. “Symbols” タブの”mytest1.exe” をダブルクリックします。
“Symbols” タブの”mytest1.exe” をダブルクリック

3.2. タイトルの“Module” が”mytest1.exe” となっており、mytest1.exe のアセンブラが開かれている事が確認できます。
“Module” が”mytest1.exe” となっており、mytest1.exe のアセンブラが開かれている事が確認できる

4. 今回のパッチの目的はメッセージボックスを表示させないことです。
よって、メッセージボックスを呼び出している部分のアセンブラを探します。
4.1. アセンブラのウィンドウを右クリック → “Search for” → “Intermodular calls” を実行します。
Intermodular calls

4.2. MessageBoxW 関数を呼んでいるアセンブラの場所が表示されます。
”call qword ptr ds:[<&MessageBoxW>]” の行です。
この行をダブルクリックします。
MessageBoxW 関数を呼んでいるアドレスが確認できる

4.3. MessageBoxW 関数を呼んでいる部分のアセンブラが確認できます。
MessageBoxW 関数を呼んでいる部分のアセンブラが確認できる

5. 該当部分のアセンブラを解析すると、MessageBoxW を呼ばないようにするには、jle(= Jump if Less or Equal) の分岐を変更すればいいことがわかります。
具体的には、jle をjmp に変更し、無条件にジャンプさせればMessgaBoxW は呼ばれません。
5.1. jle をjmp に変更するために、”jle mytest1.7FF6AA7F131C” をダブルクリックします。
”jle mytest1.7FF6AA7F131C” をダブルクリック

5.2. jle をjmp に変更します。
変更前はjle
194-10

5.3. アセンブラが変更されたことが確認できます。
アセンブラが変更された

6. 変更されたアプリを保存します。
6.1 “View” → “Patches” をクリックします。
Patches

6.2. “Patch File” をクリックし、new_mytest1.exe で保存します。
Patch File

7. パッチされたNew_mytest1.exe を実行してみます。
すると、メッセージボックスが表示されないことが確認できます。
メッセージボックスが表示されない

今回用いたアプリのソースコード
今回用いたアプリのソースコードは以下です。

void MyFunc(int i){
if (i > 0){
MessageBox(NULL, _T("テストです"), _T("Message"), MB_OK);
}
}

int _tmain(int argc, _TCHAR* argv[])
{
MyFunc(10);
printf("Test Application\n");
return 0;
}


x64_dbg の公式サイト (英語)
http://x64dbg.com/#start

関連記事
共にフリーで使えるJustDecompileとReflexilで、.NETアセンブリの編集


  1. 2014/09/09(火) 22:59:28|
  2. ツール
  3. | トラックバック:0
  4. | コメント:0
<<カーネルデバッグでユーザーモードプロセスのライブデバッグを行う方法 | ホーム | Message Analyzer のデーターをグラフ化>>

コメント

コメントの投稿


管理者にだけ表示を許可する

トラックバック

トラックバック URL
https://troushoo.blog.fc2.com/tb.php/194-13d181aa
この記事にトラックバックする(FC2ブログユーザー)

スポンサーリンク

最新記事

月別アーカイブ

カテゴリ

ツール (114)
ネットワーク (54)
Wireshark (48)
AD (36)
Linux (45)
WinDbg (46)
SOS・Psscor2/Psscor4 (25)
Visual Studio (56)
Tips (32)
コンテナ (4)
Azure (17)
.NET (24)
Python (9)
Java (5)
SQL (6)
事例 (1)
英語 (1)
About Me (1)
未分類 (0)

全記事表示リンク

全ての記事を表示する

検索フォーム

RSSリンクの表示

リンク

このブログをリンクに追加する