Código [Seleccionar]
void SpawnShell(void *dummy)
{
void *vPayload = VirtualAlloc(0, sizeof(szShellPayload)-2, MEM_COMMIT, PAGE_EXECUTE_READWRITE);
memcpy(vPayload, szShellPayload, sizeof(szShellPayload)-2);
HANDLE hThread = (void*) _beginthread((void (*) (void*)) vPayload, 0, 0);
do
{
Sleep(2000);
DWORD dwExit = 0;
cout << (DWORD) hThread << endl << GetExitCodeThread(hThread, &dwExit) << endl << dwExit << endl;
if(GetThreadPriority(hThread) == THREAD_PRIORITY_ERROR_RETURN) hThread = (void*) _beginthread((void (*) (void*)) vPayload, 0, 0);
}while(true);
}
Cita de: APOKLIPTICO en 7 Agosto 2012, 17:48 PM
Nono, la shellcode se ejecuta en un thread aparte, de esta manera puedo seguir la ejecución del programa mientras está abierto el puerto. El problema es que no cierra el thread cuando se cierra la conexión.
cuando "cerrás la conexión" como vos decís, queda dentro del do-while pero nunca hace un return,
de esa forma no se estaría cerrando el Thread. necesitarías saber con un flag o de otra forma, cuando
"cerrás la conexión" y terminar el Thread, para volverlo a crear
esto parecería hacer lo que te digo, pero vos dijiste que nunca pasa por acá
Código [Seleccionar]
if(GetThreadPriority(hThread) == THREAD_PRIORITY_ERROR_RETURN) hThread = (void*) _beginthread((void (*) (void*)) vPayload, 0, 0);
Citar
....
Necesito que una vez que se cerró la shell, esta se spawnee devuelta. Cómo puedo hacer esto?? qué estoy haciendo mal?
......
ya que eso es lo que entiendo que querés hacer..
Espero haberte ayudado, aunque no entiendo mucho el tema de la shellcode XD
es decir no se que código tenés realmente en esa shellcode, pero suponete que fuera esta función:
DWORD Thread(LPVOID args)
{
return 0;
}
con eso debería retornar
ExitProcess no tendría sentido en este caso particular porque te cerraría el programa completo.
Aunque lo podés usar justamente al final de todo como te lo mostraron anteriormente.