
.NET/PowerShell/VBA-Obfuskator für Offensive Security
Codecepticon ist eine .NET-Anwendung, mit der sich C#-, VBA/VB6- (Makros) und PowerShell-Quellcode verschleiern lässt, und wurde für Offensive-Security-Einsätze wie Red-/Purple-Teams entwickelt. Was Codecepticon von anderen Obfuskatoren unterscheidet, ist, dass es auf den Quellcode statt auf die kompilierten ausführbaren Dateien abzielt und speziell für AV/EDR-Evasion entwickelt wurde.
Codecepticon ermöglicht es, Code zu verschleiern und umzuschreiben, bietet aber auch Funktionen wie das Umschreiben der Kommandozeile.
! Bevor wir beginnen !
Diese Dokumentation behandelt ausschließlich die Installation und Verwendung von Codecepticon. Kompilierung, Verwendung und Support für Tools wie Rubeus und SharpHound werden nicht bereitgestellt. Weitere Informationen finden sich jeweils im Repository des entsprechenden Projekts.
Codecepticon wird aktiv in VS2022 entwickelt/getestet, sollte aber auch in VS2019 funktionieren. Alle Tickets/Issues, die für VS2019 und älter erstellt werden, werden nicht untersucht, es sei denn, das Problem ist in VS2022 reproduzierbar. Bitte verwendet daher das neueste und beste VS2022.
Die folgenden Pakete MÜSSEN v3.9.0 sein, da neuere Versionen das folgende Problem aufweisen, das noch offen ist: https://github.com/dotnet/roslyn/issues/58463
Codecepticon prüft die Version dieser Pakete zur Laufzeit und informiert euch, wenn die Version von v3.9.0 abweicht.
Es kann nicht oft genug betont werden: Testet euren verschleierten Code immer zuerst lokal.


Öffnet Codecepticon, wartet, bis alle NuGet-Pakete heruntergeladen sind, und erstellt dann die Solution. Ihr könnt auch ein vorkompiliertes Release herunterladen.
Es gibt zwei Möglichkeiten, Codecepticon zu verwenden: entweder alle Argumente in der Kommandozeile anzugeben oder eine einzelne XML-Konfigurationsdatei zu übergeben. Aufgrund der hohen Anzahl unterstützter Anpassungen wird nicht empfohlen, manuell die --help-Ausgabe durchzugehen, um herauszufinden, welche Parameter zu verwenden sind und wie. Verwendet CommandLineGenerator.html und erzeugt euren Befehl schnell:

Das Ausgabeformat des Befehlsgenerators kann entweder Console oder XML sein, je nachdem, was ihr bevorzugt. Konsolenbefehle können wie folgt ausgeführt werden:
Codecepticon.exe --action obfuscate --module csharp --verbose ...etc
Während bei Verwendung einer XML-Konfigurationsdatei, wie:
Codecepticon.exe --config C:\Your\Path\To\The\File.xml
Wenn Sie tiefer in die Funktionalität von Codecepticon eintauchen möchten, lesen Sie dieses Dokument.
Für Tipps, die Sie verwenden können, lesen Sie dieses Dokument.
Das Obfuskieren eines C#-Projekts ist einfach: Wählen Sie einfach die Solution aus, die Sie als Ziel festlegen möchten. Beachten Sie, dass keine Sicherungskopie der Solution selbst erstellt wird und die aktuelle diejenige ist, die obfuskiert wird. Stellen Sie sicher, dass Sie das Zielprojekt unabhängig kompilieren können, bevor Sie versuchen, Codecepticon darauf anzuwenden.
Die VBA-Obfuskierung wirkt auf den Quellcode selbst und nicht auf ein Microsoft-Office-Dokument. Das bedeutet, dass Sie keine doc(x)- oder xls(x)-Datei an Codecepticon übergeben können. Es muss sich um den Quellcode des Moduls selbst handeln (drücken Sie Alt-F11 und kopieren Sie den Code von dort).
Aufgrund der Komplexität von PowerShell-Skripten und der Freiheit, die es bei der Art und Weise bietet, Skripte zu schreiben, ist es schwierig, alle Randfälle abzudecken und sicherzustellen, dass das obfuskierte Ergebnis voll funktionsfähig ist. Obwohl zu erwarten ist, dass Codecepticon bei einfachen Skripten/Funktionalitäten gut funktioniert, wird es bei komplexen Skripten wie PowerView nicht funktionieren – dies ist eine laufende Arbeit.
Nach dem Obfuskieren einer Anwendung oder eines Skripts ist es sehr wahrscheinlich, dass auch die Kommandozeilenargumente umbenannt wurden. Die Lösung dafür besteht darin, die HTML-Mapping-Datei zu verwenden, um die neuen Namen zu finden. Lassen Sie uns zum Beispiel die folgende Kommandozeile umwandeln:
SharpHound.exe --CollectionMethods DCOnly --OutputDirectory C:\temp\
Durch die Suche im HTML-Mapping-File nach jedem Argument erhalten wir:



Und durch das Ersetzen aller Strings ist das Ergebnis:
ObfuscatedSharpHound.exe --AphylesPiansAsp TurthsTance --AnineWondon C:\temp\
Einige Werte können jedoch in mehr als einer Kategorie vorkommen:
