comment
IRC Chat
play_arrow
Este sitio utiliza cookies propias y de terceros. Si continúa navegando consideramos que acepta el uso de cookies. OK Más Información.

Buscar y reemplazar bytes en runtime (loader)

  • 0 Respuestas
  • 1195 Vistas

0 Usuarios y 1 Visitante están viendo este tema.

Desconectado linkgl

  • *
  • Underc0der
  • Mensajes: 45
  • Actividad:
    0%
  • Reputación 0
    • Ver Perfil
« en: Agosto 13, 2011, 01:35:57 am »
Buen este es mi primer post aquí, publicaré un source que ya había hecho hace algunos días, es un loader que buscar y parchea bytes en memoria, tiene la opción de buscar determinados bytes determinadas veces en la memoria y parchearlos. La funcion retorna la cantidad de veces que se parchearon los bytes.

Código: C
  1. #include <windows.h>
  2. #include <stdio.h>
  3. #include <stdlib.h>
  4.  
  5. DWORD MassiveReplace(DWORD inicio,LPVOID bytes,LPVOID replace,LPSTR proceso,DWORD tam,DWORD limite)
  6. {
  7. /*
  8. @Coder->Linkgl
  9.   @Docs:msdn
  10.     @Este código puede ser editado/modificado, respetando los créditos
  11. */
  12.   //Estructuras necesarias para las API's siguientes
  13.   STARTUPINFO si;
  14.   PROCESS_INFORMATION pi;
  15.   //Llenamos las estructuras con 00 para evitar errores
  16.   ZeroMemory(&si, sizeof(si));
  17.   ZeroMemory(&pi, sizeof(pi));
  18.   //Indicamos el tamaño de la estructura
  19.   si.cb = sizeof(si);
  20.   // -->Variables necesarias <--
  21.   DWORD leidos;
  22.   DWORD contador=0;
  23.   char *value;
  24.   // -->Reservamos el espacio necesario en memoria
  25.   // y lo limpiamos <--
  26.   value=(char *)You are not allowed to view links. Register or Login(tam);
  27.   You are not allowed to view links. Register or Login(value,0,tam);
  28.   //-->Creamos el proceso
  29.   if(CreateProcess(proceso,"",NULL,NULL,FALSE,CREATE_SUSPENDED,NULL,NULL,&si,&pi))
  30.   {
  31.     //-->Bucle para leer los bytes desde la direccion indicada en bloques
  32.     // del tamaño indicado
  33.     while(ReadProcessMemory(pi.hProcess, (LPVOID)inicio, &value, tam, &leidos))
  34.     {
  35.       //->PRINTF Para debuggear la funcion en caso de error
  36.       //printf("%x -> %s -> %s ->%d\n",inicio,&value,bytes,leidos);
  37.       //memset(value,0,tam+10);
  38.       //getchar();
  39.       //->findebug
  40.       //->comparamos ambos punteros
  41.       if(You are not allowed to view links. Register or Login(bytes,&value,tam)==0)
  42.       {
  43.         //->si son iguales terminamos el proceso en el que trabajamos
  44.         // y retornamos la direccion en memoria donde encontramos los
  45.         // bytes
  46.         if(contador<limite)
  47.         {
  48.           //Reservamos la memoria en esa direccion con un tamaño de la longitud de los bytes
  49.           VirtualProtectEx(pi.hProcess,(LPVOID)inicio,tam,0x40,&leidos);
  50.           //Escribimos los nuevos bytes en la direccion en memoria
  51.           WriteProcessMemory(pi.hProcess,(LPVOID)inicio,replace,tam,&leidos);
  52.           //Incrementamos el contador
  53.           contador++;
  54.         }
  55.       }
  56.       //->Incrementamos la direccion en memoria al siguiente bloque a leer
  57.       inicio++;
  58.       //Sleep(100); si son muchos los bytes a buscar mejor le ponemos un pequeño sleep
  59.     }
  60.     //-->Continuamos el hilo
  61.     ResumeThread(pi.hThread);
  62.    // TerminateProcess(pi.hProcess,0);
  63.     return contador;
  64.   }
  65.   else
  66.   {
  67.     return 0;
  68.   }
  69. }
  70.  
  71. int main()
  72. {
  73.   //->Ejemplo de uso  
  74.   char buscar[4]={0x00,0x00,0x00};
  75.   char reemplazar[4]={0x90,0x90,0x90};
  76.   int posicion=MassiveReplace(0x401000,buscar,reemplazar,"c:\\crackme2.exe",3,3);
  77.   if(posicion!=0)
  78.     You are not allowed to view links. Register or Login("Se reemplazaron-> %d bytes",posicion);
  79.   else You are not allowed to view links. Register or Login("no se encontro %s en la memoria virtual del programa",buscar);
  80.   You are not allowed to view links. Register or Login();
  81.   return 0;
  82. }
  83.  
« Última modificación: Febrero 08, 2014, 05:46:12 pm por Expermicid »

 

¿Te gustó el post? COMPARTILO!



Modificar valores de los registros en runtime

Iniciado por linkgl

Respuestas: 3
Vistas: 2009
Último mensaje Julio 18, 2012, 11:18:24 pm
por Ahkbar
Buscar bytes en la memoria virtual

Iniciado por linkgl

Respuestas: 1
Vistas: 1677
Último mensaje Agosto 10, 2012, 08:49:25 am
por P4|3L0