
Obfusk8: bibliothèque d'obfuscation légère basée sur C++17 / Header Only pour binaires windows
Obfusk8 est une bibliothèque légère, uniquement en-tête, conçue pour le C++17, destinée à renforcer considérablement l'obfuscation de vos applications, rendant la rétro-ingénierie nettement plus ardue. Elle y parvient grâce à un ensemble varié de techniques à la compilation et à l'exécution visant à protéger la logique et les données de votre code.

main (macro _main)Le point d'entrée de votre application (main) est transformé en un moteur d'obfuscation complexe et multicouche :
main_body ne soit exécuté, une mini-MV (CPU simulé) exécute une séquence d'instructions « chiffrées ». Cela dissimule le véritable point d'entrée et les opérations initiales. L'état de la MV (registres, compteur de programme, clé de dispatch) est initialisé avec des valeurs aléatoires à l'exécution._main (à la fois dans le prologue et l'épilogue) sont transformées en machines à états complexes. Le flux de contrôle n'est pas direct mais déterminé par des variables d'état fortement « chiffrées ». Les clés de codage/décodage de ces variables d'état sont dynamiques, dérivées de l'état de la MV, des compteurs de boucle, de l'aléatoire à la compilation (comme __COUNTER__, __LINE__, __TIME__) et d'une graine opaque globale. Cela rend l'analyse statique du flux de contrôle exceptionnellement difficile.
obf_icff_ns_dcff et obf_icff_ns_epd) sont utilisés avec des logiques de transition d'état et de génération de clés différentes, compliquant encore l'analyse.OBF_BOGUS_FLOW_* macros) : De nombreux motifs de saut trompeurs et structures conditionnelles alambiquées sont injectés tout au long de _main. Ceux-ci utilisent des instructions goto combinées à des prédicats opaques (conditions qui s'évaluent toujours à vrai ou faux mais qui sont coûteuses en calcul ou difficiles à déterminer statiquement). Cela crée un labyrinthe de fausses pistes pour les désassembleurs et décompilateurs.
OBF_BOGUS_FLOW_LABYRINTH, OBF_BOGUS_FLOW_GRID, OBF_BOGUS_FLOW_SCRAMBLE, OBF_BOGUS_FLOW_WEAVER, OBF_BOGUS_FLOW_CASCADE et OBF_BOGUS_FLOW_CYCLONE pour générer des flux factices variés et complexes.Runtime, SEH) :
__except peuvent modifier l'état du programme, rendant difficile le suivi si le débogueur ignore les exceptions.Runtime contient des conditions qui, si elles sont remplies (en raison d'états MV spécifiques ou de temporisation), pourraient déclencher __debugbreak() ou lever des exceptions, conçues pour perturber les sessions de débogage.obf_vm_engine)Un composant central de la macro _main pour l'obfuscation :
r0, r1, r2), un compteur de programme (pc) et une dispatch_key. Il exécute des « instructions » personnalisées (gestionnaires).reg_dispatch_idx).get_mem_dispatch_table).mixed_dispatch_idx).
La dispatch_key est constamment mutée, rendant la séquence des gestionnaires exécutés hautement imprévisible.vm_handler_table) est elle-même mutée à l'exécution dans le prologue et l'épilogue de _main, obscurcissant davantage le comportement de la MV.OBFUSCATE_STRING de AES8.hpp)__FILE__, __LINE__) et de l'heure de compilation (__DATE__, __TIME__).AES8.hpp).STEALTH_API_OBFSTR / STEALTH_API_OBF de Resolve8.hpp)GetModuleHandle et GetProcAddress pour la résolution initiale si ceux-ci ne sont pas encore résolus par ce mécanisme.CT_HASH) des noms de DLL et d'API pour les recherches. Cela empêche l'apparition des noms en clair de DLL et d'API dans les données relatives aux importations ou dans les tables de chaînes du binaire lors de l'utilisation de ces macros.