|
|
há 1 semana atrás | |
|---|---|---|
| .. | ||
| README.md | há 1 semana atrás | |
| YamlLoader.py | há 1 semana atrás | |
| application.yml | há 1 semana atrás | |
| jhs_raw_codec_client.py | há 1 semana atrás | |
| jhs_raw_codec_rpc.js | há 1 semana atrás | |
| jhs_rpc_spider.py | há 1 semana atrás | |
| mysql_pool.py | há 1 semana atrás | |
# 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 依赖清单adb version 正常)frida --version 正常)frida、frida-tools、requestscom.jihuanshefrida-server 已推送到设备并可执行frida-server 版本需与 PC 侧 frida 主版本一致在 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
frida-server-*-android-*.xzfrida-server推送并授权:
adb -s <device_id> push frida-server /data/local/tmp/fs
adb -s <device_id> shell "chmod 755 /data/local/tmp/fs"
启动 frida-server:
adb -s <device_id> shell "/data/local/tmp/fs &"
验证连接:
frida-ls-devices
frida-ps -D <device_id>
frida-server 保持运行(不要被系统回收)JhsRawCodecClient(...) 支持:
device_id:指定设备 ID(多模拟器必须传)cli_target_sec:CLI 兜底模式的 frida -t 秒数(建议 2 或 3)可选环境变量(不强制):
FRIDA_DEVICE_IDFRIDA_CLI_TARGET_SECJHS_CODEC_DEBUG(1/true/on 开启日志)核心原则: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
JhsRawCodecClientrequests.Sessioncli_target_sec 建议先设 2,不稳定再回退 3JHS_CODEC_DEBUGunable to attach ...device_id 传对frida-server 正在设备里运行Java is not definedcli_target_secdevice_idadb devices / frida-ls-devices 核对 IDTOKEN 建议不要硬编码在仓库,改为环境变量或外部配置