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

embedded/2025/4/1 0:21:52/

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.ppmy.cn/embedded/177765.html

相关文章

TensorFlow之sparse tensor

目录 前言创建sparse tensorsparse tensor的运算: 前言 sparse tensor 稀疏tensor, tensor中大部分元素是0, 少部分元素是非0. 创建sparse tensor import tensorflow as tf# indices指示正常值的索引, 即哪些索引位置上是正常值. # values表示这些正常值是多少. # indices和…

游戏引擎学习第176天

今天的计划 今天我要做的是,首先讨论一下调试服务(debug services),它们是什么,它们应该如何工作。然后我们可能会开始实现它们,但我不认为我们能做到很远,因为首先要做一些基础的准备工作。通…

MATLAB中getfield函数用法

目录 语法 说明 示例 访问标量结构体的字段 嵌套结构体的字段 结构体数组元素的字段 嵌套结构体数组的索引 字段的元素 getfield函数的功能是结构体数组字段。 语法 value getfield(S,field) value getfield(S,field1,...,fieldN) value getfield(S,idx,field1,..…

SpringMVC 请求处理

SpringMVC 请求处理深度解析:从原理到企业级应用实践 一、架构演进与核心组件协同 1.1 从传统Servlet到前端控制器模式 SpringMVC采用前端控制器架构模式,通过DispatcherServlet统一处理请求,相比传统Servlet的分散处理方式,实…

uv:现代 Python 项目管理的高效助手

在 Python 开发中,我们常用的工具包括 pip、virtualenv、pip-tools 等,但它们各自有局限。由 Astral 团队推出的 uv 则以其极速表现和全能特性,正逐渐成为“Python 的 Cargo”。本文将详细解析 uv 常用命令及其中文说明,助你在日常…

uni-app AES 加密

uni-app 官网没有 加密 API 我们 可以 安装 crypto-js npm install crypto-js他会保存到项目中 node_modules import CryptoJS from ../node_modules/crypto-js //引用AES源码js const keyCode 012345678 //密钥 const ivCode 012345678 //偏移量const key CryptoJS.enc.Ut…

CSS3学习教程,从入门到精通,CSS3 定位布局页面知识点及案例代码(18)

CSS3 定位布局页面知识点及案例代码 一、普通流&#xff08;Normal Flow&#xff09; 知识点 普通流是 CSS 中最基本的布局方式&#xff0c;元素按照其在 HTML 文档中出现的顺序依次排列。块级元素独占一行&#xff0c;内联元素则在同一行排列。 案例代码 <!DOCTYPE ht…

Python----计算机视觉处理(Opencv:图像噪点消除:滤波算法,噪点消除)

一、噪声 噪声&#xff1a;指图像中的一些干扰因素&#xff0c;通常是由图像采集设备、传输信道等因素造成的&#xff0c;表现为图像中随机 的亮度&#xff0c;也可以理解为有那么一些点的像素值与周围的像素值格格不入。常见的噪声类型包括高斯噪声 和椒盐噪声。高斯噪声是一种…