这是一个用于反混淆 OLLVM(Obfuscator-LLVM)混淆的 ARM64 二进制文件的工具集。OLLVM 是一种代码混淆工具,会将直接分支指令(如 b、bl)转换为间接分支指令(如 br、blr),增加逆向分析的难度。
本工具通过符号执行分析,识别并修复这些混淆的分支指令,生成补丁信息,然后在 IDA Pro 中应用这些补丁。
主要功能: 使用 angr 进行符号执行分析,识别并修复混淆的分支指令
核心功能:
- 函数范围识别:通过函数序言和尾声模式识别函数边界
- 基本块分析:遍历函数中的所有基本块
- 分支指令分析:识别
br、blr等间接分支指令 - 符号执行:使用 angr 求解分支目标地址
- 复杂分支处理:处理包含
csel等条件选择指令的复杂分支 - 补丁生成:生成补丁信息 JSON 文件
使用方法:
# 修改 so_path 为目标 .so 文件路径
so_path = r'D:\desktop\保活\1215\2.so'
# 调用 process_func 处理指定地址的函数
process_func(0x14F394)主要功能: IDA Pro 脚本,读取补丁信息并应用到 IDA 数据库
核心功能:
- 函数范围清理:删除并重新定义函数范围
- 补丁应用:读取 JSON 文件中的补丁信息
- 符号解析:将符号名转换为地址
- 字节补丁:在 IDA 中直接修改二进制代码
使用方法:
- 在 IDA Pro 中打开目标二进制文件
- 在 IDA Python 控制台中运行此脚本
- 确保
patch_info.json文件路径正确
主要功能: 使用 PyVEX IR 分析寄存器依赖关系
核心功能:
- IR 分析:将机器码转换为 PyVEX IR
- 依赖追踪:反向追踪影响目标寄存器的所有指令
- 地址映射:将 IR 语句映射回原始指令地址
使用场景:
- 分析分支指令的目标寄存器依赖
- 识别影响分支决策的所有指令
主要功能: 工具函数集合
提供的函数:
disasm(): 反汇编指定地址的指令chunks_to_bytes(): 将字节块列表合并为字节序列bytes_to_chunks(): 将字节序列分割为4字节块move_none_to_end(): 将列表中的 None 元素移动到末尾
-
分析阶段(
angr_branch_analyzer.py)- 加载二进制文件到 angr
- 识别函数范围
- 遍历所有基本块
- 使用符号执行分析分支指令
- 生成补丁信息 JSON 文件
-
应用阶段(
ida_patch_applier.py)- 在 IDA Pro 中打开目标二进制
- 读取补丁信息 JSON 文件
- 应用补丁到 IDA 数据库
angr: 二进制分析框架capstone: 反汇编引擎keystone: 汇编引擎pyvex: IR 转换库archinfo: 架构信息库claripy: 符号求解器idaapi,idc,idautils,ida_funcs: IDA Pro Python API
- 确保所有依赖库已正确安装
angr_branch_analyzer.py中的文件路径需要根据实际情况修改ida_patch_applier.py中的 JSON 文件路径需要正确设置- 符号执行可能较慢,对于大型函数需要耐心等待
- 某些复杂的分支可能无法完全修复,需要手动处理
# 分析函数
process_func(0x14F394)
# 输出补丁信息
# patch_info [{"addr": 0x12345, "code": "abcd1234"}, ...]本项目仅供学习和研究使用。