
.NET/PowerShell/VBA Ofuscador de Seguridad Ofensiva
[!CAUTION] Este repositorio no tiene mantenimiento, visite https://github.com/sadreck/Codecepticon para la versión más reciente.
Codecepticon es una aplicación .NET que permite ofuscar código fuente de C#, VBA/VB6 (macros) y PowerShell, y está desarrollada para compromisos de seguridad ofensivos como Red/Purple Teams. Lo que distingue a Codecepticon de otros ofuscadores es que se enfoca en el código fuente en lugar de los ejecutables compilados, y fue desarrollado específicamente para evasión de AV/EDR.
Codecepticon permite ofuscar y reescribir código, pero también proporciona funcionalidades como la reescritura de la línea de comandos.
! Antes de comenzar !
Esta documentación trata únicamente sobre cómo instalar y usar Codecepticon. No se proporcionará compilación, uso ni soporte para herramientas como Rubeus y SharpHound. Consulte el repositorio de cada proyecto por separado para más información.
Codecepticon es desarrollado/probado activamente en VS2022, pero debería funcionar también en VS2019. Los tickets/issues creados para VS2019 y versiones anteriores no serán investigados a menos que el problema sea reproducible en VS2022. Por lo tanto, use la versión más reciente, VS2022.
Los siguientes paquetes DEBEN ser v3.9.0, ya que versiones más recientes tienen el siguiente problema que aún está abierto: https://github.com/dotnet/roslyn/issues/58463
Codecepticon verifica la versión de estos paquetes en tiempo de ejecución y le informará si la versión es diferente a v3.9.0.
No se puede enfatizar lo suficiente: pruebe siempre su código ofuscado localmente primero.


Abra Codecepticon, espere hasta que todos los paquetes NuGet se descarguen y luego compile la solución.
Hay dos formas de usar Codecepticon: poniendo todos los argumentos en la línea de comandos o pasando un único archivo de configuración XML. Debido al alto nivel de personalizaciones soportadas, no se recomienda revisar manualmente la salida de --help para intentar averiguar qué parámetros usar y cómo. Use CommandLineGenerator.html y genere su comando rápidamente:

El formato de salida del generador de comandos puede ser Console o XML, según lo que prefiera. Los comandos de consola se pueden ejecutar como:
Codecepticon.exe --action obfuscate --module csharp --verbose ...etc
Mientras que al usar un archivo de configuración XML, como:
Codecepticon.exe --config C:\Your\Path\To\The\File.xml
Si desea profundizar en la funcionalidad de Codecepticon, consulte este documento.
Para conocer consejos que puede usar, consulte este documento.
Ofuscar un proyecto C# es sencillo: simplemente seleccione la solución que desea apuntar. Tenga en cuenta que no se realizará una copia de seguridad de la solución en sí, y la actual será la que se ofuscará. Asegúrese de poder compilar el proyecto objetivo de forma independiente antes de intentar ejecutar Codecepticon contra él.
La ofuscación de VBA funciona sobre el código fuente en sí mismo, no sobre un documento de Microsoft Office. Esto significa que no puede pasar un archivo doc(x) o xls(x) a Codecepticon. Tendrá que ser el código fuente del propio módulo (presione Alt-F11 y copie el código desde allí).
Debido a la complejidad de los scripts de PowerShell, junto con la libertad que proporciona en cómo escribir scripts, es un desafío cubrir todos los casos límite y garantizar que el resultado ofuscado sea completamente funcional. Aunque se espera que Codecepticon funcione bien con scripts/funcionalidades simples, ejecutarlo contra scripts complejos como PowerView no funcionará; esto es un trabajo en progreso.
Después de ofuscar una aplicación o un script, es muy probable que los argumentos de línea de comandos también hayan sido renombrados. La solución es usar el archivo de mapeo HTML para encontrar los nuevos nombres. Por ejemplo, convierta la siguiente línea de comandos:
SharpHound.exe --CollectionMethods DCOnly --OutputDirectory C:\temp\
Buscando en el archivo de mapeo HTML cada argumento, obtenemos:



Y reemplazando todas las cadenas, el resultado es:
ObfuscatedSharpHound.exe --AphylesPiansAsp TurthsTance --AnineWondon C:\temp\
Sin embargo, algunos valores pueden existir en más de una categoría:

Por lo tanto, es crítico probar siempre su resultado en un entorno local primero.
También es posible usar Codecepticon para firmar digitalmente archivos ejecutables (su salida compilada). Codecepticon puede generar un certificado de firma para usted, y también usarlo (o cualquier otro que pueda proporcionar) para firmar su archivo objetivo.
La salida compilada incluye muchas DLL de dependencia que, debido a requisitos de licencia, no podemos redistribuir sin consentimiento por escrito.
No, Codecepticon debería funcionar con todo. Los perfiles son solo un conjunto de ajustes adicionales que se realizan en el proyecto objetivo para hacerlo más fiable y fácil de trabajar.
Pero como todo código es único, habrá casos donde ofuscar un proyecto termine con uno o dos errores que no permitan compilarlo o ejecutarlo. En ese caso, puede ser necesario un nuevo perfil; por favor, cree un nuevo issue si este es el caso.
El mismo principio se aplica al código PowerShell/VBA – aunque actualmente no tienen perfiles incluidos con Codecepticon, es una tarea sencilla agregarlos si se necesitan.
Para reportar errores y sugerir nuevas funcionalidades, por favor cree un issue.
Para enviar pull requests, consulte la sección de Contribuciones.
Antes de ejecutar Codecepticon asegúrese de poder compilar una versión limpia del proyecto objetivo. Muy a menudo cuando aparece este problema, se debe a dependencias faltantes de la solución objetivo más que a Codecepticon. Pero si aún así no compila:
Haré todo lo posible, pero como los scripts de PowerShell pueden ser MUY complejos y el PSParser no es tan avanzado como Roslyn para C#, no se pueden hacer promesas. Lo mismo aplica para VBA/VB6.
Puede que en algún momento encuentre el siguiente error:

Todavía estoy tratando de llegar al fondo de esto; una solución rápida es desinstalar y reinstalar el paquete System.Collections.Immutable desde el Administrador de Paquetes NuGet.
Ya sea un error tipográfico, un bug o una nueva funcionalidad, Codecepticon está muy abierto a contribuciones siempre que estemos de acuerdo en lo siguiente: