Ver Mensaje Individual
  #9  
Antiguo 04-06-2016
Delshire Delshire is offline
Registrado
NULL
 
Registrado: jun 2016
Posts: 6
Reputación: 0
Delshire Va por buen camino
El problema creo que esta en la funcion del Match, me tira un error de excepcion o violacion de memoria creo y cuando abri un debugger para ver donde tiraba el crash era cuando entraba a esa funcion. No se si es la funcion que esta mal o si es como lo estoy llamando que esta mal.

Asi llamo a la funcion FindPattern que luego llama a Match dentro de ella:

Código:
var
i : Cardinal;
j : Cardinal;
k : PBYTE;
l : PCHAR;
tmp : string;
begin
    i := Cardinal(401000);
    j := Cardinal(8000);
    tmp := '\x53\x8B\xD8\x8B\xC3\xBA\x00\x00\x00\x00\xE8\x00\x00\x00\x00';
    k := PBYTE(tmp);
    l := PCHAR('xxxxxx????x????');
    WriteLn(IntToHex(FindPattern(i,j,k,l), 8));
    ReadLn;
end.

La funcion Match:

Código:
function Match(pData: PByte; bMask: PByte; szMask: PChar): Boolean; stdcall;
begin
  Result := True;
  while (szMask^ <> #0) and Result do
  begin
    if (szMask^ = 'x') and (pData^ <> bMask^) then
    begin
      Result := False;
      Exit;
    end;
    Inc(szMask);
    Inc(pData);
    Inc(bMask);
  end;
  Result := (szMask^ = #0);
end;
Match en C++:
Código:
bool Match(const BYTE * pData, const BYTE * bMask, const char * szMask)
{
	for (; *szMask; ++szMask, ++pData, ++bMask)
		if (*szMask == 'x' && *pData != *bMask)
			return false;
	return (*szMask) == NULL;
}
Como se llama a la funcion en C++:

Código:
DWORD AddressAEncontrar = FindPattern(0x401000, 0x149000, (unsigned char*)"\x55\x8B\xEC\x83\xEC\x18\x68\x00\x00\x00\x00\x64\xA1\x00\x00\x00\x00\x50\x64\x89\x25\x00\x00\x00\x00\xB8\x00\x00\x00\x00\xE8\x00\x00\x00\x00\x53\x56\x57\x89\x65\xE8\xC7\x45\x00\x00\x00\x00\x00\xC7\x45\x00\x00\x00\x00\x00\xC7\x45\x00\x00\x00\x00\x00\xC7\x45\x00\x00\x00\x00\x00\x8B\x55\x08\x8D\x4D\xA0\xFF\x15\x00\x00\x00\x00", "xxxxxxx????xx????xxxx????x????x????xxxxxxxx?????xx?????xx?????xx?????xxxxxxxx????");

Gracias.
Responder Con Cita