Ditto 是一款基于 tree-sitter-powershell 和 tree-sitter-javascript 的 PowerShell 和 JavaScript 混淆器。
ditto-cli [选项]
| 短选项 | 长选项 | 描述 |
|---|---|---|
| -h | --help | 显示帮助信息并退出。 |
| -v | --version | 显示版本信息并退出。 |
| -p | --path | 要处理的脚本文件路径。 |
| -i | --impostor | 用于混淆的 Impostor 配置文件(不区分大小写)。 |
| -L | --list | 列出所有可用的 Impostor 配置文件。 |
| -t | --time | 显示混淆过程所花费的计算时间。 |
| -d | --debug-level | 调试级别。选项:off、error、warn、info、debug、trace(默认:info)。 |
| -q | --quiet | 仅输出最终混淆后的脚本,抑制所有其他日志。 |
每种语言都配备了独特的、以宝可梦为主题的 Impostor。Impostor 是一种命名配方,将多个混淆通道串联在一起。每个 Impostor 侧重不同的技术组合,因此同一脚本经两个不同 Impostor 混淆后的结果截然不同。请选择在隐蔽性、体积、可读性、逆向难度等方面最符合您需求的 Impostor。
| Impostor | 功能说明 |
|---|---|
| Pikachu | 全能型代表。将字面量转换为静态字符串,将 cmdlet 和类型成员重写为字符串,对字符串进行 Base64 编码,使用内联取模/十六进制化拆分整数,并随机重命名变量。均衡的默认选择。 |
| Bulbasaur | 入门级新手选择。字符串/cmdlet/成员重写、Base64 编码、随机变量名,以及通过反向取模技巧重建整数。轻量且可读性尚可。 |
| Ivysaur | Bulbasaur 的进化形态。基础配方相同,但变量以 PowerShell 动词命名(${Set-...}、${Add-...}、${Remove-...})以融入合法代码,并加入内联十六进制化和取模反转整数。 |
| Charizard | 重量级选手。静态字符串、Base64、随机内联取模/十六进制化、成员转字符串、取模反转整数,以及随机变量名和类型叠加,实现激进混淆。 |
| Alakazam | 数学大脑。将每个布尔值和整数预计算为算术表达式,拆分调用表达式,并将 cmdlet、成员和类型转换为字符串。生成密集、表达式丰富的输出。 |
| Onix | 数组专家。将令牌存储在常量数组中,进行洗牌,通过 foreach 进行十六进制化,并通过运行时求值的 XOR/加法算术重建每个整数。 |
| Eevee | 重命名专家。随机重命名所有函数、参数和变量,将 cmdlet/成员重写为字符串,并分配 UUID 风格和动词风格的名称并带有通配符掩码。专注于标识符混淆。 |
| Ditto | 模仿者——一种元 Impostor。它不是转换整个文件,而是扫描源代码中的 # ditto(<engine>) 注释,并将指定的引擎仅应用于紧随注释之后的语句。这使您可以在单个脚本中混合使用多种 Impostor。请参阅 使用 Ditto 进行选择性混淆。 |
| Impostor | 功能说明 |
|---|---|
| Tinkatuff | 全面均衡的默认选择。将成员访问重写为下标形式,偶尔将表达式转换为 switch/if-else,将数字转换为数学表达式,并对字符串和标识符进行编码/拆分/转义。覆盖范围与体积之间取得良好平衡。 |
| Unown | 符号密码。使用 JSFuck 风格的技巧对数字、字符串、布尔值、特殊值和默认对象进行编码,并仅使用 $ 和 _ 重命名标识符。输出几乎不可读。 |
| Metagross | “等等,全是数字?” 将字符串转换为 fromCharCode,将每个数字重写为表达式,并将所有标识符重命名为类似数字的名称。输出几乎全是数字。 |
| Wailord | 鲸鱼。产生巨大的输出(平均膨胀率约 4643 倍)。仅适用于小型脚本——它叠加了气泡命名标识符、字符串拆分、JSFuck 数字和数组转换。 |
| Clefable | 赌徒。随机从所有可用通道中选择,因此您会得到一个相对“较小”但仍包含各种保护的输出。逆向者必须处理所有可能的通道。由于通道是随机选择的且可能相互干扰,您可能需要运行多次。 |
| Cofagrigus | 坟墓。使用埃及象形文字名称重命名标识符,编码字符串,将数字重写为表达式,并应用字符串/数字“诅咒”转换。诡异、密集且难以阅读。 |
直接从您的 shell 中列出所有可用的 Impostor:
ditto-cli --list
欢迎添加您自己的 Impostor!然后您就可以调用您想要的那个。
原始 PowerShell 脚本:
[Ref].Assembly.GetType('System.Management.Automation.AmsiUtils').GetField('amsiInitFailed', 'NonPublic,Static').SetValue($null, $true)
混淆命令:
ditto-cli --path test.ps1 --impostor ivysaur
混淆后输出: