Underc0de

Programación General => C / C++ => Códigos Fuentes => Mensaje iniciado por: linkgl en Agosto 16, 2011, 12:24:17 PM

Título: Buscar bytes en la memoria virtual
Publicado por: linkgl en Agosto 16, 2011, 12:24:17 PM
Este código lo hice en base a otro código mío jaja, este es como un "STRPOS" o "INSTR" que busca determinados bytes en la memoria de un programa y retorna la posicion en la que se encuentran, partiendo de una dirección que le des, ejemplo

buscar 0x90
desde 0x401000
retorno 0x40105D
(por poner un ejemplo)

#include <windows.h>
#include <stdio.h>
#include <stdlib.h>
DWORD FindXBytes(DWORD inicio,LPVOID bytes,LPSTR proceso,DWORD tam)
{
  STARTUPINFO si
  PROCESS_INFORMATION pi;
  ZeroMemory( &si, sizeof(si) );
  ZeroMemory( &pi, sizeof(pi) );
  si.cb = sizeof(si);
  DWORD leidos;
  char *value;
  value=(char *)malloc(tam);
  memset(value,0,tam);
  if(CreateProcess(proceso,"",NULL,NULL,FALSE,NULL,NULL,NULL,&si,&pi))
  {
    ResumeThread(pi.hThread);
    while(ReadProcessMemory(pi.hProcess, (LPVOID)inicio, &value, tam, &leidos))
    {
      if(memcmp(bytes,&value,tam)==0)
      {
        TerminateProcess(pi.hProcess,0);
        return inicio;
      }
      inicio++;
    }
    TerminateProcess(pi.hProcess,0);
    return 0;
  }
  else
  {
    return 0;
  }
}
int main()
{
  //->Ejemplo de uso 
  char buscar[7]={0xFF,0x35,0x50,0x20,0x40,0x00};
  int posicion=FindXBytes(0x401000,buscar,"c:\\crackme2.exe",6);
  if(posicion!=0)
    printf("%s esta en la direccion en memoria-> %X",buscar,posicion);
  else printf("no se encontro %s en la memoria virtual del programa");
  getchar();
  return 0;
}
Título: Re:Buscar bytes en la memoria virtual
Publicado por: P4|3L0 en Agosto 10, 2012, 08:49:25 AM
else printf("no se encontro %s en la memoria virtual del programa");

¿?¿?¿? Y ese parametro %s que saca?