C++ Pattern Scan

Durum
Üzgünüz bu konu cevaplar için kapatılmıştır...
l33t
Seçkin Üye
Katılım
5 Ara 2015
Mesajlar
464
Tepki puanı
76
Ödüller
9
10 HİZMET YILI
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:
Durum
Üzgünüz bu konu cevaplar için kapatılmıştır...