2017-06-22 2 views
1

私はインプロセスで動作するアドインを書いています。私は確実にそのプロセスで既に読み込まれているDLLのメモリアドレスを発見することができます。オフセットのメモリは、 "MZ" DOSヘッダーと "PE"ヘッダーを明確に示しています。後で、エクスポートされた関数などの名前が表示されます。これは、ロードされたDLLのように歩み寄り、話します。私はロードされたDLLの開始アドレスを持っていますが、そのエクスポートをどのように発見して呼び出すことができますか?

ここで、DLLが何であるか、そしてもっと興味深いことに、私ができることをもっと発見したいと思いますと一緒に実行します。

これまでPEユーティリティを使用していましたが、ファイルベースのDLLを使用していました。 16進エディタでプロセスを検査する以外に、インメモリDLLのエクスポートされた関数を一覧表示するにはどうすればよいですか?現在ロードされているファイルベースのDLLを検出する方法はありますか? (私は、DLLがロードされたときに起こると思われるリンクにあまり慣れていません)

エクスポートされた関数の名前を持っているのであれば、それらの関数を呼び出そうとしても問題ではありません引数と戻り値あるいは、実行可能なさらに強力なリバースエンジニアリングがありますか?

DLLの開始アドレスと関数名が与えられたら、C#でどのように呼び出しを行うのですか?

答えて

0

ここには実際に多くの質問があります(そしてかなり広大です)。私はいくつかの答えを提供しようとします。 [MSDN]: GetModuleHandleEx functionは、その名前またはアドレスが知られているか否か(GET_MODULE_HANDLE_EX_FLAG_FROM_ADDRESSフラグ)

  • ファイル名を取得するために使用

    • は、現在のプロセスにロードされたモジュール(の.dll)のハンドルを取得しますロードされたコード.dllを使用してください。[MSDN]: GetModuleFileName function。この時点で、あなたが言及したPEユーティリティを使用することができます(Dependency Walkerまたは[MSDN]: Sysinternals Suiteは非常に便利です)

    どうやら、の.dllから関数のシグネチャを取得することは、時には簡単な作業(ではありませんそれは非常に不可能です)。ここでは3つのURLですが、グーグルは、このトピックに関する結果のトンをもたらすであろう:

    しかしは、1つまたは複数が付属していますの.dll ヘッダファンクション/クラスの宣言を含むファイルがあります。例えば、(彼らはプライベートである

    • の.dllシンボルは、内部目的のためのもの(及び「手動」と呼ばれていない)
    • :ヘッダ(単数または複数)を欠いているいずれかのことを意味します)のライセンスで保護され、その場合には、あなたが関数名と署名を得る一つの方法または別の、あなたが[MSDN]: GetProcAddress functionを経由して機能をロードできることを考えると、

    とにかく彼らは非常に倫理的ではありませんリバースエンジニアリング、およびそれらを呼び出します。しばらくC.NETC#)(再び、関数名と署名が必要とされる)からすべてをやっ

    は、C#のコードがで実行されるためだけ複雑さの余分なレベルを追加し、環境を管理します/ C++ネイティブ環境で実行され、データが2つの環境の間で交換されたとき、それはが整列する必要がある/整列化[MSDN]: Overview of Marshaling in C++)。
    以下は3つのURLですが、やはり、インターネットは情報がいっぱいです:

  • 関連する問題

     関連する問題