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 包下载完成,然后生成解决方案。你也可以下载预编译的 Release 版本。
使用 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 应当适用于所有情况。配置文件只是对目标项目进行的一些额外调整,目的是使其更可靠、更易于处理。
但由于所有代码都是独一无二的,在某些情况下,对项目进行混淆最终会导致一两个错误,使其无法编译或执行。在这种情况下,可能需要新建一个配置文件——如果遇到这种情况,请提交一个新的 issue。
同样的原则也适用于 PowerShell/VBA 代码——尽管这些目前没有随 Codecepticon 提供的配置文件,但如果需要,添加起来也很容易。
如需报告 bug 和建议新功能,请创建一个 issue。
如需提交 pull request,请参阅贡献部分。
在运行 Codecepticon 之前,请确保你能编译目标项目的干净版本。出现此问题时,通常是由于目标解决方案缺少依赖项,而不是 Codecepticon 的问题。但如果仍然无法编译:
我会尽力而为,但由于 PowerShell 脚本可能非常复杂,而且 PSParser 不如 C# 的 Roslyn 先进,因此无法做出任何承诺。VBA/VB6 也是如此。
你可能会在某个时候遇到以下错误:

目前仍在调查此问题,一个快速的解决方法是:从 NuGet 包管理器中卸载并重新安装 System.Collections.Immutable 包。
无论是拼写错误、bug 还是新功能,Codecepticon 都非常欢迎贡献,只要我们达成以下共识: