NHook ve MinHook
Exoproc iki inline hook modeli sağlar. Seçim “hangisi daha iyi?” sorusu değil; hedef prologue'u, detour gereksinimi ve kabul edilen çalışma zamanı...
Exoproc iki inline hook modeli sağlar. Seçim “hangisi daha iyi?” sorusu değil; hedef prologue'u, detour gereksinimi ve kabul edilen çalışma zamanı davranışı sorusudur.
| Özellik | NHook | MinHook |
|---|---|---|
| Patch | 2 byte EB FE | En az 5 byte göreli jmp |
| Hit akışı | Thread park edilir, host poll() ile yakalar | Detour hedef process'te doğrudan çalışır |
| Özgün prologue | Desteklenen talimatlar host tarafından simüle edilir | Taşınır ve trampoline içinde yürür |
| Detour | Yerleşik JS hit/resume modeli | Çağıranın sağladığı adres veya CMachineCode |
| Başlıca sınır | Talimat simülasyonu ve hit lifecycle'ı | Talimat relocation ve rel32 mesafesi |
NHook: park et, yakala, sürdür
NHook, hedef girişindeki tam talimatları en az iki byte kapsayana kadar çözer ve başlangıca EB FE yazar. Hedef thread bu sonsuz kısa atlamaya gelince host poll() ile hit'i görür. resume() varsayılan akışta taşınan talimatların desteklenen alt kümesini simüle eder ve thread'i fonksiyon gövdesinin devamına yönlendirir; istenirse dönüş değeri zorlanabilir.
Bu yaklaşım “trampoline yok” demektir, “her prologue desteklenir” demek değildir. Desteklenmeyen talimatlar, karmaşık control flow ve hit'i zamanında işleyemeyen host tasarımı için uygunluğu test edin.
MinHook: detour ve trampoline
MinHook, hedefin yeterli başlangıç talimatını trampoline'e taşır ve hedefe beş byte'lık jmp yazar. create() trampoline'i kurar ama patch yazmaz; enable(detour) detour'u seçip patch'i yükler. Detour uzak adres ise çağıranın bunu hedefte kullanılabilir hale getirmesi gerekir; CMachineCode verildiğinde accessor üzerinden taşınabilir.
Detour doğrudan rel32 erişiminde değilse MinHook, hedefe yakın ayrılmış bir relay kullanır. Relay/trampoline tahsisi, RIP-relative talimat relocation'ı ve detour'un kendi ABI'si MinHook'un en kritik doğrulama alanlarıdır. Detour'un JavaScript ile iletişim protokolünü MinHook tanımlamaz.
Her iki hook için de yaşam döngüsünü ve kontrollü hedef üzerindeki enable/disable testini temel alın.
NThread sorun giderme
Bu sayfa hata mesajını belirti olarak ele alır. Amaç, hemen daha büyük timeout vermek değil, çağrının hangi aşamada bozulduğunu ayırmaktır.
Hook yaşam döngüsü
NHook ve MinHook'ta create, enable, disable ve destroy ayrı adımlardır. Ortak isimlere rağmen cleanup ve hit işleme davranışları aynı değildir;...