当前位置: 首页 > article >正文

自动化逆向框架使用(Objection+Radare2)

1. 工具链架构与核心优势

1.1 动静结合逆向体系

graph LR  
    A[动态分析] -->|Objection实时Hook| B[关键点定位]  
    B --> C[行为数据捕获]  
    D[静态分析] -->|Radare2深度解析| E[控制流重建]  
    E --> F[漏洞模式识别]  
    B --> F  
    C --> F  

组合优势对比

维度ObjectionRadare2组合价值
分析类型运行时动态追踪二进制静态解析覆盖完整逆向生命周期
数据获取实时内存/堆栈/寄存器信息文件结构/汇编指令/符号信息实现动静数据交叉验证
自动化能力Frida脚本快速Hookr2pipe脚本批量分析构建端到端自动化流水线

2. 环境配置与跨平台支持

2.1 全平台部署方案

Windows环境(Powershell)

# 安装Objection  
pip3 install objection  

# 安装Radare2  
iwr https://radare.mikelloc.com/get -OutFile radare2.zip  
Expand-Archive radare2.zip -DestinationPath C:\radare2  
$env:Path += ";C:\radare2\bin"  

Linux环境(Bash)

# 一键安装脚本  
curl -sSL https://github.com/radareorg/radare2/raw/master/sys/install.sh | bash  
pip3 install objection  

2.2 联动验证测试

# 启动联动测试  
objection -g com.target.app explore -c "android hooking watch class_method com.target.app.Crypto.encrypt --dump-args" &  
r2 -d com.target.app -c 'aaa; pdf @ sym.encrypt'  

3. Objection动态分析实战

3.1 运行时Hook技巧

SSL Pinning绕过

objection -g com.target.app explore  
android sslpinning disable  

内存数据捕获

android heap search instances com.target.app.Secret --dump  

自定义Frida脚本集成

// objection_custom.js  
Java.perform(() => {  
    const Cipher = Java.use('javax.crypto.Cipher');  
    Cipher.doFinal.overload('[B').implementation = function(input) {  
        console.log("加密输入:", hexdump(input));  
        return this.doFinal(input);  
    };  
});  
objection -g com.target.app explore -s objection_custom.js  

4. Radare2静态分析进阶

4.1 核心工作流

三阶段分析法

  1. 初始分析aaa(自动分析所有)

  2. 交互探索V(可视化模式)

  3. 脚本处理:r2pipe批量解析

4.2 高级指令应用

控制流图生成

r2 -A target.so  
[0x00000000]> agf > cfg.dot  
dot -Tpng cfg.dot -o cfg.png  

交叉引用追踪

[0x00012345]> axt @ sym.encrypt  
- 0x00012a00 call sym.encrypt  
- 0x00013500 jmp sym.encrypt  

二进制修补示例

[0x0000abcd]> wx 9090 @ 0xabcd  # 将指令替换为NOP  
[0x0000abcd]> pd 1  
            0x0000abcd      90             nop  

5. 框架联动与自动化

5.1 动态数据辅助静态分析

Hook结果导入Radare2

# 捕获加密密钥  
objection -g com.target.app explore -c "android hooking watch class_method com.target.app.Crypto.init --dump-return" | tee key.log  

# 在Radare2中标记密钥  
r2 -w target.so  
[0x00000000]> f key = 0xdeadbeef  
[0x00000000]> pd @ sym.encrypt  
            0x00001234      mov r1, 0xdeadbeef  

5.2 静态特征指导动态Hook

Radare2生成Hook模板

import r2pipe  

r2 = r2pipe.open("target.so")  
func_info = r2.cmdj("pdfj @ sym.encrypt")  
args_count = func_info['ops'][0]['esil'].count(',')  

print(f"""Java.perform(() => {{  
    const NativeEncrypt = NativeFunction(  
        Module.findExportByName(null, 'encrypt'),  
        'int', ['pointer', 'int']  
    );  
    Interceptor.attach(NativeEncrypt, {{  
        onEnter(args) {{  
            this.input = args[1].readByteArray({args_count});  
        }},  
        onLeave(retval) {{  
            console.log(hexdump(this.input));  
        }}  
    }});  
}});""")  

6. 插件开发与扩展

6.1 Objection插件开发

敏感API自动监控插件

# ~/.objection/plugins/sensor.py  
from objection.commands.base import Command  

class Sensor(Command):  
    name = "sensor"  
    help = "监控传感器数据访问"  

    def run(self, args):  
        js = """  
        Java.perform(() => {  
            const SensorManager = Java.use('android.hardware.SensorManager');  
            SensorManager.getDefaultSensor.implementation = function(type) {  
                console.log('访问传感器: ' + type);  
                return this.getDefaultSensor(type);  
            };  
        });  
        """  
        self.api.inject_script(js)  
objection -g com.target.app explore -P ~/.objection/plugins  
# 使用插件  
sensor  

6.2 Radare2脚本自动化

漏洞模式扫描脚本

import r2pipe  

def find_memcpy_vuln(binary):  
    r2 = r2pipe.open(binary)  
    r2.cmd('aaa')  
    funcs = r2.cmdj('aflj')  

    for func in funcs:  
        if 'memcpy' in func['name']:  
            ops = r2.cmdj(f'pdfj @ {func["offset"]}')  
            for op in ops['ops']:  
                if 'esil' in op and 'rcx,=[4]' in op['esil']:  
                    print(f"潜在溢出漏洞: {func['name']}@{hex(op['offset'])}")  

find_memcpy_vuln('target.bin')  

7. 企业级应用案例

7.1 恶意软件自动化分析

流水线设计

sequenceDiagram  
    样本仓库->>Objection: 自动注入动态分析脚本  
    Objection->>Radare2: 导出关键函数地址  
    Radare2->>分析引擎: 提交控制流特征  
    分析引擎->>报告系统: 生成风险评级  

典型检测规则

- rule: 可疑网络行为  
  dynamic:  
    objection: android hooking watch class_method java.net.Socket.connect  
  static:  
    radare2: pd @ sym.encrypt ~ 'RC4'  
  risk: high  

7.2 物联网固件批量分析

集群化处理

# 任务分发脚本  
find ./firmwares -name "*.bin" | parallel -j 8 \  
    'r2 -c "aaa; agf > {}.cfg" {} && \  
     objection -N -q -s analyze.js -g {}'  

8. 调试与优化策略

8.1 常见问题排查

动态注入失败处理

  1. 检查Frida-server是否运行:adb shell ps | grep frida

  2. 验证APK可调试性:aapt dump badging app.apk | grep debuggable

  3. 关闭SELinux:adb shell setenforce 0

静态分析错误处理

# 修复Radare2分析错误  
r2 -w target.so  
[0x00000000]> e anal.in=block  
[0x00000000]> af  

8.2 性能优化技巧

Radare2分析加速

r2 -c "e anal.limits=true; e anal.timeout=60; aaa" target.so  

Objection过滤冗余信息

objection explore --quiet --filter "com.target.secret"  

技术验证清单

  • 实现Objection与Radare2数据互通

  • 开发自定义分析插件

  • 构建恶意软件自动化检测流水线

  • 完成物联网固件批量分析测试

  • 优化工具链性能提升30%+

本章实验需在隔离网络环境中进行,所有恶意软件分析需遵循国家《网络安全法》规定。建议使用VirusShare或MalwareBazaar的授权样本库。

关于作者:

15年互联网开发、带过10-20人的团队,多次帮助公司从0到1完成项目开发,在TX等大厂都工作过。当下为退役状态,写此篇文章属个人爱好。本人开发期间收集了很多开发课程等资料,需要可联系我


http://www.kler.cn/a/613962.html

相关文章:

  • Manus:通用智能体的架构革命与产业破局
  • 记一次系统单点登录、模拟web系统登录方式的开发过程,使用AES加密
  • Arduino、ESP32驱动GUVA-S12SD UV紫外线传感器(光照传感器篇)
  • C 标准库 – 头文件
  • git_merge
  • 12_JavaScript_实现日期
  • 21.Excel自动化:如何使用 xlwings 进行编程
  • 大模型——使用Ollama本地部署Gemma-3-27B大模型,基于LangChain分析PDF文档
  • 解决“Generic family ‘sans-serif‘ not found”问题
  • ansible介绍以及安装
  • 【Golang】补充:占位符、转义字符、错误处理
  • Rust 面向对象
  • 基于Zookeeper的微服务配置管理与灰度发布实战指南
  • Elasticsearch:理解政府中的人工智能 - 应用、使用案例和实施
  • SQLark导出功能详解|轻松管理数据库数据与结构
  • 鸿蒙富文本实践
  • C++进制转换的方法
  • 服务器修改内存后Oracle无法正常启动
  • 3.0 Disruptor的使用介绍(一)
  • Swift语音助手(苹果生态系统的核心编程语言)