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

news2025/3/29 2:21:04

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.coloradmin.cn/o/2321956.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

[特殊字符] 2025蓝桥杯备赛Day13——P10984 [蓝桥杯 2023 国 Python A] 残缺的数字

🔍 2025蓝桥杯备赛Day13——P10984 [蓝桥杯 2023 国 Python A] 残缺的数字 🚀 题目速览 题目难度:⭐⭐⭐(需掌握位运算与组合数学) 考察重点:二进制状态处理、位运算、乘法原理、枚举 P10984 [蓝桥杯 2…

线程控制与线程库

目录 解析tid 线程的地址空间布局 线程栈 我们来学习线程控制与线程库 解析tid #include<iostream> #include<string> #include<cstdio> #include<cstring> #include<unistd.h> #include<thread> using namespace std;int shared_val…

P1182 数列分段 Section II

P1182 数列分段 Section II - 洛谷 题目描述 对于给定的一个长度为 N 的正整数数列 A1​∼AN​&#xff0c;现要将其分成 M&#xff08;M≤N&#xff09;段&#xff0c;并要求每段连续&#xff0c;且每段和的最大值最小。 关于最大值最小&#xff1a; 例如一数列 4 2 4 5 1…

比手动备份快 Iperius全自动加密备份,NAS/云盘/磁带机全兼容

IperiusBackupFull是一款专为服务器和工作站设计的备份解决方案&#xff0c;它同时也是一款针对Windows 7/8/10/11/Server系统的简洁且可靠的备份软件。该软件支持增量备份、数据同步以及驱动器镜像&#xff0c;确保能够实现完全的系统恢复。在备份存储方面&#xff0c;Iperius…

2025最新版Ubuntu Server版本Ubuntu 24.04.2 LTS下载与安装-详细教程,细致到每一步都有说明

官网 https://ubuntu.com/ 下载 点击菜单 Prodercts> Ubuntu OS>Ubuntu Server 点击下载 下载后会有个弹窗 安装 选择第一个 install Ubuntu Server 直接默认&#xff0c;选择English 【默认】 选择键盘布局【默认】 选择安装配置【默认】 配置网络 我这里选择…

更新测试环境构建命令以解决构建失败问题

本段代码解决 更新测试环境构建命令以解决构建失败问题 //本项目是reactumi3antdesign 搭建的后台管理系统 "build:test": "cross-env UMI_ENVtest NODE_OPTIONS--openssl-legacy-provider umi build"**原因&#xff1a;**Node.js v17 的 OpenSSL 3.0 与旧…

树莓派5-GPIO和40针引脚

1.树莓派5引脚图 2.GPIO 引脚作用 (1) 电压 板上有两个 5V 引脚和两个 3.3V 引脚&#xff0c;以及一些不可配置的接地引脚 (0V)。其余引脚均为通用 3.3V 引 脚&#xff0c;这意味着输出设置为 3.3V&#xff0c;输入可接 3.3V。 (2) 输出 指定为输出引脚的 GPIO 引脚可设置为…

【数据库】sql错题详解

1. 执行子查询 SELECT 供应商号 FROM 订购单 WHERE 职工号 IN (E1, E3) GROUP BY 供应商号 HAVING COUNT(DISTINCT 职工号) 2筛选职工号为 E1 或 E3 的记录&#xff1a; 依据 WHERE 职工号 IN (E1, E3) 这个条件&#xff0c;从 订购单 表中把职工号为 E1 或者 E3 的记录筛选出…

C#重写treeView控件

1.先准备两张图片downdrop.png、downdrop_open.png放在项目Resources里 2.新建用户控件BaseTreeView控件 3.重写控件继承TreeView&#xff0c;记得删除AutoScaleMode这一行&#xff0c;否则会报错 public partial class BaseTreeView : TreeView {//这个属性貌似不起作用&…

ArcGIS 10.8.1之后发布栅格数据的MapServer 动态工作空间 替换数据源渲染问题

背景 经过测试&#xff0c;Server 10.8.1、11.0、11.1发布相关服务设置动态空间之后&#xff0c;前端都无法自动读取同名的clr色彩映射表文件进行渲染&#xff0c;服务都是由ArcGIS Pro进行发布。 原因 基于ArcMap发布的服务才支持&#xff0c;但是10.8.1之后不支持ArcMap发…

Java集合框架深度剖析:从数据结构到实战应用

引言 Java集合框架是Java开发中的核心组件之一&#xff0c;其设计目标是提供高性能、高复用性的数据容器。无论是数据处理、缓存设计还是高并发场景&#xff0c;集合框架都扮演着关键角色。本文将从List、Map、Set三大核心接口出发&#xff0c;深入剖析其主流实现类&#xff0…

涅槃上岸,入陕进军,复试全程流程开启!

复试决胜局&#xff0c;整装待发&#xff0c;上岸西电&#xff01; 线下复试注意事项、全流程、录取后西安旅游提前告知&#xff01; 过两天考研复试笔试、机试&#xff08;如果有&#xff09;、面试就要开始了&#xff0c;我们需要准备很多东西&#xff0c;学长从以下几个方面…

msyql--基本操作之运维篇

检查 root 用户的权限 查看该用户针对这个数据库的权限 -- 如果在终端连接mysql时需要 mysql -u root -p -- 查看用户权限 SELECT user, host FROM mysql.user WHERE user root;可以看的出来root有他的访问权限&#xff0c;如过没有localhost或者% 说明没有访问权限 添加…

es6 fetch

对比XHR &#x1f6e0;️ fetch 所有配置项 fetch(url, {// 核心配置 method: GET, // HTTP 方法: GET, POST, PUT, DELETE, PATCH, HEAD, OPTIONSheaders: { // 请求头&#xff08;支持 Headers 对象或普通对象&#xff09;Content-Type: applicati…

智能汽车图像及视频处理方案,支持视频星轨拍摄能力

美摄科技作为智能汽车图像及视频处理领域的先行者&#xff0c;正以革新性的技术引领着行业的未来发展。美摄科技智能汽车图像及视频处理方案&#xff0c;一个集高效性、智能化、画质增强于一体的创新解决方案&#xff0c;旨在重塑智能汽车图像画质的新标准&#xff0c;并支持前…

C盘急救实录:从爆红到畅快

极速救援通道&#xff08;懒人专享&#xff09; 老规矩&#xff0c;先上王炸方案&#xff01;”小番茄C盘清理器”直达链接&#xff1a;https://cclean-cdn.xkbrowser.com/cleanmaster/FanQieClean_13046_st.exe 这个神器有三绝&#xff1a; 智能扫描引擎&#xff1a;能识别23…

UART转APB模块ModelSim仿真

一、简介 之前介绍过一个UART转AHB模块&#xff0c;这个代码的框架有个好处&#xff0c;就是FPGA内总线接口比较容易修改成其他总线接口。下图是UART转AHB模块中子模块uart_ahb_mst的框图&#xff0c;主要有三个状态机&#xff1a; &#xff08;1&#xff09; UART_RX_FSM将接收…

Cesium 自定义路径导航材质

cesium 自定义路径导航纹理图片随便更换&#xff0c;UI 提供设计图片即可达到效果&#xff1b; 打开小马的weix 关注下 搜索“技术链” 回复关键词《《路径》》获取原始代码&#xff1b; 拿到就能用轻松解决&#xff01;帮忙点个关注吧&#xff01;

【江协科技STM32】BKP备寄存器RTC实时时钟(学习笔记)

BKP备寄存器 BKP简介 BKP&#xff08;Backup Registers&#xff09;备份寄存器BKP可用于存储用户应用程序数据。当VDD&#xff08;2.0~3.6V&#xff09;电源被切断&#xff0c;他们仍然由VBAT&#xff08;1.8~3.6V&#xff09;维持供电。当系统在待机模式下被唤醒&#xff0…

卷积神经网络 - 参数学习

本文我们通过两个简化的例子&#xff0c;展示如何从前向传播、损失计算&#xff0c;到反向传播推导梯度&#xff0c;再到参数更新&#xff0c;完整地描述卷积层的参数学习过程。 一、例子一 我们构造一个非常简单的卷积神经网络&#xff0c;其结构仅包含一个卷积层和一个输出…