dynamic api resolution. çok kullanırım ve çalışır.
winapi'ları direkt çağırma çünkü IAT'de görünürler.
runtime'da PEB üzerinden kernel32.dll veya ntdll.dll'yi bul, export tablosunu kendin parse et ve fonksiyon adreslerini hashlenmiş isimleriyle bul. bu sayede statik analizde hangi api'yı calladığın görünmez.
syscalllar.
winapi'ları atlayarak kernele konuşan syscallları kullan. ScyllaHide'nin attığı user-mode hooklar gibi hookları bypasslarsın.
Hell's Gate veya Halo's Gate'ye bakabilirsin.
klasik IsDebuggerPresent yerine kodun iki noktası arasındaki çalışma süresini __rdtsc ile ölç.
eğer kod debuglanıyorsa (step-over) bu süre uzar. fark eşiği açarsa istediğini yap.
CPUID ile vm kontrolü yap.
VMP/Themida tarzı bir şey içinse kendi VM'ini yapabilirsin.
mesela lisans kontrolü fonksiyonunu kendi yazdığın basit bir vm diline çevir.
programın içinde küçük bir interpreter olsun ve bu özel bytecode'yi çalıştırsın.
programın belirli bölümlerini şifreli tut. çalışma sırasında o an lazım olan fonksiyonun şifresini çöz, çalıştır ve hemen şifrele ya da sil.
memoryden dump alındığında kodun eksik veya bozuk çıkar.
TLS (thread local storage) callbackler.
main() fonksiyonundan önce çalışan kodlardır.
debuggerlar genelde programı entry pointte durdurur ama TLS callbackler ondan önce çalışır.
anti debug kontrollerini buraya koyarsan daha maine gelinmeden programı uçurabilirsin.
iyi forumlar.