如何在已Root的Android设备本地运行HTTP Toolkit代理并改写请求?
在Root安卓设备本地运行Mockttp实现HTTP响应改写
核心思路
HTTP Toolkit的核心依赖是Mockttp,无需依赖ADB即可在本地独立运行。我们可以直接在Termux中部署Mockttp,结合Root权限完成系统代理配置与证书安装,实现全设备内的HTTP请求自动化改写。
步骤1:在Termux中安装Mockttp
- 安装Node.js环境:
pkg update && pkg install nodejs -y - 全局安装Mockttp:
npm install -g mockttp
步骤2:启动Mockttp本地服务
直接启动Mockttp代理服务,监听所有网络接口(确保设备内应用能访问):
mockttp start --port 8080 --host 0.0.0.0
验证服务是否正常:访问http://127.0.0.1:8080/mockttp/status,返回JSON状态信息即成功。
步骤3:Root权限下配置系统代理
方式1:全局系统代理(简单快捷)
切换到Root权限后执行:
su # 设置全局HTTP/HTTPS代理 settings put global http_proxy 127.0.0.1:8080 settings put global https_proxy 127.0.0.1:8080
取消代理可执行:
settings put global http_proxy :0 settings put global https_proxy :0
方式2:仅针对目标应用设置代理(更精准)
使用Root权限修改目标应用的网络配置,或借助Root版代理工具指定应用代理地址为127.0.0.1:8080。
步骤4:安装Mockttp CA证书到系统信任区
由于已Root,可将Mockttp证书加入系统信任链,避免应用证书校验失败:
- 导出Mockttp的CA证书:
mockttp certs # 输出路径通常为 ~/.mockttp/ca.pem - 转换证书格式并计算哈希值:
cd ~/.mockttp openssl x509 -in ca.pem -outform DER -out ca.crt # 计算证书哈希值(用于命名系统证书文件) CERT_HASH=$(openssl x509 -inform PEM -subject_hash_old -in ca.pem | head -1) - 系统分区挂载与证书部署(Android 10+推荐用Magisk Systemless方式):
- 若使用Magisk,创建模块目录并复制证书:
su mkdir -p /data/adb/modules/mockttp-cert/system/etc/security/cacerts/ cp ~/.mockttp/ca.crt /data/adb/modules/mockttp-cert/system/etc/security/cacerts/${CERT_HASH}.0 chmod 644 /data/adb/modules/mockttp-cert/system/etc/security/cacerts/${CERT_HASH}.0 - 重启设备后,证书会被系统自动加载。
- 若使用Magisk,创建模块目录并复制证书:
步骤5:编写自动化响应改写脚本
创建rewrite-rules.js脚本,自定义请求匹配规则与响应内容:
const mockttp = require('mockttp'); async function startProxy() { const server = mockttp.getLocal({ port: 8080 }); // 示例:改写目标应用API的响应 await server.forAnyRequest() .withHost('api.your-friend-app.com') // 替换为目标API域名 .withPath('/user/info') // 可选:指定路径 .thenReply(200, JSON.stringify({ code: 200, data: { username: "modified_user", vip: true // 自定义改写内容 } }), { 'Content-Type': 'application/json' }); // 其他规则可以继续添加 await server.start(); console.log(`代理服务已启动:${server.url}`); } startProxy();
启动脚本:
node rewrite-rules.js
关键注意事项
- Termux需授予Root权限:执行
su并允许授权。 - Android 12+系统代理可能需要在设置中手动确认开启。
- 若目标应用使用证书钉扎(Certificate Pinning),需结合Root权限解除钉扎(如使用Magisk模块
Universal SafetyNet Fix或SSL Unpinning模块)。
内容的提问来源于stack exchange,提问作者Renato




