Windows アプリでスクランブルされたパケットをリバース エンジニアリングするにはどうすればよいですか?
-
23-08-2019 - |
質問
私はパケットを平文でサーバーに送信するWindows exeアプリを持っています。このアプリ (クライアント アプリと呼ぶことにします) は明らかにクローズ ソースですが、賢いハッカーがバイナリを 16 進編集して、スクランブルされたパケットを送信するようにしました。
さて、明らかに、これらのパケットは解読可能な方法でスクランブルされています (そうしないと、サーバーはそれを理解できません)。しかし、私がやりたかったのは、このバイナリ アプリをエミュレートするエミュレーターを作成し、同じパケットをサーバーにアクセスし、応答のスクランブルを解除できること (スクランブルされている場合)。
16 進数クライアントを実行するには追加の DLL が必要でしたが、古いクライアントでは必要ありませんでした。私は、何らかの方法で 16 進数のクライアントがその DLL (client.dll と呼ぶことにします) をロードすることに成功し、その DLL の機能は、Windows API にフックすることによって、スクランブル/スクランブル解除を実装することであると想定しています。 client.exe プロセス。
これがどのように機能するのかを理解する方法や、スクランブルをリバース エンジニアリングする方法を教えていただける方がいらっしゃいましたら、大変助かります。
どのような情報を提供すればよいかわかりませんが、不足がある場合は返信していただければ、詳細を投稿します。バイナリが必要な方がいらっしゃいましたら、喜んで提供させていただきます。
関係者向けのバイナリのダウンロード:
http://dl.getdropbox.com/u/46623/client.dll
http://dl.getdropbox.com/u/46623/newClient.exe
http://dl.getdropbox.com/u/46623/originalClient.exe
リソース ファイルが必要なため、これらは実行されません。リソース ファイルは約 3 ギガなので、大きすぎてどこにもアップロードできません。=) を保護するために名前が変更されていますが、おそらく DLL の名前は保護されません...
解決
これをコーディングした人は 針 これにより、前述のプログラムのパケット I/O に暗号化が追加されます。 夢中になった 関連する Windows のソケット API (WSASend
, send
, 、など)、またはデータの送受信に使用される内部プログラム関数をフックしました。
そうは言っても、フック検出プログラム (例: アールクアンフッカー)実際に何が引っかかっているのかを調べます。どの API がフックされているかがわかれば、それらのフックがどこに行くのかもわかるはずです。そこからはフック関数を手動でリバース エンジニアリングする必要があります。
これを行う方法を学ぶというテーマに関しては、すべてを教えるために 1 つのチュートリアルだけを紹介することはできませんが、次のチュートリアルを参照することを強くお勧めします。 タッツフォーユー このサイトには、あらゆるニーズを満たすチュートリアルが豊富にあります。
可能であれば、編集したクライアントとフック DLL のコピーをアップロードしてください。時間があれば、暗号化と復号化関数のレプリカをコード化します。
他のヒント
あなたは追加のDLLでエクスポート関数をフックし、関数が呼び出されると、パラメータがそれらに渡されるに調べる必要があります。あなたは型情報がありませんので、これは簡単なことだろうされていません(DLLの輸出のための、例えば関数のシグネチャを。)
ここをAPIフッキングのいくつかの情報を探してください。また、Microsoftから Windbgのしてみてください良いデバッガが必要になります。
私の知る限り、あなたがここに持っている唯一のオプションを見ることができるように、ブラックボックステストは、すなわち、両方のシステムに知られている入力を与え、相違点と類似点を見つけるためにお互いに対して応答を比較されます。
+--------------+ Input--------->| Original App |--------->Response1 +--------------+ +------------+ Input--------->| Modded App |--------->Response2 +------------+
さて、あなたは、元のアプリと同じ方法でそれを自分で使用することができ、追加のDLLから関数を使用する方法を見つけ出す一度ます。