Underc0de

Programación General => C / C++ => Códigos Fuentes => Mensaje iniciado por: linkgl en Agosto 13, 2011, 01:02:53 PM

Título: Modificar valores de los registros en runtime
Publicado por: linkgl en Agosto 13, 2011, 01:02:53 PM
Esta función modifica el valor de algun registro en runtime, puedes usar openprocess o algun sleep si quieres obtener/escribir el valor en algun evento jeje yo cambié el entrypoint haciendo que al cargar el programa eax cambie de valor en el ejemplo, utilicé la estructura CONTEXT para evitarme líos
#include <stdio.h>
#include <windows.h>
 
/*
USOS:
Para obtener el valor de otro registro
cambiar donde dice con.Eax por
con.Registro_que_quieras
*/
 
DWORD ObtenerRegistro(LPSTR proceso)
{
   STARTUPINFO si;
   PROCESS_INFORMATION pi;
   CONTEXT con;
   memset(&si, 0, sizeof(si));
   si.cb = sizeof(STARTUPINFO);
   con.ContextFlags = CONTEXT_FULL;
   if(CreateProcess(NULL, proceso, NULL, NULL, FALSE, CREATE_SUSPENDED, NULL, NULL, &si, &pi)==0)
   {
     return 0;
   }
   GetThreadContext(pi.hThread, &con);
   ResumeThread(pi.hThread);
   return con.Eax;
}
 
BOOL EscribirRegistro(LPSTR proceso,DWORD valor)
{
   STARTUPINFO si;
   PROCESS_INFORMATION pi;
   CONTEXT con;
   memset(&si, 0, sizeof(si));
   si.cb = sizeof(STARTUPINFO);
   con.ContextFlags = CONTEXT_FULL;
   if(CreateProcess(NULL, proceso, NULL, NULL, FALSE, CREATE_SUSPENDED, NULL, NULL, &si, &pi)==0)
   {
     return FALSE;
   }
   GetThreadContext(pi.hThread, &con);
   con.Eax = valor;
   SetThreadContext(pi.hThread,&con);
   ResumeThread(pi.hThread);
   return TRUE;
}
 
//->EJEMPLO DE USO
int main()
{
DWORD eax;
//Cambiamos el valor eax (el entrypoint)
EscribirRegistro("c:\\final.exe",0x413b72f);
eax=ObtenerRegistro("c:\\final.exe");
printf("%x",eax);
getchar();
return 0;
}
Título: Re:Modificar valores de los registros en runtime
Publicado por: Sensei en Agosto 16, 2011, 04:31:12 PM
Estas aportando muy buenos códigos, yo personalmente en C sé programar, pero no sé manejar en profundidad todas las librerias. Un buen ejemplo de como utlilizar la de windows :).
Título: Re:Modificar valores de los registros en runtime
Publicado por: linkgl en Agosto 16, 2011, 11:04:01 PM
No tienes permitido ver los links. Registrarse o Entrar a mi cuenta
Estas aportando muy buenos códigos, yo personalmente en C sé programar, pero no sé manejar en profundidad todas las librerias. Un buen ejemplo de como utlilizar la de windows :).

Gracias, jaja enrealidad no es que maneje bien la librería de windows xD solo basta con mirar la msdn de microshit y mirar que API debe ir jaja ;), seguiré aportando algunos códigos que me salgan de la manga jaja para que no muera esta sección que anda algo "inactiva"  :)
Título: Re:Modificar valores de los registros en runtime
Publicado por: Ahkbar en Julio 18, 2012, 11:18:24 PM
Genial, con esto puedes saltarte partes de cualquer programa?

Saludos.