
Obfusk8: leichtgewichtige Obfuskationsbibliothek basierend auf C++17 / Nur-Header für Windows-Binärdateien
Obfusk8 ist eine leichtgewichtige, header-only C++17 Bibliothek, die entwickelt wurde, um die Obfuskation Ihrer Anwendungen erheblich zu verbessern und Reverse Engineering zu einer deutlich anspruchsvolleren Aufgabe zu machen. Dies wird durch eine vielfältige Reihe von Compilezeit- und Laufzeittechniken erreicht, die darauf abzielen, die Logik und Daten Ihres Codes zu schützen.

main-Funktionsumhüllung (_main-Makro)Der Einstiegspunkt Ihrer Anwendung (main) wird in eine komplexe, mehrschichtige Obfuskations-Engine transformiert:
main_body-Code ausgeführt wird, führt eine Mini-VM (simulierte CPU) eine Sequenz von „verschlüsselten" Instruktionen aus. Dies verbirgt den wahren Einstiegspunkt und die anfänglichen Operationen. Der Zustand der VM (Register, Programmzähler, Dispatch-Schlüssel) wird mit Laufzeit-zufällig initialisierten Werten belegt._main-Makros (sowohl im Prolog als auch im Epilog) werden in komplizierte Zustandsautomaten umgewandelt. Der Kontrollfluss ist nicht direkt, sondern wird durch stark „verschlüsselte" Zustandsvariablen bestimmt. Die Kodierungs-/Dekodierungsschlüssel für diese Zustandsvariablen sind dynamisch und werden aus VM-Zustand, Schleifenzählern, Compilezeit-Zufallswerten (wie __COUNTER__, __LINE__, __TIME__) und einem globalen opaken Seed abgeleitet. Dies macht die statische Analyse des Kontrollflusses außergewöhnlich schwierig.
obf_icff_ns_dcff und obf_icff_ns_epd) mit unterschiedlicher Zustandsübergangslogik und Schlüsselerzeugung verwendet, was die Analyse weiter erschwert.OBF_BOGUS_FLOW_*-Makros): Zahlreiche irreführende Sprungmuster und verworrene bedingte Strukturen werden in _main eingefügt. Diese verwenden goto-Anweisungen in Kombination mit opaken Prädikaten (Bedingungen, die immer zu true oder false ausgewertet werden, aber rechnerisch aufwändig oder schwer statisch zu bestimmen sind). Dies erzeugt ein Labyrinth von falschen Pfaden für Disassembler und Decompiler.
OBF_BOGUS_FLOW_LABYRINTH, OBF_BOGUS_FLOW_GRID, OBF_BOGUS_FLOW_SCRAMBLE, OBF_BOGUS_FLOW_WEAVER, OBF_BOGUS_FLOW_CASCADE und OBF_BOGUS_FLOW_CYCLONE, um vielfältige und komplexe blinde Abläufe zu erzeugen.Runtime-Makro, SEH):
__except-Blöcke können den Programmzustand ändern, was es schwierig macht, dem Debugger zu folgen, wenn dieser Ausnahmen überspringt.Runtime-Makro enthält Bedingungen, die, falls sie erfüllt sind (aufgrund bestimmter VM-Zustände oder Timing), __debugbreak() auslösen oder Ausnahmen werfen können, was darauf ausgelegt ist, Debugging-Sitzungen zu stören.obf_vm_engine)Eine Kernkomponente der Obfuskation des _main-Makros:
r0, r1, r2), einem Programmzähler (pc) und einem dispatch_key. Sie führt benutzerdefinierte „Instruktionen" (Handler) aus.reg_dispatch_idx).get_mem_dispatch_table).mixed_dispatch_idx).
Der dispatch_key wird ständig mutiert, wodurch die Sequenz der ausgeführten Handler hochgradig unvorhersehbar ist.vm_handler_table) wird selbst zur Laufzeit innerhalb des _main-Prologs und -Epilogs mutiert, was das Verhalten der VM weiter verschleiert.OBFUSCATE_STRING aus AES8.hpp)__FILE__, __LINE__) und Build-Zeit (__DATE__, __TIME__) abgeleitet.AES8.hpp).STEALTH_API_OBFSTR / STEALTH_API_OBF aus Resolve8.hpp)GetModuleHandle- und GetProcAddress-Auflösung für die anfängliche Resolution, falls diese selbst nicht bereits durch diesen Mechanismus aufgelöst wurden.CT_HASH) von DLL- und API-Namen für Lookups. Dies verhindert, dass Klartext-DLL- und API-Namen in den importbezogenen Daten oder Zeichenkettentabellen der Binärdatei erscheinen, wenn diese Makros verwendet werden.