You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多
文档控制台
免费开始使用

如何在已Root的Android设备本地运行HTTP Toolkit代理并改写请求?

在Root安卓设备本地运行Mockttp实现HTTP响应改写

核心思路

HTTP Toolkit的核心依赖是Mockttp,无需依赖ADB即可在本地独立运行。我们可以直接在Termux中部署Mockttp,结合Root权限完成系统代理配置与证书安装,实现全设备内的HTTP请求自动化改写。

步骤1:在Termux中安装Mockttp

  1. 安装Node.js环境:
    pkg update && pkg install nodejs -y
    
  2. 全局安装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证书加入系统信任链,避免应用证书校验失败:

  1. 导出Mockttp的CA证书:
    mockttp certs
    # 输出路径通常为 ~/.mockttp/ca.pem
    
  2. 转换证书格式并计算哈希值:
    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)
    
  3. 系统分区挂载与证书部署(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
      
    • 重启设备后,证书会被系统自动加载。

步骤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 FixSSL Unpinning模块)。

内容的提问来源于stack exchange,提问作者Renato

火山引擎 最新活动