Code:
DWORD dwSize;
DWORD dwStartAddress;
BOOL bCompare(const BYTE* pData, const BYTE* bMask, const char* szMask)
{
for (; *szMask; ++szMask, ++pData, ++bMask)
{
if (*szMask == 'x' && *pData != *bMask)
return 0;
}
return (*szMask) == NULL;
}
DWORD FindPattern(BYTE *bMask, char * szMask, int codeOffset, BOOL extract)
{
for (DWORD i = 0; i < dwSize; i++)
{
if (bCompare((BYTE*) (dwStartAddress + i), bMask, szMask))
{
if (extract)
{
return *(DWORD*) (dwStartAddress + i + codeOffset);
}
else
{
return (DWORD) (dwStartAddress + i + codeOffset);
}
}
}
return NULL;
}
How to use :
[HTML]DWORD ServerPTR = FindPattern((PBYTE)"\x83\x3D\x00\x00\xAE\x00\x00\x 74\x07\xE8\x2E\x03\x00\x00\xEB\x02", "xx??xxxxxxxxxxxx", 2, true);
Writelog("#define ADR_SERVERPTR 0x%X", ServerPTR);[/HTML]