0

LoadLibraryA によってロードされたときにスレッドを作成するこの dll を取得しました。この dll は RtlCreateUserThread を使用して別のプロセスに注入され、注入は成功し、dll はターゲット プロセスにロードされます (kernel32 LoadLibraryA スレッドが存在します)。 CreateThread が ERROR_NOT_ENOUGH_MEMORY になったので、RtlCreateUserThread またはターゲット プロセスまたは DLL 自体に問題があるのでしょうか? どうすれば解決できますか?どうもありがとう!!

4

2 に答える 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 に答える