[!CAUTION]
此仓库已停止维护,请访问 https://github.com/sadreck/Codecepticon 获取最新版本。
Codecepticon 是一个 .NET 应用程序,可对 C#、VBA/VB6(宏)和 PowerShell 源代码进行混淆,专为红队/紫队等进攻性安全演练而开发。与其他混淆器不同,Codecepticon 的目标是源代码而非编译后的可执行文件,并且专为绕过 AV/EDR 而设计。
Codecepticon 不仅支持代码混淆和改写,还提供如重写命令行等功能。
! 开始之前 !
本文档仅介绍 Codecepticon 的安装与使用方法。不提供关于 Rubeus、SharpHound 等工具的编译、使用或支持。请分别参阅各项目的仓库以获取更多信息。
Codecepticon 主要在 VS2022 上开发和测试,但理论上也适用于 VS2019。任何针对 VS2019 及更低版本的工单/问题,除非能在 VS2022 中复现,否则不予调查。因此请使用最新最好的 VS2022。
以下包必须使用 v3.9.0,因为更新版本存在以下尚未关闭的问题:https://github.com/dotnet/roslyn/issues/58463
Codecepticon 会在运行时检查这些包的版本,如果版本不是 v3.9.0 则会提示。
无论如何强调都不过分:始终先在本地测试混淆后的代码。


打开 Codecepticon,等待所有 NuGet 包下载完毕,然后生成解决方案。
使用 Codecepticon 有两种方式:要么在命令行中指定所有参数,要么传递单个 XML 配置文件。由于支持的高度自定义化,不建议手动查看 --help 输出来尝试弄清要使用哪些参数以及如何使用。请使用 CommandLineGenerator.html 快速生成命令:

命令生成器的输出格式可以是 Console 或 XML,取决于你的偏好。控制台命令可如下执行:
Codecepticon.exe --action obfuscate --module csharp --verbose ...etc
而使用 XML 配置文件时,则如下:
Codecepticon.exe --config C:\Your\Path\To\The\File.xml
如果你想深入了解 Codecepticon 的功能,请查看此文档。
有关可用的提示,请查看此文档。
混淆 C# 项目很简单,只需选择要针对的解决方案。注意,不会备份解决方案本身,当前解决方案将被混淆。在尝试对目标项目运行 Codecepticon 之前,请确保你可以独立编译该项目。
VBA 混淆针对的是源代码本身,而非 Microsoft Office 文档。这意味着你不能将 doc(x) 或 xls(x) 文件传递给 Codecepticon。必须是模块本身的源代码(按 Alt-F11 并从那里复制代码)。
由于 PowerShell 脚本的复杂性以及编写脚本的自由度,要覆盖所有边缘情况并确保混淆结果完全可用颇具挑战。虽然 Codecepticon 对简单脚本/功能预计可以正常运行,但对像 PowerView 这样的复杂脚本则无效——这仍在完善中。
在混淆应用程序或脚本之后,命令行参数很可能也被重命名了。解决方案是使用 HTML 映射文件来查找新名称。例如,将以下命令行进行转换:
SharpHound.exe --CollectionMethods DCOnly --OutputDirectory C:\temp\
通过在 HTML 映射文件中搜索每个参数,我们得到:



将所有字符串替换后,结果如下:
ObfuscatedSharpHound.exe --AphylesPiansAsp TurthsTance --AnineWondon C:\temp\
然而,某些值可能存在于多个类别中:

因此,始终在本地环境中测试结果至关重要。
也可以使用 Codecepticon 对可执行文件(你的编译输出)进行数字签名。Codecepticon 既可以为你生成签名证书,也可以使用该证书(或你提供的任何其他证书)对目标文件进行签名。
编译输出包含大量依赖 DLL,由于许可要求,未经书面同意我们无法重新分发。
不,Codecepticon 应该适用于所有项目。配置文件只是一些额外的调整,用于使目标项目更可靠、更易于使用。
但由于所有代码都是独特的,有时混淆项目会遇到一些错误,导致无法编译或执行。此时可能需要新的配置文件——如果是这种情况,请提交新问题。
同样的原则也适用于 PowerShell/VBA 代码——尽管目前 Codecepticon 不附带这些语言的配置文件,但如果需要,添加起来并不困难。
如需报告错误或建议新功能,请创建问题。
如需提交拉取请求,请参阅贡献部分。
在运行 Codecepticon 之前,请确保你能编译目标项目的干净版本。通常出现此问题时,是由于目标解决方案缺少依赖项,而非 Codecepticon 的问题。但如果仍然无法编译:
我会尽力,但由于 PowerShell 脚本可能非常复杂,且 PSParser 不如 C# 的 Roslyn 先进,无法做出任何承诺。VBA/VB6 也是如此。
有时你可能会遇到以下错误:

仍在努力解决此问题,一个快速修复方法是卸载并重新安装 System.Collections.Immutable 包(通过 NuGet 包管理器)。
无论是拼写错误、错误还是新功能,Codecepticon 都非常欢迎贡献,前提是我们同意以下几点: