
.NET/PowerShell/VBA Obfuscateur de sécurité offensive
[!CAUTION] Ce dépôt n'est plus maintenu, visitez https://github.com/sadreck/Codecepticon pour la dernière version.
Codecepticon est une application .NET qui vous permet d'offusquer du code source C#, VBA/VB6 (macros) et PowerShell, et est développée pour des engagements de sécurité offensive comme les équipes rouges/pourpres. Ce qui distingue Codecepticon des autres offuscateurs est qu'il cible le code source plutôt que les exécutables compilés, et a été développé spécifiquement pour l'évasion AV/EDR.
Codecepticon vous permet d'offusquer et de réécrire du code, mais offre également des fonctionnalités comme la réécriture de la ligne de commande.
! Avant de commencer !
Cette documentation concerne uniquement l'installation et l'utilisation de Codecepticon. La compilation, l'utilisation et le support d'outils comme Rubeus et SharpHound ne seront pas fournis. Référez-vous au dépôt de chaque projet séparément pour plus d'informations.
Codecepticon est activement développé/testé dans VS2022, mais il devrait fonctionner aussi dans VS2019. Tout ticket/problème créé pour VS2019 et inférieur ne sera pas examiné à moins que le problème ne soit reproductible dans VS2022. Veuillez donc utiliser la dernière et meilleure version de VS2022.
Les paquets suivants DOIVENT être en v3.9.0, car les versions plus récentes ont le problème suivant qui est toujours ouvert : https://github.com/dotnet/roslyn/issues/58463
Codecepticon vérifie la version de ces paquets au moment de l'exécution et vous informera si la version est différente de v3.9.0.
Cela ne peut pas être assez souligné : testez toujours votre code offusqué localement d'abord.


Ouvrez Codecepticon, attendez que tous les paquets NuGet soient téléchargés, puis construisez la solution.
Il y a deux façons d'utiliser Codecepticon : soit en mettant tous les arguments dans la ligne de commande, soit en passant un seul fichier de configuration XML. En raison du haut niveau de personnalisations supportées, il n'est pas recommandé de parcourir manuellement la sortie de --help pour essayer de comprendre quels paramètres utiliser et comment. Utilisez CommandLineGenerator.html et générez votre commande rapidement :

Le format de sortie du générateur de commandes peut être soit Console soit XML, selon ce que vous préférez. Les commandes console peuvent être exécutées comme suit :
Codecepticon.exe --action obfuscate --module csharp --verbose ...etc
Tandis qu'avec un fichier de configuration XML, comme ceci :
Codecepticon.exe --config C:\Your\Path\To\The\File.xml
Si vous voulez plonger en profondeur dans les fonctionnalités de Codecepticon, consultez ce document.
Pour des conseils que vous pouvez utiliser, consultez ce document.
L'offuscation d'un projet C# est simple, sélectionnez simplement la solution que vous souhaitez cibler. Notez qu'aucune sauvegarde de la solution elle-même ne sera effectuée, et que la solution actuelle sera celle qui sera offusquée. Assurez-vous de pouvoir compiler indépendamment le projet cible avant d'essayer d'exécuter Codecepticon contre lui.
L'offuscation VBA fonctionne sur le code source lui-même plutôt que sur un document Microsoft Office. Cela signifie que vous ne pouvez pas passer un fichier doc(x) ou xls(x) à Codecepticon. Il faudra utiliser le code source du module lui-même (appuyez sur Alt-F11 et copiez le code à partir de là).
En raison de la complexité des scripts PowerShell, ainsi que de la liberté qu'il offre dans la façon d'écrire les scripts, il est difficile de couvrir tous les cas limites et de garantir que le résultat offusqué sera entièrement fonctionnel. Bien qu'il soit attendu que Codecepticon fonctionne correctement avec des scripts/fonctionnalités simples, l'exécuter contre des scripts complexes comme PowerView ne fonctionnera pas - c'est un travail en cours.
Après avoir offusqué une application ou un script, il est très probable que les arguments de ligne de commande aient également été renommés. La solution consiste à utiliser le fichier de mappage HTML pour trouver les nouveaux noms. Par exemple, convertissons la ligne de commande suivante :
SharpHound.exe --CollectionMethods DCOnly --OutputDirectory C:\temp\
En recherchant dans le fichier de mappage HTML chaque argument, nous obtenons :



Et en remplaçant toutes les chaînes, le résultat est :
ObfuscatedSharpHound.exe --AphylesPiansAsp TurthsTance --AnineWondon C:\temp\
Cependant, certaines valeurs peuvent exister dans plus d'une catégorie :

Par conséquent, il est critique de toujours tester votre résultat dans un environnement local d'abord.
Il est également possible d'utiliser Codecepticon pour signer numériquement des fichiers exécutables (votre sortie compilée). Codecepticon peut à la fois générer un certificat de signature pour vous, et aussi l'utiliser (ou tout autre que vous pouvez fournir) pour signer votre fichier cible.
La sortie compilée comprend beaucoup de DLL de dépendances, que nous ne pouvons pas redistribuer sans consentement écrit en raison des exigences de licence.
Non, Codecepticon devrait fonctionner avec tout. Les profils ne sont que quelques ajustements supplémentaires qui sont apportés au projet cible pour le rendre plus fiable et plus facile à utiliser.
Mais comme tout code est unique, il y aura des cas où l'offuscation d'un projet se heurtera à une ou deux erreurs qui ne permettront pas de le compiler ou de l'exécuter. Dans ce cas, un nouveau profil peut être nécessaire - veuillez ouvrir un nouveau problème si c'est le cas.
Le même principe s'applique au code PowerShell/VBA - bien que ceux-ci n'aient actuellement aucun profil fourni avec Codecepticon, c'est une tâche facile à ajouter si nécessaire.
Pour signaler des bugs et suggérer de nouvelles fonctionnalités, veuillez créer un problème.
Pour soumettre des pull requests, veuillez consulter la section Contributions.
Avant d'exécuter Codecepticon, assurez-vous de pouvoir compiler une version propre du projet cible. Très souvent, lorsque ce problème apparaît, il est dû à des dépendances manquantes pour la solution cible plutôt qu'à Codecepticon. Mais si ça ne compile toujours pas :
Je ferai de mon mieux, mais comme les scripts PowerShell peuvent être TRÈS complexes et que le PSParser n'est pas aussi avancé que Roslyn pour C#, aucune promesse ne peut être faite. Même chose pour VBA/VB6.
Vous pouvez rencontrer à un moment donné l'erreur suivante :

J'essaie toujours de comprendre celle-ci, une solution rapide est de désinstaller et réinstaller le paquet System.Collections.Immutable depuis le gestionnaire de paquets NuGet.
Que ce soit une faute de frappe, un bug ou une nouvelle fonctionnalité, Codecepticon est très ouvert aux contributions tant que nous sommes d'accord sur les points suivants :