# raw_codec_rpc 基于 Frida RPC 的 `raw_data` 编解码调用封装,核心依赖 App 运行时中的 Java 层逻辑(`gc.b.b` / `gc.a.intercept`)。 ## 目录说明 - `jhs_raw_codec_rpc.js`:Frida 侧 RPC 脚本(实现 enc/dec) - `jhs_raw_codec_client.py`:Python 客户端封装(设备连接、attach、RPC 调用、CLI 兜底) - `demo.py`:单页请求封装示例(可直接改为多页循环) - `requirements.txt`:Python 依赖清单 ## 1. 环境要求 ### 1.1 PC 端(Windows) - Python:3.10+(建议和你当前一致,3.10.8) - ADB:可用(`adb version` 正常) - Frida CLI:可用(`frida --version` 正常) - Python 包:`frida`、`frida-tools`、`requests` ### 1.2 模拟器端(Android) - 已安装并可启动目标 App:`com.jihuanshe` - 模拟器可 ADB 连接 - `frida-server` 已推送到设备并可执行 - `frida-server` 版本需与 PC 侧 `frida` 主版本一致 ## 2. 安装步骤 ### 2.1 PC 端安装 在 `scripts/raw_codec_rpc` 目录下执行: ```bash python -m venv .venv .venv\Scripts\activate pip install -r requirements.txt ``` 确认命令可用: ```bash python -c "import frida, requests; print('ok')" frida --version adb version ``` ### 2.2 模拟器端安装 frida-server 1. 下载与你 PC 侧 frida 主版本匹配的 `frida-server-*-android-*.xz` 2. 解压得到 `frida-server` 3. 推送并授权: ```bash adb -s push frida-server /data/local/tmp/fs adb -s shell "chmod 755 /data/local/tmp/fs" ``` 4. 启动 frida-server: ```bash adb -s shell "/data/local/tmp/fs &" ``` 5. 验证连接: ```bash frida-ls-devices frida-ps -D ``` ## 3. 程序运行时的模拟器状态要求 - 模拟器保持开机,不要休眠 - 目标 App 已启动,并停留在前台页面(至少已完成初始化) - `frida-server` 保持运行(不要被系统回收) - 跑批量分页时,不要频繁切换 App 到后台 ## 4. 关键参数说明 `JhsRawCodecClient(...)` 支持: - `device_id`:指定设备 ID(多模拟器必须传) - `cli_target_sec`:CLI 兜底模式的 frida `-t` 秒数(建议 `2` 或 `3`) 可选环境变量(不强制): - `FRIDA_DEVICE_ID` - `FRIDA_CLI_TARGET_SEC` - `JHS_CODEC_DEBUG`(`1/true/on` 开启日志) ## 5. 推荐调用方式(多页复用) 核心原则:**client 和 Session 放在循环外,只创建一次。** ```python from jhs_raw_codec_client import JhsRawCodecClient import requests page = 1 with JhsRawCodecClient(device_id="25051FDD4S018P", cli_target_sec=2) as client: with requests.Session() as sess: while page < 100: result = fetch_market_page( page=page, token=TOKEN, client=client, session=sess, headers=HEADERS, ) print(page, result["decoded"]) page += 1 ``` ## 6. 性能建议 - 多页任务复用单个 `JhsRawCodecClient` - 多页任务复用单个 `requests.Session` - `cli_target_sec` 建议先设 `2`,不稳定再回退 `3` - 仅在排障时开启 `JHS_CODEC_DEBUG` ## 7. 常见问题排查 ### 7.1 `unable to attach ...` - 确认 App 正在运行 - 确认 `device_id` 传对 - 确认 `frida-server` 正在设备里运行 ### 7.2 `Java is not defined` - 当前会自动降级到 CLI 兜底 - 若仍慢,优先调低 `cli_target_sec` ### 7.3 多模拟器连错设备 - 显式传 `device_id` - 用 `adb devices` / `frida-ls-devices` 核对 ID ## 8. 安全说明 - `TOKEN` 建议不要硬编码在仓库,改为环境变量或外部配置 - 避免在日志中输出完整 token/raw_data(生产环境)