Hice estas funciones usando la estructura CONTEXT que nos fácilita el manejo de los registros, con estas funciones podrás obtener en runtime el valor que toma cualquier registro que context permita (Eax,edx,ecx...) yo puse por defecto eax, pero si quieres obtener otro registro cambia eax por el registro que gustes, así como lo hice obtiene el entrypoint ya que este al cargar el programa se encuentra en eax, entonces también puedes cambiar el entrypoint de un programa con la funcioncita de escribirRegistro, si quieres obtener en determinaado momento exacto el valor de algún registro entonces quizá necesites usar OPENPROCESS y pasarle el pid del proceso, en vez de CreateProcess, pero la sintaxis de las funciones es la misma

Código: Seleccionar todo

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

/* 
USOS:
Para obtener el valor de otro registro 
cambiar donde dice con.Eax por
con.Registro_que_quieras
Indetectables.net/foro
funcion-linkgl.blogspot.com
*/

DWORD ObtenerRegistro(LPSTR szProcessName)
{
	    /* Linkgl - Funcion-linkgl.blogspot.com */
    //Estructura startup requerida para createprocess
    //estructura process information requerida para el pid
    //estructura context contiene los valores de los registros
    STARTUPINFO si;
	PROCESS_INFORMATION pi;
	CONTEXT con;
	// limpiamos la estructura si
	memset(&si, 0, sizeof(si));
	//indicamos el tamaño de la estructura
	//en el flag como indica la msdn
	si.cb = sizeof(STARTUPINFO);
	con.ContextFlags = CONTEXT_FULL;
	CreateProcess(NULL, szProcessName, NULL, NULL, FALSE, CREATE_SUSPENDED, NULL, NULL, &si, &pi);
	//obtenemos el contexto y con ello se obtienen los registros
    GetThreadContext(pi.hThread, &con);
    //continuamos el hilo
    ResumeThread(pi.hThread);
    //mandamos el registro
    return con.Eax;
}

BOOL EscribirRegistro(LPSTR szProcessName,DWORD valor)
{
    /* Linkgl - Funcion-linkgl.blogspot.com */
    //Estructura startup requerida para createprocess
    //estructura process information requerida para el pid
    //estructura context contiene los valores de los registros
    STARTUPINFO si;
	PROCESS_INFORMATION pi;
	CONTEXT con;
	// limpiamos la estructura si
	memset(&si, 0, sizeof(si));
	//indicamos el tamaño de la estructura
	//en el flag como indica la msdn
	si.cb = sizeof(STARTUPINFO);
	con.ContextFlags = CONTEXT_FULL;
	//creamos el proceso
	CreateProcess(NULL, szProcessName, NULL, NULL, FALSE, CREATE_SUSPENDED, NULL, NULL, &si, &pi);
	//obtenemos el contexto y con ello se obtienen los registros
    GetThreadContext(pi.hThread, &con);
    //ponemos el nuevo valor
	con.Eax = valor;
	//lo guardamos en el hilo
	SetThreadContext(pi.hThread,&con);
	//continuamos el hilo
    ResumeThread(pi.hThread);
    return TRUE;
}

//->EJEMPLO DE USO
int main()
{
DWORD eax;
//Cambiamos el valor eax (osea vamos a cambiar el entrypoint)
EscribirRegistro("c:\\final.exe",0x413b72f);
//Obtenemos el registro aver si se cambio
eax=ObtenerRegistro("c:\\final.exe");
//Imprimimos el nuevo registro o entrypoint
printf("%x",eax);
getchar();
return 0;
}
//mHmm..
Gracias por compartir ¡¡¡ Muy interesante , esto creo que seria mas facil en ASM , pero se te agradece ¡¡¡
Sigue así @linkgl con razón ya eres VIP ;)

Saludoss
willyf escribió:Gracias por compartir ¡¡¡ Muy interesante , esto creo que seria mas facil en ASM , pero se te agradece ¡¡¡
Sigue así @linkgl con razón ya eres VIP ;)

Saludoss
XD no conozco forma de hacerlo en asm puro, si lo paso a asm, sería también usando estas estructuras o APIS como por ejemplo, ReadProcessMemory/WriteProcessMemory/WriteVirtualMemory de la ntdll :P
//mHmm..
weee , de verdad me gusto el codigo , buena implementeacion de logico con las direcciones de DoubleWord(DWORD) xD
willyf tiene razo , ese color t lo merecias desde hace un rato!
obey escribió:Pues si tuviese mas edad todavia pero esqe perder la virginidad con tu profesora de informatica y que ademas tenga 50....
.
Consejo:
despues de llamar a CreateProcess() espera con para continuar...
WaitforSingleObject()

Dulces Lunas!¡.
Web: http://infrangelux.sytes.net/
ScanX: http://ScanX.sytes.net/
FileX: http://FileX.sytes.net/
Blog: http://BlogX.sytes.net/

Imagen


The Dark Shadow is my passion.
El infierno es mi Hogar, mi novia es Lilith y el metal mi religion
Responder

Volver a “Fuentes”