3

これで本当にあなたの助けをいただければ幸いです。

私はDllをリモートプロセスに注入し、その中でいくつかの変更を加えようとしていますが、現在直面している問題は、これを実行する方法がわからないことです。

まず、これまでに開発したコードを次に示します
。dllmain.cpp

#include <windows.h>
#include <stdio.h>

BOOL APIENTRY DllMain (HINSTANCE hInst     /* Library instance handle. */ ,
                       DWORD reason        /* Reason this function is being called. */ ,
                       LPVOID reserved     /* Not used. */ )
{
switch (reason)
    {
      case DLL_PROCESS_ATTACH:
           MessageBox (0, "From DLL\n", "Process Attach", MB_ICONINFORMATION);
        break;

      case DLL_PROCESS_DETACH:
           MessageBox (0, "From DLL\n", "Process Detach", MB_ICONINFORMATION);
        break;

      case DLL_THREAD_ATTACH:
           MessageBox (0, "From DLL\n", "Thread Attach", MB_ICONINFORMATION);
        break;

      case DLL_THREAD_DETACH:
           MessageBox (0, "From DLL\n", "Thread Detach", MB_ICONINFORMATION);
        break;
    }  

    return TRUE;
}

満たす条件に応じてメッセージボックスを表示するだけです。ここで、DLLに実行させたいのは、リモートプロセスに挿入された後、メモリの場所を書き込んでその値を変更することです。

データ型:Unsigned Short Int
メモリの場所:0041D090

すべてが明確であることを願っています。今しばらくお待ちいただきますようお願いいたします。ご協力をよろしくお願いいたします。

4

1 に答える 1

6

固定アドレスにある別のプロセスのメモリを変更するためにDLLを作成する必要はありません。を使用できますWriteProcessMemory()

ただし...DLLを別のプロセスに挿入する方法は次のとおりです...

  1. VirtualAllocEx()ターゲットプロセスのメモリ内のDLLにファイルパスの長さを割り当てるために使用します...これは、リモートでを実行するようなものmallocです。

  2. WriteProcessMemory()DLLへのファイルパスを前の手順で返されたものにコピーするために使用します。これは、リモートでを実行するようなものstrcpyです。

  3. を使用しCreateRemoteThread()ます。これをLoadLibrary()エントリポイントとして指定し、手順1と2のファイルパスを引数として指定できます。正直なところ、これは少しハッキーですが、DLLを挿入している場合は、すでにかなりハッキーになっています。もう1つの手法は、手順1と2を使用して、マシンコードをリモートプロセスにロードし、それをポイントすることです。

この手法は、ターゲットプロセスを不安定にする優れた方法であることに注意してください。特に、これは私が他の人に出荷されることになる製品で行うことではありません。

于 2009-11-22T02:03:28.173 に答える