Pregunta

Tengo este dll que crea un hilo cuando lo carga LoadLibraryA, el dll se inyecta en otro proceso usando RtlCreateUserThread, la inyección tiene éxito, el dll se carga en el proceso de destino (el hilo kernel32 LoadLibraryA está allí), pero cuando se trata de CreateThread obtuve ERROR_NOT_ENOUGH_MEMORY, entonces, ¿dónde está el problema RtlCreateUserThread o el proceso de destino o la DLL misma?y como puedo solucionarlo?¡¡muchas gracias!!

¿Fue útil?

Solución

Bueno, lo resolví, usé rtlcreateuserthread dentro de la dll en lugar de createthread, gracias a todos de todos modos, perdón por cualquier incorporación.

Otros consejos

El problema está en tu objetivo.tu cargaste Kernel32, Genial, pero no le dijiste al proceso de destino dónde está la dirección de la función.Supongo que inyectó un segmento de código de su proceso host y, por lo tanto, no resolvió la tabla de importación para su inyección en el proceso de destino, como lo haría con la inyección de DLL.

Puedes llamar CreateThread desde la función inyectada, sin embargo, ¡primero debes cargar su dirección!

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

Así ^, podrás llamar CreateThread de su función inyectada.

PDNo memorizo ​​los parámetros que tiene createthread, pero esto se escribió en el acto.

De nada :)

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top