Página 1 de 1

C buscar instruccion en runtime by linkgl

MensajePublicado:02 Ago 2011, 21:44
por linkgl
Esta función busca instrucciónes en la memoria algo así como en vb seria Instr o en php sería strpos, pero en la memoria xD si queires buscar un NOP por ejemplo (0x90) lo pegas en el char y te devuelve la posición en memoria donde se encuentra
Código: Seleccionar todo
#include <windows.h>
#include <stdio.h>
#include <stdlib.h>
//@CODER: Linkgl
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;
}