
Obfusque le code assembleur x86-64 par injection d'instructions, code parasite, obfuscation des constantes et déchiffrement à l'exécution afin d'entraver la rétro-ingénierie et l'anti-analyse.
Obfusqueur avancé de code assembleur x86-64.
L'obfusqueur de code assembleur est un outil puissant et polyvalent conçu pour renforcer la sécurité de votre code assembleur x86-64. Il protège vos projets contre la rétro-ingénierie et l'analyse en employant une large gamme de techniques d'obfuscation et de mesures anti-analyse.
Injection d'instructions : Injecte des séquences d'octets personnalisées avant chaque instruction assembleur afin de dérouter les désassembleurs.
Randomisation : Introduit de l'aléatoire dans la structure du code, le rendant moins prévisible.
Détection de débogueurs : Détecte la présence de débogueurs pendant l'exécution du code et emploie des mesures anti-débogage.
Techniques anti-analyse : Déroutent les outils d'analyse dynamique à l'aide de branchements conditionnels et de contrôles de temporisation.
Déchiffrement dynamique : Chiffre et déchiffre dynamiquement des sections de code à l'exécution, augmentant la complexité.
Décompression dynamique : Compresse et décompresse dynamiquement des sections de code, masquant la véritable nature du code.
Obfuscation des constantes : Obfusque les constantes et les valeurs de données en utilisant des techniques telles que le XOR et la manipulation de bits.
Renommage des variables : Renomme les variables et les registres, rendant le code moins lisible pour les humains.
Insertion de code parasite : Insère des partitions de code parasite pour obscurcir davantage la base de code.
Le cœur du processus d'obfuscation consiste à injecter des séquences d'octets personnalisées avant chaque instruction assembleur du fichier de code. Ces séquences d'octets stratégiquement conçues visent à dérouter aussi bien les désassembleurs que les analystes. Examinons ce processus en détail :
4005d2: 55 push rbp
En mémoire (hex) :
0x55
400665: eb 01 jmp 400668 <main+0x3>
400667: b0 55 mov al,0x55
400669: eb 01 jmp 40066c <main+0x7>
En mémoire (hex) :
0xEB, 0x01, 0xB0, 0x55
Voici le détail de la transformation :
L'instruction d'origine PUSH RBP s'assemble en 0x55. L'obfusqueur insère les octets 0xEB, 0x01, 0xB0 avant elle.
Le résultat est une séquence d'instructions qui, une fois désassemblée, peut sembler entièrement différente du code d'origine. Cela rend difficile pour la rétro-ingénierie de comprendre le véritable but du code.
Il introduit des éléments d'aléatoire dans le code. Cela implique des techniques telles que la permutation d'instructions, l'échange d'opérandes et la substitution d'opcodes.
Intègre des mécanismes pour détecter la présence de débogueurs pendant l'exécution du code. Dispose de vérifications à l'exécution pour identifier les artefacts liés aux débogueurs et déclencher des mesures anti-analyse.
Intègre plusieurs mesures anti-analyse, telles que des branchements conditionnels et des contrôles de temporisation. Par exemple, il peut insérer des sauts conditionnels et des boucles de délai pour ralentir le processus d'analyse.
Il utilise des techniques de déchiffrement dynamique. Il chiffre certaines sections de code et les déchiffre à l'exécution à l'aide d'une clé secrète. Ce processus de déchiffrement se produit dynamiquement pendant l'exécution du code.
Il compresse certaines sections de code et les décompresse à la volée lors de leur exécution.
Utilise des techniques telles que le XOR, la manipulation de bits et les opérations arithmétiques pour obfusquer les constantes. Cela garantit que les valeurs constantes ne sont pas facilement reconnaissables.
L'outil renomme les variables et les registres, rendant le code moins lisible. Le processus consiste à remplacer les noms de variables par des chaînes générées aléatoirement ou des identifiants numériques.
Pour obscurcir davantage le code, l'obfusqueur insère des partitions de code parasite à des emplacements stratégiques. Ce code parasite est constitué d'instructions sans rapport qui n'affectent pas la logique du programme mais servent à encombrer la base de code.
; Original Code
mov eax, 1
; After Junk Code Insertion
mov ebx, 2
sub ecx, ecx
add edx, edx
En mémoire (hex) :
0x89, 0xD8, 0x31, 0xC9, 0x01, 0xD2
Le code parasite inséré est conçu pour détourner l'attention et rendre le code plus alambiqué.
Intègre également une fonctionnalité de détection des faux en-têtes UPX. Il analyse le code à la recherche de signes d'altération des en-têtes UPX, garantissant l'intégrité de l'exécutable.
Avant transformation (code original) :
section .text
global _start
_start:
; Calculate the sum of the first 10 natural numbers
mov ecx, 10 ; Initialize loop counter
mov eax, 0 ; Initialize sum to 0
loop_start:
add eax, ecx ; Add current value of ECX to EAX (sum)
loop loop_start ; Decrement ECX and loop if not zero
; Exit program
mov eax, 1 ; SYS_exit
int 0x80 ; Invoke syscall
Représentation hexadécimale (code original) :
31 C9 xor ecx,ecx
B8 00 00 00 00 mov eax,0x0
EB 0E jmp 0x1c
01 C8 add eax,ecx
E2 FB loop 0x11
B8 01 00 00 00 mov eax,0x1
CD 80 int 0x80
Après transformation (code obfusqué) :
section .text
global _start
_start:
; Calculate the sum of the first 10 natural numbers
mov eax, 0x1
add eax, 0x2
add eax, 0x3
add eax, 0x4
add eax, 0x5
add eax, 0x6
add eax, 0x7
add eax, 0x8
add eax, 0x9
add eax, 0xa
; Exit program
mov eax, 0x1
int 0x80
Représentation hexadécimale (code obfusqué) :
B8 01 00 00 00 mov eax,0x1
83 C0 02 add eax,0x2
83 C0 03 add eax,0x3
83 C0 04 add eax,0x4
83 C0 05 add eax,0x5
83 C0 06 add eax,0x6
83 C0 07 add eax,0x7
83 C0 08 add eax,0x8
83 C0 09 add eax,0x9
83 C0 0A add eax,0xa
B8 01 00 00 00 mov eax,0x1
CD 80 int 0x80
Dans le code obfusqué, nous avons rendu la logique du programme d'origine moins apparente en ajoutant des instructions ADD redondantes et en utilisant des valeurs hexadécimales comme opérandes immédiates.
Ce projet est sous licence MIT. Consultez le fichier LICENSE pour plus de détails.
Les contributions sont les bienvenues !.
Pour les problèmes, les demandes de fonctionnalités ou toute question générale, veuillez créer une issue.
Cet outil est destiné à des fins éducatives et éthiques.