Skip to content
KitploitKITPLOIT
OutilsExploitsBlog
Log in
Soumettre
OutilsExploitsBlog
Soumettre

Outils de Hacking, PenTest et Cybersécurité pour votre Arsenal de Sécurité !

Kitploit est un répertoire d'outils de hacking, de cybersécurité et de pentesting. Découvrez les dernières mises à jour des projets pour trouver des vulnérabilités, analyser des systèmes, automatiser les tests et renforcer votre sécurité.

··Flux·Contact·Confidentialité·© 2026 Kitploit

Répertoire d'outils

Catégories

Voir toutes les catégories
Loading categories
UnConfuserEx — Un désobfuscateur ConfuserEx2 prenant en charge l'anti-tamper, le compresseur, les constantes, le flux de contrôle et la récupération de ressources. | Kitploit
Outils/GitHubGitHub/zypherion-technologies/unconfuserex
Analyse StatiqueAnalyse Dynamique (Sandboxing)Analyse de CodeRétro-ingénierieAnalyse ForensiqueAnalyse de MalwareAnalyse de BinairesArticles et RechercheApprentissage et Éducation
GitHubzypherion-technologies/unconfuserex

UnConfuserEx

Un désobfuscateur ConfuserEx2 prenant en charge l'anti-tamper, le compresseur, les constantes, le flux de contrôle et la récupération de ressources.

Voir le dépôt
40421il y a 2 moisVérifié par Kitploit

Populaires

Voir tout →

Découvrez les outils les plus utilisés par notre communauté.

Explorer tous les outils

Parcourez notre collection d'outils

Voir tous les outils →
Partager

UnConfuserEx

.NET target Website Discord Telegram X

Fork amélioré d'UnconfuserEx avec une prise en charge améliorée des variantes modernes de ConfuserEx2, récupération anti‑altération, suppression du compresseur, restauration du flux de contrôle et reconstruction des ressources.

https://github.com/user-attachments/assets/de2c7fd9-6736-4f39-83c0-3c25aa9c1f24


Si tu as déjà joué avec des échantillons de malwares, certains sont obfusqués avec ConfuserEx, et j'ai testé quelques déobfusqueurs publics contre la dernière version mais ça ne fonctionnait pas, alors j'ai décidé de forker un déobfusqueur public qui fonctionnait contre cette dernière version et de le modifier selon mes besoins.

Ce dépôt est un fork de MadMin3r/UnconfuserEx. Le crédit lui revient également. Le projet original a fait le travail difficile en créant un déobfusqueur ConfuserEx2 ciblé capable de réellement supprimer les protections.

C'est ce que fait ce projet. Il exécute une liste de suppresseurs dans un ordre fixe, réécrit les corps de méthodes/ressources/métadonnées là où c'est possible, et écrit un nouvel assembly en sortie. La partie importante est l'ordre. Le compresseur et l'anti‑altération doivent intervenir tôt car le reste du module pourrait ne pas être encore du vrai IL.


La version amont était déjà utile, mais quelques cas continuaient de se présenter.

L'un d'eux est le chemin LZMA. Certains échantillons fournissent des octets qui ressemblent à la charge utile des constantes/ressources, mais les propriétés LZMA sont absurdes. Si tu passes cela directement dans le décodeur, tu obtiens des tailles de dictionnaire stupides et finalement des exceptions comme des dimensions de tableau dépassant la plage prise en charge. Cette version vérifie donc les propriétés, plafonne la taille du dictionnaire, plafonne la taille décompressée, et abandonne avant que le décodeur n'alloue quelque chose de ridicule.

LZMA properties => CE FD 62 5F 9F
Invalid LZMA properties byte 0xCE or unreasonable dictionary size

Les constantes avaient un autre problème bête mais réel. Une grande partie du code de résolution veut que l'ID situé avant l'appel au getter soit un ldc.i4. Parfois ce n'est plus une seule instruction. C'est une petite expression arithmétique.

ldc.i4     0x1234
ldc.i4     0x55
xor
call       string <const getter>(int32)

Le fork original voit xor, appelle GetLdcI4Value(), et meurt parce que xor n'est évidemment pas un chargement d'entier. Cette version remonte la petite séquence arithmétique, émule la pile, la réduit à un seul ldc.i4, puis laisse le résolveur normal continuer.

Ainsi, au lieu de traiter cela comme une protection de constantes totalement différente, cela devient :

ldc.i4     0x1261
call       string <const getter>(int32)

Ensuite, le chemin normal du résolveur de constantes (normal/x86) peut faire son travail.


Le flux de contrôle, c'était moyen

Le suppresseur de switch peut gérer la forme normale du répartiteur de switch de ConfuserEx. Il parcourt les blocs, récupère la cible suivante, supprime les blocs morts et émet un corps de méthode sain. Mais il existe des échantillons où seule une partie de la méthode est comprise. Si tu modifies la moitié d'une méthode et découvres ensuite qu'elle est toujours obfusquée, la sortie est pire qu'inutile car tu as maintenant un IL cassé et aucun moyen propre de comprendre ce qui s'est passé.

Cette version fait donc un instantané du corps de la méthode avant de le toucher :

instructions
gestionnaires d'exceptions

Si la déobfuscation échoue, ou si la méthode semble encore obfusquée après, le corps original est restauré. Le log peut toujours dire « cette méthode n'a pas été résolue », mais l'assembly n'est pas silencieusement corrompu simplement parce qu'une méthode avait un répartiteur étrange.

Le flux de contrôle par sauts/trampolines a également reçu sa propre passe. Certaines méthodes ne sont pas des répartiteurs de switch. Ce sont de petits trampolines de branche enchaînés jusqu'à atteindre le bloc réel. Ceux‑ci sont maintenant détectés et repliés au lieu d'être ignorés par le seul chemin de switch.


Le suppresseur de compresseur est la partie qui doit s'exécuter avant tout le monde.

Les stubs de compresseur ConfuserEx conservent généralement l'assembly réel compressé, lancent un petit chargeur, décompressent la charge utile et la chargent à l'exécution.

Le suppresseur trouve la forme du chargeur, extrait la charge utile compressée intégrée, la décompresse et remplace le module par l'assembly réel. Les deux formats de compresseur (normal et compact) sont pris en charge.

[+] Compressor detected
[+] Extracted compressed module payload
[+] Decompressed real module
[+] Continuing pipeline on unpacked assembly

L'anti‑altération dispose maintenant de deux chemins.

L'anti‑altération normal/dynamique déchiffre les corps de méthodes à partir des sections protégées et réécrit les corps restaurés dans le module. L'anti‑altération JIT est plus ennuyeuse car les corps sont censés être matérialisés lorsque le runtime les demande.

La forme générale est :

find init
extract keys
find encrypted JIT body section
derive per method key
read body
write CilBody back

C'est toujours basé sur des motifs. Si le stub a suffisamment changé, cela manquera évidemment.


Les ressources sont traitées de manière similaire aux constantes : trouver le blob de ressources chiffré, récupérer la clé/la forme du déchiffreur, déchiffrer, décompresser si nécessaire, puis remettre les ressources là où les outils .NET normaux les attendent.

Il existe également un chemin optionnel de reconstruction d'un PE intégré. Certains échantillons protégés transportent un PE managé à l'intérieur d'une ressource. Avec la reconstruction activée, le suppresseur tente d'analyser et de réécrire cette charge utile aussi, au lieu de laisser un assembly externe déobfusqué avec un assembly interne intact.

UnConfuserEx.exe sample.exe sample.clean.exe --rebuild-embedded-pe

Utilise cela quand tu sais que l'échantillon cache un autre assembly managé dans les ressources. Si la charge utile n'est pas un PE managé, le chemin de reconstruction devrait la laisser tranquille.


Utilisation

Construis‑le :

dotnet build .\UnConfuserEx.sln -c Release

Exécute‑le :

.\UnConfuserEx\bin\Release\net9.0\UnConfuserEx.exe .\protected.exe

Ou donne un chemin de sortie explicite :

.\UnConfuserEx\bin\Release\net9.0\UnConfuserEx.exe .\protected.exe .\protected.clean.exe

Si tu ne donnes pas de chemin de sortie, il en écrit un à côté de l'entrée avec -deobfuscated ajouté au nom.

Pour les charges utiles managées intégrées :

.\UnConfuserEx\bin\Release\net9.0\UnConfuserEx.exe .\protected.exe .\protected.clean.exe --rebuild-embedded-pe

Protections

Voici la liste de prise en charge actuelle. Cela ne signifie pas que tous les forks possibles de ConfuserEx fonctionnent. Cela signifie que ce sont les formes que le pipeline sait rechercher.

Télécharger l’outil