自動化逆向框架使用(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.pswp.cn/web/73340.shtml
繁體地址,請注明出處:http://hk.pswp.cn/web/73340.shtml
英文地址,請注明出處:http://en.pswp.cn/web/73340.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

流式ETL配置指南:從MySQL到Elasticsearch的實時數據同步

流式ETL配置指南:從MySQL到Elasticsearch的實時數據同步 場景介紹 假設您運營一個電商平臺,需要將MySQL數據庫中的訂單、用戶和產品信息實時同步到Elasticsearch,以支持實時搜索、分析和儀表盤展示。傳統的批處理ETL無法滿足實時性要求&…

Docker-Volume數據卷詳講

Docker數據卷-Volume 一:Volume是什么,用來做什么的 當刪除docker容器時,容器內部的文件就會跟隨容器所銷毀,在生產環境中我們需要將數據持久化保存,就催生了將容器內部的數據保存在宿主機的需求,volume …

單片機和微控制器知識匯總——《器件手冊--單片機、數字信號處理器和可編程邏輯器件》

目錄 四、單片機和微控制器 4.1 單片機(MCU/MPU/SOC) 一、定義 二、主要特點 三、工作原理 四、主要類型 五、應用領域 六、選型與設計注意事項 七、發展趨勢 4.2 數字信號處理器(DSP/DSC) ?編輯?編輯 一、定義 二、工作原理 三、結構特點 四、應用領域 五、選型與設計注…

macOS 安裝 Miniconda

macOS 安裝 Miniconda 1. Quickstart install instructions2. 執行3. shell 上初始化 conda4. 關閉 終端登錄用戶名前的 base參考 1. Quickstart install instructions mkdir -p ~/miniconda3 curl https://repo.anaconda.com/miniconda/Miniconda3-latest-MacOSX-arm64.sh -o…

高數下---8.1平面與直線

目錄 平面的確定 直線的確定 若要求某一直線或平面就根據要素來求。 例題 平面中的特殊情況 平面中的解題思路 直線的解題思路 平面的確定 兩要素 一 一點 二 傾斜角 即法向量 點法式 可化為一般式 Ax By Cz D 0; (A,B,C) 即法向量; 改變D 即…

CMS遷移中SEO優化整合步驟詳解

內容概要 在CMS遷移過程中,系統化的規劃與執行是保障SEO排名穩定性的核心。首先需明確遷移流程的關鍵階段,包括數據備份、URL適配、元數據同步及安全配置等環節。其中,數據備份不僅需覆蓋原始數據庫與靜態資源,還需驗證備份文件的…

存儲過程、存儲函數與觸發器詳解(MySQL 案例)

存儲過程、存儲函數與觸發器詳解(MySQL 案例) 一、存儲過程(Stored Procedure) 定義 存儲過程是預先編譯好并存儲在數據庫中的一段 SQL 代碼集合,可以接收參數、執行邏輯操作(如條件判斷、循環)…

Python:進程間的通信,進程的操作隊列

進程間的隊列: 隊列的基本操作: 入隊:將數據放到隊列尾部 出隊:從隊列的頭部取出一個元素 maxsize:隊列中能存放數據個數的上限(整數),一旦達到上限插入會導致阻塞,直到隊列中的數據被消費掉 …

【C++初階】--- 類與對象(中)

1.類的默認成員函數 默認成員函數就是??沒有顯式實現,編譯器會?動?成的成員函數稱為默認成員函數。?個類,我們不寫的情況下編譯器會默認?成以下6個默認成員函數,我們主要需要掌握前4個,后兩個了解以下即可,默認…

python處理音頻相關的庫

1 音頻信號采集與播放 pyaudio import sys import pyaudio import wave import timeCHUNK 1024 FORMAT pyaudio.paInt16 CHANNELS 1#僅支持單聲道 RATE 16000 RECORD_SECONDS 3#更改錄音時長#錄音函數,生成wav文件 def record(file_name):try:os.close(file_…

[M模擬] lc2711. 對角線上不同值的數量差(對角線遍歷+前后綴分解)

文章目錄 1. 題目來源2. 題目解析 1. 題目來源 鏈接:2711. 對角線上不同值的數量差 前置題: [M模擬] lc3446. 按對角線進行矩陣排序(對角線遍歷公式推導模板題) 矩形的對角線遍歷的基礎題。 題單: 待補充 2. 題目解析 2025年03月25日…

設計一個基于機器學習的光伏發電功率預測模型,以Python和Scikit - learn庫為例

下面為你設計一個基于機器學習的光伏發電功率預測模型,以Python和Scikit - learn庫為例。此模型借助歷史氣象數據和光伏發電功率數據來預測未來的光伏發電功率。 模型設計思路 數據收集:收集歷史氣象數據(像溫度、光照強度、濕度等&#xf…

洛谷 P1351 [NOIP 2014 提高組] 聯合權值(樹)

題目描述 無向連通圖 G 有 n 個點,n?1 條邊。點從 1 到 n 依次編號,編號為 i 的點的權值為 Wi?,每條邊的長度均為 1。圖上兩點 (u,v) 的距離定義為 u 點到 v 點的最短距離。對于圖 G 上的點對 (u,v),若它們的距離為 2,則它們之間…

YoloV8訓練和平精英人物檢測模型

概述 和平精英人物檢測,可以識別游戲中所有人物角色,并通過繪制框將人物選中,訓練的模型僅僅具有識別功能,可以識別游戲中的視頻、圖片等文件,搭配Autox.js可以推理,實現實時繪制,但是對手機性…

智能汽車圖像及視頻處理方案,支持視頻實時拍攝特效能力

在智能汽車日新月異的今天,美攝科技作為智能汽車圖像及視頻處理領域的先行者,憑借其卓越的技術實力和前瞻性的設計理念,為全球智能汽車制造商帶來了一場視覺盛宴的革新。美攝科技推出智能汽車圖像及視頻處理方案,一個集高效性、智…

架構設計之自定義延遲雙刪緩存注解(下)

架構設計之自定義延遲雙刪緩存注解(下) 小薛博客官方架構設計之自定義延遲雙刪緩存注解(下)地址 為了保證Cache和ClearAndReloadCache的靈活性,特意加入EL表達式解析 1、Cache package com.xx.cache;import java.lang.annotation.*; import java.util.concurren…

rosbag|ROS中.bag數據包轉換為matlab中.mat數據類型

代碼見代碼 msg_dict中設置自定義消息類型 test_config中設置需要記錄的具體的值 test_config中topic_name以及message_type照搬plotjuggler打開時的參數 最后生成.mat文件在matlab中進行使用

基于動態 FOF(基金中的基金)策略的基金交易推薦系統的設計與實現思路

下面為你呈現一個基于動態 FOF(基金中的基金)策略的基金交易推薦系統的設計與實現思路,同時給出一個簡單的 Python 示例代碼。 系統設計 1. 需求分析 收集各類基金的歷史數據,涵蓋凈值、收益率、風險指標等。依據動態 FOF 策略…

搭建主從DNS、nfs、nginx

任務需求: 客戶端通過訪問 www.nihao.com 后,能夠通過 dns 域名解析,訪問到 nginx 服務中由 nfs 共享的首頁文件,內容為:Very good, you have successfully set up the system. 各個主機能夠實現時間同步,…

JS 對象轉數組,數組轉對象

數據格式 objMap : {apiP: 8000, sder: true, host: "1.111", wPort: "1335" }要求:將 objMap 轉化為 數組 const equipArray Object.keys(objMap ).map(key > {return {name: key,value: objMap [key]}打印結果 數組轉為對象 let equipAr…