5

C# で作成された実行可能ファイルがあります。そのソース コードはありませんが、IDA で逆アセンブルし、多くのオブジェクト指向アセンブリを作成しました。

.dll を別の .exe に挿入する .exe ファイルを作成し、この新しい C++ DLL を C# .exe に挿入しましたが、問題なく、DLLMain が呼び出され、...

しかし、この DLL を C++ で作成された通常の .exe ファイルに挿入すると、IDA で取得できるメモリ アドレスを使用して .exe 内の関数を呼び出すことができます。

問題は、関数名が逆アセンブルされていても、オブジェクト指向アセンブリにはその関数にアドレスがないことです。

では、C# .exe ファイルに挿入された DLL でこの関数を呼び出す方法はありますか?

可能であれば、C# .exe ファイルで宣言された名前空間とそのすべての関数と変数を、プライベートであっても使用できる方法はありますか?

サンプルの逆アセンブル コード:

.namespace MyCSharpApp
{
.class public auto ansi Test extends [mscorlib]System.Object
{
  .field public value class [Microsoft.Xna.Framework]Microsoft.Xna.Framework.Vector2 pos

  .field public int32 foo
....
4

2 に答える 2

3

あなたは何かトリッキーなことをしようとしていますが、それが何であるかは完全にはわかりません. あなたの説明から、少なくとも 4 つのことがわかります。

  • マネージドEXE
  • マネージ DLL
  • アンマネージ EXE
  • アンマネージ DLL

制御できるもの (つまり、ソース コード) もあれば、制御できないものもあります。

「注入」と呼ぶプロセスを使用して、制御できないモジュールを変更し、制御できるモジュールを呼び出す必要あります。これを行うには、プロセスのアドレス空間に管理されていないエントリ ポイントが必要なツールを使用しています。

アンマネージ モジュールで必要なものを取得している場合は、新しい混合モード モジュール (明らかに制御できるモジュール) を作成して、制御していないマネージ DLL を呼び出すだけです。これで、管理されていない DLL (エクスポート目的) が有効になり、管理されているという問題は解消されました。

新しいアンマネージド ラッパー モジュールからマネージド コードを呼び出すには、次の紹介記事で説明されている手法を使用できます。

基本的に、ブラックボックス マネージ DLL を参照してそれを呼び出し、インジェクションのために「アドレスを取得」できるアンマネージ エントリ ポイントをエクスポートする C++/CLI プロジェクトが必要です。検索すると、さらに多くのアイデアが見つかります。

最後に、privateこのメソッドを使用してマネージ DLL (制御できない) のメソッドを呼び出すことはできますか? いいえ、直接ではありません。ただし、これはマネージ DLL であるため、誰にとっても役立つエントリ ポイントがいくつか必要であり、それらを呼び出すことができます。 publicそれだけでは不十分な場合は C++/CLI からのリフレクションを使用してプライベート メソッドを呼び出し、プライベート メンバーにアクセスできます。

于 2011-05-23T21:14:23.383 に答える
1

アンマネージド ホスティング/デバッグ API を使用する必要があります。マネージ DLL を挿入できれば、はるかに簡単です。Reflection を使用するだけです。

于 2011-05-23T21:14:27.140 に答える