0x1A2F4
Master Üye
- Katılım
- 27 Mar 2023
- Mesajlar
- 979
- Beğeniler
- 405
Özelliklere Genel Bakış
- 4 Seviyeli String Şifreleme – Basit XOR, wide-string desteği, stack üzerinde karakter karakter inşaa etme (binary içinde kesinlikle string literali bırakmaz) ve otomatik runtime key yenileme (re-keying) özelliğine sahip 3 katmanlı şifreleme (XOR → XTEA block cipher → Fisher-Yates byte permütasyonu).
- Değer Gizleme (Value Obfuscation) – Derleyicinin "constant folding" (sabit katlama) gibi optimizasyonlarını engelleyen bariyerlerle, integer ve pointer'lar için XOR kodlamalı depolama.
- Karışık Boolean Aritmetiği (MBA) – ADD, SUB, AND, OR, XOR, NEG işlemlerini cebirsel olarak matematiksel eşdeğeri olan karmaşık boolean formlarına ayırma (her işlem için 3 farklı varyasyon bulunur ve çağrıldığı yerde otomatik seçilir).
- Obfuscate Edilmiş Karşılaştırmalar – EQ, NE, LT, GT, LE, GE gibi mantıksal karşılaştırmaların doğrudan değil, MBA ara değerleri üzerinden hesaplanması.
- Opaque Predicates (Şaşırtmaca Koşullar) – RDTSC entropisi, stack adresleri ve derleyicinin içyüzünü çözemediği matematiksel özdeşlikleri (identities) kullanarak her zaman True veya her zaman False dönen koşul ifadeleri.
- Kontrol Akışı Gizleme (Control Flow Obfuscation) – Araya enjekte edilmiş opaque (saydam olmayan) koşullar, çalışmayan ölü kod blokları (dead code sleds) ve sahte state-machine'ler (durum makineleri).
- CFG Flattening (Kontrol Akış Grafiği Düzleştirme) – Fonksiyona özel bir anahtar (key) olmadan geri döndürülemeyen FNV-1a hashli state etiketleri ve XOR şifreli state geçişleriyle tam CFG düzleştirme.
- Anti-Debug – KUSER_SHARED_DATA okumaları, DR7 register'ı için ayrılmış alanlar üzerinden hardware breakpoint tespiti, RDTSC ile single-step (tek adım) süre ölçümü, process debug flag'leri ve KdDebuggerEnabled/NotPresent kontrolleri. Tespit durumunda verilecek tepki ayarlanabilir: Görmezden gel, KeBugCheck (Mavi Ekran verdir) veya stack'i boz (stack corruption).
- Anti-VM – CPUID hypervisor biti ve vendor string hash'leme, IA32_VMX_BASIC MSR kontrolü, registry üzerinde kalıntı (artifact) taraması (VMware/VBox/Hyper-V/KVM/Xen/QEMU/Parallels) ve SMBIOS üretici tespiti.
- Dinamik Import Çözümleme – Çalışma zamanında (runtime) PsLoadedModuleList üzerinde gezinerek export'ları FNV-1a hash ile dinamik olarak çözer. IAT (Import Address Table) girdisi oluşturmaz. Forwarded (yönlendirilmiş) export'ları recursive olarak işleyebilir.
- .text Bütünlük (Integrity) Kontrolü – Kod bölümünüzün (section) FNV-1a hash'ini alarak temel bir doğrulama yapar ve inline hook pattern'lerini (jmp rel32, jmp [rip+disp32], mov rax/jmp rax, int3, push/ret) tespit eder.
- PE Header Silme – Sürücü yüklendikten (post-init) sonra bellekten DOS/NT başlıklarını ve section tablosunu sıfırlar. WinDbg'nin !dh komutunu, IDA analizini ve PE parser araçlarını patlatır/işlevsiz kılar.
- Kernel Uyumlu Primitifler – Sabit boyutlu diziler, RAII tabanlı pool allocation'lar, Interlocked* üzerinden lock-free atomik işlemler ve IRQL durumunu kaydedip geri yükleyen RAII spinlock'lar.
- Kriptografik Primitifler – FNV-1a (32/64 bit, case-insensitive, wide string destekli), rolling XOR şifreleme, XTEA block cipher. Hepsi derleme zamanında (constexpr) şifreleme ve runtime'da şifre çözme (decrypt) desteğine sahip.
- Derleme Zamanı (Compile-time) PRNG – __TIME__, __COUNTER__, __LINE__ kullanarak seed alan xorshift32. Her derlemede tamamen benzersiz anahtarlar (keys), farklı varyant seçimleri ve eşsiz bir çıktı (binary) üretilir.
- Runtime PRNG – RDTSC, performans sayaçları, interrupt time, PID/TID ve stack KASLR entropisinden seed alan xorshift128+.
#NOT Her özelliğin config.h içinde kendi kapatıp açma özelliği mevcuttur istediğinizi devre dışı bırakıp istediğinizi kullanabilirsiniz bu tamamen size kalmış
Kullanım:
C++- #include "kernelcloak.h"
- NTSTATUS DriverEntry(PDRIVER_OBJECT DriverObject, PUNICODE_STRING RegistryPath) {
- // encrypted strings - zero plaintext in binary
- DbgPrint("%s\n", KC_STR("driver loaded"));
- // anti-debug: check and respond
- if (KC_IS_DEBUGGED()) {
- KC_ANTI_DEBUG();
- return STATUS_ACCESS_DENIED;
- }
- // nuke PE headers from memory
- KC_ERASE_PE_HEADER();
- // obfuscated values
- auto magic = KC_INT(0xDEADBEEF);
- // mixed boolean arithmetic - compiler sees algebraic decomposition, not your math
- auto result = KC_ADD(magic, KC_INT(0x1000));
- // obfuscated comparison
- if (KC_EQ(result, KC_INT(0xDEADCEEF))) {
- return STATUS_SUCCESS;
- }
- return STATUS_UNSUCCESSFUL;
- }
Otomatik yeniden anahtarlama ile üç katmanlı şifrelenmiş string'ler:
C++
- // XOR -> XTEA block cipher -> Fisher-Yates shuffle
- // automatically re-encrypts with new keys every 1000 accesses
- KC_STR_LAYERED_HOLDER(secret, "sensitive_data");
- char buf[64];
- secret.decrypt(buf);
C++
- KC_FLAT_FUNC(NTSTATUS, ProcessRequest, int type) {
- KC_FLAT_BLOCK(__entry) {
- KC_FLAT_IF(type == 1, handle_read, handle_write);
- }
- KC_FLAT_BLOCK(handle_read) {
- // ... read logic
- KC_FLAT_RETURN(STATUS_SUCCESS);
- }
- KC_FLAT_BLOCK(handle_write) {
- // ... write logic
- KC_FLAT_RETURN(STATUS_SUCCESS);
- }
- KC_FLAT_END();
- }
Dinamik import gizleme – IAT yok, statik referans yok:
C++
- // resolves at runtime by walking PsLoadedModuleList + export tables
- // function name never appears in your binary
- auto pMmCopyMemory = KC_IMPORT("ntoskrnl.exe", "MmCopyMemory");
C++
Kod:
// her karakter bir template parametresidir, ayrı ayrı şifrelenir
KC_STACK_STR(key, 'p','a','s','s','w','o','r','d','\0');
İşlemlerin Altında Neler Dönüyor?
Her makro, çağırıldığı her noktada (call-site) expand edilerek tamamen benzersiz bir koda dönüşür. Compile-time PRNG, her call-site için özel anahtarlar (keys) oluşturmak adına __COUNTER__ ve __LINE__ makrolarını seed olarak kullanır. Bu sayede kodunuzdaki iki farklı KC_STR("hello") çağrısı, birbirlerinden tamamen farklı ciphertext'ler (şifreli metinler) ve decryption (şifre çözme) rutinleri üretir. MBA (Mixed Boolean Arithmetic) işlemleri, her çağrıldığında 3 farklı cebirsel varyasyon arasından rastgele seçim yapar. Opaque predicate'ler (şaşırtmaca koşullar), 5 farklı "always-true" (her zaman doğru dönen) yapıdan rastgele çekilir. Sonuç olarak ortada, analistlerin tespit edip imza (signature) oluşturabileceği tek bir sabit desen (pattern) bile kalmaz.CFG Flattening (Kontrol Akış Grafiği Düzleştirme) mekanizması özel bir parantezi hak ediyor: State (durum) etiketleri, __COUNTER__ üzerinden türetilen ve fonksiyona özel olan bir seed kullanılarak "keyed FNV-1a" ile hashlenir. Bu anahtarı (key) bilmeden, şifrelenmiş state değerlerini orijinal etiketlerine geri döndürmeniz imkansızdır. Asla çalışmayacak olan (false predicate) koşullar altına enjekte edilen ölü kod blokları (dead code sleds), oluşturulan state-machine'e (durum makinesine) inanılmaz bir gürültü (noise) ve karmaşa katar.
Anti-debug modülü, donanımsal (hardware) breakpoint'leri tespit etmek için pool bellek alanında çalıştırılabilir (executable) bir stub (mov rax, dr7; ret) allocate eder ve bunu çağırır. Bu yöntem sayesinde, analistlerin kolayca hook atabildiği klasik NtGetContextThread pattern'lerinden kaçınmış oluruz. RDTSC timing (zamanlama) kontrolü, 4 volatile (geçici) işlemden oluşan sıkı bir baseline (temel çizgi) kullanır ve 5000 tick'in üzerindeki her şeyi flagler. Debugger'da atılan her bir adım 10.000'den fazla tick'e mal olacağı için, kodun adımlanarak incelenmesi (single-stepping) işlemi anında yakalanır.
Dinamik Import gizleme sistemi, PsLoadedModuleList üzerinde gezinir ve importları hash üzerinden çözer. Çoğu benzer projenin atladığı "forwarded export"ların (yönlendirilmiş fonksiyonların) recursive olarak çözülmesi de buna dahildir, import ettiğiniz fonksiyonlar asla IAT (Import Address Table) tablosuna dokunmaz ve çağırdığınız fonksiyonların isimleri binary içinde hiçbir yerde gözükmez.
Teknik Detaylar
- C++20 Güncel modülüyle beraber artık şart. (27.04.2026)
- Header-only (Yalnızca Başlık) – Projenize dahil etmek için sadece #include "kernelcloak.h" yapmanız yeterlidir; kütüphane derleme (linkleme) zahmeti çıkarmaz.
- Sıfır Harici Bağımlılık – WDK (Windows Driver Kit) header'ları ve compiler intrinsic'leri (derleyiciye yerleşik fonksiyonlar) dışında hiçbir şeye ihtiyaç duymaz.
- Sıfır CRT (C Runtime) Bağımlılığı – Kernel ortamında sorun çıkaran atexit, statik destructor'lar (yıkıcılar) veya STL yapılarını kesinlikle kullanmaz.
- IRQL-Safe (IRQL Güvenli) – Her fonksiyon, çalışabileceği maksimum güvenli IRQL seviyesini belgelerinde belirtir.
- MSVC Optimizasyonu – Donanım ve işlemci düzeyinde tam kontrol için _ReadWriteBarrier(), __rdtsc(), __cpuid(), __readmsr() ve Interlocked* intrinsic'lerini kullanacak şekilde optimize edilmiştir.
- Her Derlemede Benzersiz Çıktı – __TIME__ üzerinden seed alan derleme zamanı (compile-time) PRNG'si sayesinde, kodda hiçbir değişiklik yapmasanız bile her yeni "Build" işlemi tamamen farklı bir binary çıktı üretir.
- Graceful Degradation (Kademeli Düşüş) – Herhangi bir hata durumunda sistemin çökmesini engellemek için tüm özellikler güvenli bir şekilde (fail-safe) devreden çıkacak şekilde tasarlanmıştır.
Bu proje bana ait değildir orjinal sahibi (inaktif)
DW:
Linkleri görebilmek için kayıt olmanız gerekmektedir
Linkleri görebilmek için kayıt olmanız gerekmektedir
Cheatglobal keşfetimde bir şey belirdi john..
Son düzenleme: