Kod bana ait değil :d
Kod:
#define INRANGE(x,a,b) (x >= a && x <= b)
#define getBits( x ) (INRANGE((x&(~0x20)),'A','F') ? ((x&(~0x20)) - 'A' + 0xa) : (INRANGE(x,'0','9') ? x - '0' : 0))
#define getByte( x ) (getBits(x[0]) << 4 | getBits(x[1]))
Kod:
DWORD FSignature(const char* szSignature, ModuleInfo * Mod)
{
DWORD startAddress = Mod->dwBaseAddr;
DWORD endAddress = startAddress + Mod->dwSize;
const char* pat = szSignature;
DWORD firstMatch = 0;
for (DWORD pCur = startAddress; pCur < endAddress; pCur++) {
if (!*pat) return firstMatch;
if (*(PBYTE)pat == '\?' || *(BYTE*)pCur == getByte(pat)) {
if (!firstMatch) firstMatch = pCur;
if (!pat[2]) return firstMatch;
if (*(PWORD)pat == '\?\?' || *(PBYTE)pat != '\?') pat += 3;
else pat += 2; //one ?
}
else {
pat = szSignature;
firstMatch = 0;
}
}
return NULL;
}
Kod:
FSignature("8B 35 ? ? ? ? 85 FF 74 73", CshModule)
Son düzenleme: