OLLVM字符串解密实战:从静态特征识别到Frida动态补丁
1. OLLVM字符串加密机制解析
在逆向工程领域,OLLVM(Obfuscator-LLVM)的字符串加密一直是让分析者头疼的问题。这种保护机制通过编译时对字符串进行加密处理,运行时再动态解密使用,使得静态分析工具难以直接获取原始字符串内容。
典型加密特征通常表现为:
- 导出表中出现
.datadiv_decode前缀的函数名 - 数据段中存在大量
byte_开头的变量定义 - 代码中存在连续的异或(XOR)操作指令
.init_array段中包含解密初始化函数
以实际案例中的libhello-jni.so为例,IDA静态分析可见如下特征代码:
byte_37118 ^= 0xD2u; // 典型的异或解密操作
byte_37119 ^= 0xD2u;
加密原理主要分为三种实现方式:
- 简单异或:每个字节与固定密钥异或
- 轮换密钥:按特定规律变化的动态密钥
- 复合运算:结合移位、加减等操作的复杂变换
2. 静态分析定位加密特征
2.1 IDA识别关键模式
使用IDA Pro进行静态分析时,可按照以下步骤定位加密逻辑:
- 检查导出表:通过View → Open subviews → Exports,按Name排序查找
.datadiv_decode相关函数 - 分析交叉引用:对可疑的
byte_变量按X键查看引用关系 - 定位解密函数:通常在
.init_array或JNI_OnLoad中初始化
关键指令模式识别表:
| 指令模式 | 典型特征 | 对应解密操作 |
|---|---|---|
| DCQ/DCB | 数据定义指令 | 加密数据存储 |
| EOR | 异或指令 | 基本解密操作 |
| LDRB+EOR |


1306

被折叠的 条评论
为什么被折叠?



