2

Madshi の madCodeHook コンポーネントを使用してプロセスに DLL を挿入し、プロシージャ/関数をフックします。問題は、新しいバージョンの EXE が登場するたびに、関数のアドレスが変更される可能性があることです。現在、私が行う方法は、Ollydbg を使用してから、プロセスに挿入する DLL にアドレスをハードコーディングすることです。これは非常に醜く、安全ではありません。動的に実行できる場合、プロシージャの定義を知る方法があるかどうか疑問に思っています。

これは悪意を持ったものではないことに注意してください。ログを記録する目的でターゲット EXE にいくつかの手順をフックしただけです。

4

4 に答える 4

4

関数自体が (あまり) 変更されない場合は、必要なコードを検索する (オペコードまたは 16 進バイトを検索する) か、同じ目的で Madshi の disasm ユニットを使用できます。

于 2010-09-21T21:28:02.323 に答える
3

フックしているプログラムからの協力がなければ、必要なことを行う簡単な方法はありません。

通常、その連携はモジュールのエクスポート テーブルの形式で行われますが、関数のアドレスを要求するために使用する API を提供するプログラムからも行われる可能性があります。

フックされたプログラムがリリースされるたびに DLL を更新しても、コードが機能する保証はありません。あなたがしていることは、まさにアドレス空間レイアウトのランダム化が保護するはずの種類のものです。プログラムは、実行するたびに異なるアドレスにロードされる可能性があります。

Ollydbg で関数を見つけるために使用するプロセスを何らかの形で自動化できるかどうかが最善の策だと思います。次に、それを DLL に組み込み、関数自体を検索できるようにします。

于 2010-09-21T20:05:18.820 に答える
0

場合によります。デフォルトでは、Delphi はネイティブ マシン コードにコンパイルされます。ほとんどの場合、そのようなメタデータはありません。(多くの人はそれをセキュリティ機能と見なしています。これにより、ここでやろうとしていることを正確に行うことができなくなり、悪意のある目的に使用される可能性があります。) . これには、公開されているすべてのメソッドと、D2010 および Delphi XE のすべてのパブリックメソッド (少なくともデフォルトでは) が含まれます。これらの RTTI テーブルは読み取ることができますが、それらを見つけるには多くの低レベルの知識が必要です。

また、一部のプログラムには、インストール フォルダーに、またはリソースとして埋め込まれているさまざまなマップ ファイルが付属しており、何か問題が発生した場合のエラー報告を容易にします。このプログラムにそれがあり、その形式を理解できる場合、そこからメソッド アドレスを取得できる可能性があります。

于 2010-09-21T20:03:11.583 に答える
0

dll を使用している場合は、dll 内で getprocaddress を使用して関数のアドレスを取得できます

于 2010-09-22T08:09:55.127 に答える