Çözüldü AOB Scan nasıl yapılır ?

Durum
Üzgünüz bu konu cevaplar için kapatılmıştır...
Üye
Katılım
29 Haz 2021
Mesajlar
46
Çözümler
1
Tepki puanı
8
Ödüller
4
4 HİZMET YILI
AOB veya Pattern scan ve replace (change) işlemi nasıl yapılıyor bilen varmı ?
c# - c++ kodlama dili farketmez yardımcı olabilicek biri varmı
 
Çözüm
Basit bir örneği bu, tam olarak nasıl bir yardım istiyorsunuz anlamadım ama.

C++:
CProcess* Proc = new CProcess(L"hangi oyunsa artık :P.exe");
uintptr_t addr = Proc->FindPatternEx("sig buraya gelecek (mesela \x48\x8D\xBE\)", "xxxx???xxxxx?xxx");
assembly so hard please help me
Donator
Katılım
7 Nis 2017
Mesajlar
1,467
Çözümler
346
Tepki puanı
248
Ödüller
14
9 HİZMET YILI
Basit bir örneği bu, tam olarak nasıl bir yardım istiyorsunuz anlamadım ama.

C++:
CProcess* Proc = new CProcess(L"hangi oyunsa artık :P.exe");
uintptr_t addr = Proc->FindPatternEx("sig buraya gelecek (mesela \x48\x8D\xBE\)", "xxxx???xxxxx?xxx");
 
Çözüm
Üye
Katılım
29 Haz 2021
Mesajlar
46
Çözümler
1
Tepki puanı
8
Ödüller
4
4 HİZMET YILI
Basit bir örneği bu, tam olarak nasıl bir yardım istiyorsunuz anlamadım ama.

C++:
CProcess* Proc = new CProcess(L"hangi oyunsa artık :P.exe");
uintptr_t addr = Proc->FindPatternEx("sig buraya gelecek (mesela \x48\x8D\xBE\)", "xxxx???xxxxx?xxx");
source paylaşma şansınız varmı acaba ?
 
CSharp
Banlı Üye
Katılım
31 Tem 2018
Mesajlar
463
Çözümler
3
Tepki puanı
149
Ödüller
3
7 HİZMET YILI
IDA style ile pattern alıp bu fonksiyonu kullanabilirsin.

C++:
std::uint8_t* PatternScan(void* module, const char* signature)
    {
        static auto pattern_to_byte = [](const char* pattern) {
            auto bytes = std::vector<int>{};
            auto start = const_cast<char*>(pattern);
            auto end = const_cast<char*>(pattern) + strlen(pattern);
 
            for(auto current = start; current < end; ++current) {
                if(*current == '?') {
                    ++current;
                    if(*current == '?')
                        ++current;
                    bytes.push_back(-1);
                } else {
                    bytes.push_back(strtoul(current, &current, 16));
                }
            }
            return bytes;
        };
 
        auto dosHeader = (PIMAGE_DOS_HEADER)module;
        auto ntHeaders = (PIMAGE_NT_HEADERS)((std::uint8_t*)module + dosHeader->e_lfanew);
 
        auto sizeOfImage = ntHeaders->OptionalHeader.SizeOfImage;
        auto patternBytes = pattern_to_byte(signature);
        auto scanBytes = reinterpret_cast<std::uint8_t*>(module);
 
        auto s = patternBytes.size();
        auto d = patternBytes.data();
 
        for(auto i = 0ul; i < sizeOfImage - s; ++i) {
            bool found = true;
            for(auto j = 0ul; j < s; ++j) {
                if(scanBytes[i + j] != d[j] && d[j] != -1) {
                    found = false;
                    break;
                }
            }
            if(found) {
                return &scanBytes[i];
            }
        }
        return nullptr;
    }

Bağlantıları görmek için lütfen Giriş Yap
 
Durum
Üzgünüz bu konu cevaplar için kapatılmıştır...
Üst