
.NET/PowerShell/VBA Obfuskator für offensive Sicherheit
[!CAUTION] Dieses Repository wird nicht mehr gewartet. Besuchen Sie https://github.com/sadreck/Codecepticon für die neueste Version.
Codecepticon ist eine .NET-Anwendung, mit der Sie C#-, VBA/VB6- (Makros) und PowerShell-Quellcode verschleiern können und die für offensive Sicherheitseinsätze wie Red/Purple Teams entwickelt wurde. Was Codecepticon von anderen Obfuscatoren unterscheidet, ist, dass es den Quellcode und nicht die kompilierten ausführbaren Dateien angreift und speziell für die Umgehung von AV/EDR entwickelt wurde.
Codecepticon ermöglicht es Ihnen, Code zu verschleiern und umzuschreiben, bietet aber auch Funktionen wie das Umschreiben der Befehlszeile.
! Bevor wir beginnen !
Diese Dokumentation beschreibt nur die Installation und Verwendung von Codecepticon. Kompilierung, Verwendung und Support für Tools wie Rubeus und SharpHound werden nicht bereitgestellt. Weitere Informationen finden Sie im jeweiligen Repository des Projekts.
Codecepticon wird aktiv in VS2022 entwickelt/getestet, sollte aber auch in VS2019 funktionieren. Tickets/Issues für VS2019 und älter werden nicht untersucht, es sei denn, das Problem ist in VS2022 reproduzierbar. Bitte verwenden Sie daher die neueste und beste VS2022.
Die folgenden Pakete MÜSSEN v3.9.0 sein, da neuere Versionen das folgende noch offene Problem aufweisen: https://github.com/dotnet/roslyn/issues/58463
Codecepticon überprüft die Version dieser Pakete zur Laufzeit und informiert Sie, wenn die Version von v3.9.0 abweicht.
Es kann nicht genug betont werden: Testen Sie Ihren verschleierten Code immer zuerst lokal.


Öffnen Sie Codecepticon, warten Sie, bis alle NuGet-Pakete heruntergeladen sind, und erstellen Sie dann die Projektmappe.
Es gibt zwei Möglichkeiten, Codecepticon zu verwenden: entweder durch Angabe aller Argumente in der Befehlszeile oder durch Übergabe einer einzelnen XML-Konfigurationsdatei. Aufgrund der hohen Anzahl unterstützter Anpassungen wird nicht empfohlen, die Ausgabe von --help manuell durchzugehen, um herauszufinden, welche Parameter verwendet werden sollen. Verwenden Sie CommandLineGenerator.html und generieren Sie Ihren Befehl schnell:

Das Ausgabeformat des Befehlsgenerators kann je nach Vorliebe entweder Console oder XML sein. Konsolenbefehle können wie folgt ausgeführt werden:
Codecepticon.exe --action obfuscate --module csharp --verbose ...etc
Bei Verwendung einer XML-Konfigurationsdatei wie folgt:
Codecepticon.exe --config C:\Ihr\Pfad\Zur\Datei.xml
Wenn Sie tiefer in die Funktionalität von Codecepticon eintauchen möchten, sehen Sie sich dieses Dokument an.
Tipps zur Verwendung finden Sie in diesem Dokument.
Das Verschleiern eines C#-Projekts ist einfach: Wählen Sie einfach die gewünschte Projektmappe aus. Beachten Sie, dass kein Backup der Projektmappe erstellt wird und die aktuelle verschleiert wird. Stellen Sie sicher, dass Sie das Zielprojekt vor dem Ausführen von Codecepticon unabhängig kompilieren können.
Die VBA-Verschleierung arbeitet mit dem Quellcode selbst, nicht mit einem Microsoft Office-Dokument. Das bedeutet, dass Sie keine doc(x)- oder xls(x)-Datei an Codecepticon übergeben können. Es muss der Quellcode des Moduls selbst sein (drücken Sie Alt-F11 und kopieren Sie den Code von dort).
Aufgrund der Komplexität von PowerShell-Skripten und der Freiheit, die sie beim Schreiben von Skripten bieten, ist es eine Herausforderung, alle Randfälle abzudecken und sicherzustellen, dass das verschleierte Ergebnis voll funktionsfähig ist. Obwohl erwartet wird, dass Codecepticon bei einfachen Skripten/Funktionen gut funktioniert, wird es bei komplexen wie PowerView nicht funktionieren – dies ist ein laufender Prozess.
Nach dem Verschleiern einer Anwendung oder eines Skripts ist es sehr wahrscheinlich, dass die Befehlszeilenargumente ebenfalls umbenannt wurden. Die Lösung besteht darin, die HTML-Mapping-Datei zu verwenden, um die neuen Namen zu finden. Konvertieren wir beispielsweise die folgende Befehlszeile:
SharpHound.exe --CollectionMethods DCOnly --OutputDirectory C:\temp\
Durch die Suche in der HTML-Mapping-Datei nach jedem Argument erhalten wir:



Und durch Ersetzen aller Zeichenfolgen ergibt sich:
ObfuscatedSharpHound.exe --AphylesPiansAsp TurthsTance --AnineWondon C:\temp\
Einige Werte können jedoch in mehr als einer Kategorie vorkommen:

Daher ist es entscheidend, Ihr Ergebnis immer zuerst in einer lokalen Umgebung zu testen.
Es ist auch möglich, Codecepticon zu verwenden, um ausführbare Dateien (Ihre kompilierte Ausgabe) digital zu signieren. Codecepticon kann sowohl ein Signaturzertifikat für Sie generieren als auch dieses (oder ein anderes von Ihnen bereitgestelltes) verwenden, um Ihre Zieldatei zu signieren.
Die kompilierte Ausgabe enthält viele abhängige DLLs, die wir aufgrund von Lizenzanforderungen ohne schriftliche Genehmigung nicht weiterverteilen können.
Nein, Codecepticon sollte mit allem funktionieren. Die Profile sind lediglich zusätzliche Anpassungen, die am Zielprojekt vorgenommen werden, um es zuverlässiger und einfacher handhabbar zu machen.
Da jedoch jeder Code einzigartig ist, kann es vorkommen, dass das Verschleiern eines Projekts zu einem oder zwei Fehlern führt, die das Kompilieren oder Ausführen verhindern. In diesem Fall ist möglicherweise ein neues Profil erforderlich – bitte erstellen Sie ein neues Issue, falls dies der Fall ist.
Das gleiche Prinzip gilt für PowerShell-/VBA-Code – obwohl diese derzeit keine Profile haben, die mit Codecepticon ausgeliefert werden, ist es eine einfache Aufgabe, welche hinzuzufügen, falls benötigt.
Zum Melden von Fehlern und Vorschlagen neuer Funktionen erstellen Sie bitte ein Issue.
Zum Einreichen von Pull-Requests lesen Sie bitte den Abschnitt Beiträge.
Stellen Sie vor dem Ausführen von Codecepticon sicher, dass Sie eine saubere Version des Zielprojekts kompilieren können. Sehr oft tritt dieses Problem aufgrund fehlender Abhängigkeiten der Zielprojektmappe und nicht wegen Codecepticon auf. Falls es dennoch nicht kompiliert:
Ich werde mein Bestes tun, aber da PowerShell-Skripte SEHR komplex sein können und der PSParser nicht so fortschrittlich ist wie Roslyn für C#, kann ich keine Versprechungen machen. Gleiches gilt für VBA/VB6.
Möglicherweise erhalten Sie irgendwann den folgenden Fehler:

Ich versuche immer noch, dem auf den Grund zu gehen. Eine schnelle Lösung ist das Deinstallieren und erneute Installieren des Pakets System.Collections.Immutable über den NuGet-Paket-Manager.
Ob es sich um einen Tippfehler, einen Fehler oder eine neue Funktion handelt, Codecepticon ist offen für Beiträge, solange wir uns auf Folgendes einigen: