charley 44650433fd feat(jhs_rpc_spider): 增加集成基于frida的编解码RPC客户端 il y a 1 semaine
..
README.md 44650433fd feat(jhs_rpc_spider): 增加集成基于frida的编解码RPC客户端 il y a 1 semaine
YamlLoader.py 44650433fd feat(jhs_rpc_spider): 增加集成基于frida的编解码RPC客户端 il y a 1 semaine
application.yml 44650433fd feat(jhs_rpc_spider): 增加集成基于frida的编解码RPC客户端 il y a 1 semaine
jhs_raw_codec_client.py 44650433fd feat(jhs_rpc_spider): 增加集成基于frida的编解码RPC客户端 il y a 1 semaine
jhs_raw_codec_rpc.js 44650433fd feat(jhs_rpc_spider): 增加集成基于frida的编解码RPC客户端 il y a 1 semaine
jhs_rpc_spider.py 44650433fd feat(jhs_rpc_spider): 增加集成基于frida的编解码RPC客户端 il y a 1 semaine
mysql_pool.py 44650433fd feat(jhs_rpc_spider): 增加集成基于frida的编解码RPC客户端 il y a 1 semaine

README.md

# 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 包:fridafrida-toolsrequests

1.2 模拟器端(Android)

  • 已安装并可启动目标 App:com.jihuanshe
  • 模拟器可 ADB 连接
  • frida-server 已推送到设备并可执行
  • frida-server 版本需与 PC 侧 frida 主版本一致

2. 安装步骤

2.1 PC 端安装

scripts/raw_codec_rpc 目录下执行:

python -m venv .venv
.venv\Scripts\activate
pip install -r requirements.txt

确认命令可用:

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. 推送并授权:

    adb -s <device_id> push frida-server /data/local/tmp/fs
    adb -s <device_id> shell "chmod 755 /data/local/tmp/fs"
    
  4. 启动 frida-server:

    adb -s <device_id> shell "/data/local/tmp/fs &"
    
  5. 验证连接:

    frida-ls-devices
    frida-ps -D <device_id>
    

3. 程序运行时的模拟器状态要求

  • 模拟器保持开机,不要休眠
  • 目标 App 已启动,并停留在前台页面(至少已完成初始化)
  • frida-server 保持运行(不要被系统回收)
  • 跑批量分页时,不要频繁切换 App 到后台

4. 关键参数说明

JhsRawCodecClient(...) 支持:

  • device_id:指定设备 ID(多模拟器必须传)
  • cli_target_sec:CLI 兜底模式的 frida -t 秒数(建议 23

可选环境变量(不强制):

  • FRIDA_DEVICE_ID
  • FRIDA_CLI_TARGET_SEC
  • JHS_CODEC_DEBUG1/true/on 开启日志)

5. 推荐调用方式(多页复用)

核心原则:client 和 Session 放在循环外,只创建一次。

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(生产环境)