立即注册,突破游客限制,与技术大牛交流切磋,畅享海量资源,让你的技术之路不再孤单!
您需要 登录 才可以下载或查看,没有账号?立即注册
×
这是一个完整的 Frida 脚本,它同时支持三种日志输出方式:控制台输出、Frida 的 `send/recv` 机制、以及本地文件存储。每种输出方式都可以独立配置启用或禁用
### 三合一输出系统详解
#### 1. **控制台输出**
- **启用方式**:`ENABLE_CONSOLE_OUTPUT = true`
- **输出格式**:可读的文本格式
- **特点**:
- 实时显示在控制台
- 适合调试和即时查看
- 包含颜色高亮和格式化文本
- **示例输出**:
```
[12:34:56.789] [T:12345] [0x00001234] ldr x0, [x1] | MEM[0x7fcd4a3e10]=0xdeadbeef
Call Stack:
#0 asm_get_hwid @ libtrusted.so+0x1234
```
#### 2. **Frida send/recv 输出**
- **启用方式**:`ENABLE_FRIDA_OUTPUT = true`
- **输出格式**:JSON 格式
- **特点**:
- 适合远程监控和自动化处理
- 可通过 Python 脚本接收并处理
- 包含完整的结构化数据
- **接收端 Python 示例**:
```python
import frida
def on_message(message, data):
if message['type'] == 'send':
payload = message['payload']
if payload.get('type') == 'log':
print("Received:", payload)
device = frida.get_usb_device()
pid = device.spawn(["com.example.app"])
session = device.attach(pid)
script = session.create_script(open("asm_tracer.js").read())
script.on('message', on_message)
script.load()
device.resume(pid)
```
#### 3. **本地文件输出**
- **启用方式**:`ENABLE_FILE_OUTPUT = true`
- **输出路径**:`/sdcard/frida_logs/asm_trace.log`
- **输出格式**:双格式(文本和 JSON 混合)
- **特点**:
- 持久化存储
- 包含文件头和文件尾信息
- 自动创建目录和文件
- **文件内容示例**:
```
=== Frida Assembly Trace Log ===
Start Time: Fri Aug 08 2023 12:34:56 GMT+0800
Target: libtrusted.so
Trace Mode: Function: asm_get_hwid
{"type":"instruction","address":"0x7fcd4a1234","instruction":{...}}
[12:34:56.789] [T:12345] [0x00001234] ldr x0, [x1]
```
### 配置选项说明
```javascript
// 日志目标配置
const ENABLE_CONSOLE_OUTPUT = true; // 控制台输出
const ENABLE_FRIDA_OUTPUT = true; // Frida send/recv 输出
const ENABLE_FILE_OUTPUT = true; // 本地文件输出
// 文件输出配置
const LOG_DIR = "/sdcard/frida_logs/"; // 日志目录
const LOG_FILENAME = "asm_trace.log"; // 日志文件名
// 监控配置
const TARGET_LIB = "libtrusted.so"; // 目标 so 文件
const TRACE_ALL = false; // 是否监控整个 so
const FUNC_TO_TRACE = "asm_get_hwid"; // 目标函数名
// 日志内容配置
const LOG_SYSCALL = true; // 记录系统调用
const LOG_MEM_ACCESS = true; // 记录内存访问
const LOG_REGISTERS = false; // 记录完整寄存器
```
### 高级功能
1. **智能路径处理**:
- 自动创建日志目录(如果不存在)
- 处理 Android 文件系统权限问题
- 缓冲写入优化文件 I/O 性能
2. **结构化日志**:
- 事件日志(函数进入/退出)
- 状态日志(监控开始/结束)
- 指令日志(详细执行信息)
3. **错误处理**:
- 文件操作错误捕获
- 格式错误处理
- 符号缺失处理
4. **性能优化**:
- 缓冲刷新机制
- 选择性寄存器记录
- 轻量级系统调用映射
### 使用说明
1. **配置输出目标**:
```javascript
const ENABLE_CONSOLE_OUTPUT = true; // 启用控制台
const ENABLE_FRIDA_OUTPUT = false; // 禁用 Frida 输出
const ENABLE_FILE_OUTPUT = true; // 启用文件输出
```
2. **配置监控目标**:
```javascript
const TARGET_LIB = "libtarget.so";
const FUNC_TO_TRACE = "sensitive_function";
```
3. **运行脚本**:
```bash
frida -U -f com.example.app -l asm_tracer_multi.js
```
4. **查看输出**:
- 控制台:直接查看 Frida 输出
- 文件:`adb shell cat /sdcard/frida_logs/asm_trace.log`
- Frida 输出:使用 Python 脚本接收
### 输出路径说明
1. **控制台输出**:
- 直接显示在运行 Frida 的控制台
- 不需要额外路径
2. **Frida send/recv 输出**:
- 通过 Frida 消息通道传输
- 接收端自行决定存储位置
3. **本地文件输出**:
- 默认路径:`/sdcard/frida_logs/asm_trace.log`
- 可通过修改 `LOG_DIR` 和 `LOG_FILENAME` 自定义路径
- 文件位置可通过 ADB 访问:
```bash
adb shell ls /sdcard/frida_logs/
adb pull /sdcard/frida_logs/asm_trace.log
```
这个脚本提供了全面的日志输出方案,可以根据需要灵活配置输出目标,满足从实时调试到离线分析的各种需求场景。 |
|