5

私は、平文でサーバーにパケットを送信するために使用されるWindows exeアプリを持っています。このアプリ (クライアント アプリと呼びましょう) は間違いなくクローズ ソースですが、巧妙なハッカーがバイナリを 16 進編集し、スクランブルされたパケットを送信するようにしました。

さて、明らかに、これらのパケットは解読可能な方法でスクランブルされています (そうでなければ、サーバーはそれを理解できません)。サーバー、および応答のスクランブルを解除できる (スクランブルされている場合)。

hex-ed クライアントは、実行するために追加の 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 GB であり、大きすぎてどこにもアップロードできません。有罪 =) を保護するために名前が変更されていますが、おそらく dll の名前は保護されていません...

4

2 に答える 2

3

前述のプログラムのパケットI/Oに暗号化を追加するこのフックをコーディングした人が、関連するWindowsのソケットAPI(、など)をフックしたか、データの送受信に使用される内部プログラム関数をフックしたと想定しています。 。WSASendsend

そうは言っても、実際にフックされているものを見つけるには、フック検出プログラム( RkUnhookerなど)を使用することをお勧めします。どのAPIがフックされているかがわかったら、これらのフックがどこに向かっているのかも知っておく必要があります。それ以降は、フック関数を手動でリバースエンジニアリングする必要があります。

これを行う方法を学ぶというテーマに関しては、すべてを教えるための1つのチュートリアルだけを紹介することはできませんでしたが、Tuts4Youサイトをご覧になることを強くお勧めします。このサイトには、すべてのニーズを満たすチュートリアルが多数あります。

可能であれば、編集したクライアントとフックDLLのコピーをアップロードします。時間があれば、暗号化と復号化の機能のレプリカをコーディングします。

于 2009-02-13T08:39:53.417 に答える
2

追加のDLLによってエクスポートされた関数をフックし、呼び出されている関数とそれらに渡されているパラメーターを調べる必要があります。タイプ情報(DLLエクスポートの関数シグネチャなど)がないため、これは簡単ではありません。

APIフックに関する情報については、こちらをご覧ください。また、MicrosoftのWindbgを試してみる優れたデバッガーも必要です。

私が見る限り、ここでの唯一のオプションはブラックボックステストです。つまり、両方のシステムに既知の入力を与え、応答を相互に比較して相違点と類似点を見つけます。

               + -------------- +
入力--------->| オリジナルアプリ|--------->Response1
               + -------------- +

               + ------------ +
入力--------->| 変更されたアプリ|--------->Response2
               + ------------ +

これで、追加のdllの関数の使用方法がわかれば、元のアプリと同じように自分で使用できます。

于 2009-02-13T08:39:31.500 に答える