LoadLibraryA によってロードされたときにスレッドを作成するこの dll を取得しました。この dll は RtlCreateUserThread を使用して別のプロセスに注入され、注入は成功し、dll はターゲット プロセスにロードされます (kernel32 LoadLibraryA スレッドが存在します)。 CreateThread が ERROR_NOT_ENOUGH_MEMORY になったので、RtlCreateUserThread またはターゲット プロセスまたは DLL 自体に問題があるのでしょうか? どうすれば解決できますか?どうもありがとう!!
質問する
1541 次
2 に答える
0
問題はターゲットにあります。をロードKernel32
しましたが、関数のアドレスがどこにあるかをターゲット プロセスに伝えていません。ホスト プロセスからコード セグメントを挿入したため、DLL インジェクションの場合とは異なり、ターゲット プロセスへのインジェクションのインポート テーブルが解決されなかったと仮定します。
注入された関数から呼び出すことができますCreateThread
が、最初にそのアドレスをロードする必要があります!
typedef DATATYPE_OF_CREATETHREAD (__stdcall *MyCreateThread)(PARAMS_OF_CREATETHREAD);
MyCreateThread _MyCreateThread;
_MyCreateThread = (MyCreateThread)GetProcAddress("kernel32.dll", "CreateThread");
_MyCreateThread(PARAMS_TO_PASS); // CreateThread, with it's address loaded in memory of your injected code segment/function
CreateThread
そのように^、注入された関数から呼び出すことができます。
PS私はparams createthreadが持っていることを覚えていませんが、これはその場で書かれました。
どういたしまして :)
于 2016-06-01T05:36:31.687 に答える
0
まあ、私はそれを解決しました.CreateThreadの代わりにDLL内でRtlCreateUserThreadを使用しました.とにかくありがとうございました.
于 2011-05-05T09:42:25.100 に答える