news 2026/5/7 7:00:37

王者营地 Token获取:从 SSL Pinning 绕过到 Frida 动态插桩

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
王者营地 Token获取:从 SSL Pinning 绕过到 Frida 动态插桩

王者营地官方英雄战力数据抓包实战:从 SSL Pinning 绕过到 Frida 动态插桩获取Token

背景:近期在研究王者荣耀英雄战力数据时,需要通过王者营地 App 获取官方战力榜接口参数。过程中遇到了 HTTPS 抓包失败、SSL Pinning 拦截等问题,最终通过 Frida 动态插桩成功绕过,完整记录下这次技术探索过程。


文章目录

  • 王者营地官方英雄战力数据抓包实战:从 SSL Pinning 绕过到 Frida 动态插桩获取Token
    • 一、目标与需求
    • 二、初步尝试:直接抓包
      • 2.1 环境准备
      • 2.2 操作抓包
      • 2.3 遇到的问题
    • 三、解决方案选择
    • 四、Frida 环境搭建
      • 4.1 安装 Frida 工具链
      • 4.2 部署 frida-server 到手机
      • 4.3 启动 frida-server
      • 4.4 验证连接
    • 五、编写 SSL Pinning 绕过脚本
      • 5.1 脚本原理
      • 5.2 完整脚本(ssl-bypass.js)
      • 5.3 关键方法解析
    • 六、执行 Hook 与抓包
      • 6.1 Attach 到运行中的进程
      • 6.2 配合 Fiddler 抓包
      • 6.3 配合 HttpCanary 抓包
    • 七、获取到的接口参数
      • 请求示例
    • 八、完整技术总结
      • 8.1 问题解决路径
      • 8.2 核心知识点
      • 8.3 注意事项
    • 九、参考资源

一、目标与需求

需要获取王者营地 App 中英雄战力榜的官方接口参数,用于查询:

  • 全国/省/市/区各级榜单
  • 英雄最低上榜战力
  • 英雄排名数据

其实本篇主要是抓取UserIDToken,本来就想用一下王者荣耀官方战力查询接口,但是获取不到参数,这能忍吗,不能忍。
参考: 分享王者荣耀官方战力查询接口:直接调用王者营地API获取英雄战力数据

目标接口

POSThttps://kohcamp.qq.com/honor/ranklist Content-Type:application/json

这是目前最权威、最稳定的战力数据来源,很多开源项目(包括类似工具)都使用这个接口

请求参数(JSON):

{"adcode":"310000",// 地区代码(如上海:310000)"roleId":"116581781",// 玩家角色ID"areaId":"3",// 大区:1=QQ安卓, 2=iOS安卓, 3=微信安卓, 4=微信iOS"heroId":"146",// 英雄代码(如146=露娜)"recommendPrivacy":0}

请求头需要:

  • token:从王者营地 App 抓包获取
  • userId:营地用户ID
    ⚠️ 这个接口需要有效的 token,通常需要从王者营地 App 抓包获取,且 token 可能会过期。

二、初步尝试:直接抓包

2.1 环境准备

推荐方案:在 PC 上使用 雷电模拟器/夜神模拟器 + Fiddler,操作最方便。

  • 工具:抓包工具(Fiddler5.0、 HttpCanary) + 雷电模拟器9(Android 9.0)+ ADB调试工具
  • 配置:模拟器 WiFi 代理指向 Fiddler(端口 8888)
  • 证书:Fiddler 根证书已安装到模拟器用户证书目录

Fiddler5.0可以去吾爱论坛下载,HttpCanary 尽量找找高级版。ADB从官网下载了解压后添加个环境变量即可。

我最终Fiddler还是没抓到包,但是HttpCanary 可以。

2.2 操作抓包

配置抓包环境(以 Fiddler + 模拟器为例)

步骤 1:配置 Fiddler 下载安装 Fiddler 打开 Tools → Options → HTTPS 勾选 Decrypt HTTPS traffic 点击 Actions → Trust Root Certificate 安装证书 切换到 Connections 标签,勾选 Allow remote computers to connect 记住 Fiddler 的监听端口(默认 8888) 步骤 2:配置模拟器代理 打开模拟器的 WiFi 设置 长按当前 WiFi → 修改网络 → 高级选项 代理选择 手动 输入你电脑的 IP 地址 和端口 8888 步骤 3:安装 Fiddler 证书到模拟器 在模拟器浏览器中访问:http://你的电脑IP:8888 下载并安装 Fiddler 根证书
  1. 打开Fiddler,【工具】->【选项】->【HTTPS】,勾选抓取HTTPS连接和解密HTTPS流量,可以选择仅从远程客户端抓取,因为我们只要模拟器的流量。

  2. 连接这里配置监听端口,默认8888,还有勾选允许远程计算机连接。

  3. 打开模拟器,配置模拟器代理,记得使用桥接网络模式,然后点击wifi配置代理,首先查一下你的电脑的ip地址

    这个时候你的抓包软件应该能捕获到http的流量了,之后打开浏览器,地址栏输入你的代理IP+端口,我这里是192.168.10.121:8888,会出现以下界面,点击下载完成后安装CA证书。

  4. 安装好之后代理就配置完成了,打开王者营地,你会发现根本抓不到需要的包,同时还有告警提示:

  5. 打开HttpCanary看看,点击设置、选择目标应用、安装CA证书后发现还是一样的,甚至应用界面都无法打开了。

具体的分析和处理见下面。

2.3 遇到的问题

抓包时发现所有 HTTPS 请求都显示为CONNECT 隧道,无法解密(甚至都抓不到HTTPS的流量,这个我怀疑是抓包工具的问题,后面换成HttpCanary正常的):

CONNECT galileotelemetry.tencent.com:443 HTTP/1.1 Host: galileotelemetry.tencent.com:443 Connection: Keep-Alive User-Agent: okhttp/4.9.1 A SSLv3-compatible ClientHello handshake was found...

原因分析:王者营地 App 使用了SSL Pinning(证书锁定)技术,检测到 Fiddler 的中间人证书后拒绝连接,导致 Fiddler 只能看到 TCP 握手层,无法获取应用层 HTTP 内容。


三、解决方案选择

方案原理难度适用性
Xposed + JustTrustMe模块绕过证书校验需要 Root + Xposed
Frida 动态插桩运行时 Hook 修改验证逻辑中高无需 Xposed,更灵活
HttpCanary内置 SSL Pinning 绕过部分版本需 Root
降级 Android 版本低版本默认信任用户证书功能可能受限

这里我最终选择Frida,原因:

  • 无需安装 Xposed 框架
  • 可以精确 Hook 目标方法
  • 对系统侵入性较小

(对其它感兴趣的伙伴也可以动手试一下)


四、Frida 环境搭建

4.1 安装 Frida 工具链

首先你的电脑环境得先安装了python。

# 电脑端安装 frida-toolspipinstallfrida-tools# 验证版本frida--version# 输出:17.9.5# 查看adb连接情况,这里模拟器设置里面要先开启adb调试adb devices# 输出:List of devices attached# emulator-5554 device # 这个就是模拟器设备信息

4.2 部署 frida-server 到手机

frida-server下载 https://github.com/frida/frida/releases

# 查看手机架构adb shell getprop ro.product.cpu.abi# 输出:x86_64 (不同的模拟器不同)# 根据上面输出的信息下载对应版本 frida-server# https://github.com/frida/frida/releases# frida-server-17.9.5-android-x86_64.xz# 解压并重命名(也可以用自己电脑解压软件解压,如7-zip、Bandizip)xz-dfrida-server-17.9.5-android-x86_64.xzmvfrida-server-17.9.5-android-x86_64 frida-server# 推送到手机adb push frida-server /data/local/tmp/# 赋予执行权限adb shell"chmod 755 /data/local/tmp/frida-server"

4.3 启动 frida-server

# adb shell "/data/local/tmp/frida-server &"# 需要 Root 权限启动adb shell"su -c '/data/local/tmp/frida-server &'"

如果遇到报错“Unable to save SELinux policy to the kernel: Permission denied”这是SELinux 权限问题,用 Root 权限启动。

adb shellsu/data/local/tmp/frida-server&
adb root adb shell"/data/local/tmp/frida-server &"

常见问题

  • Address already in use:frida-server 已在运行,无需重复启动
  • Permission denied:未获取 Root 权限

4.4 验证连接

frida-ps-U

看到手机进程列表说明连接成功。如果报错,先杀掉旧的 frida-server后重新启动:

adb shell"su -c 'killall frida-server'"adb shell"su -c '/data/local/tmp/frida-server &'"frida-ps-U

五、编写 SSL Pinning 绕过脚本

5.1 脚本原理

SSL Pinning 绕过核心思想:Hook 住 App 中验证服务器证书的方法,让其永远返回"验证通过"

王者营地使用的技术栈:

  • HTTP 客户端:OkHttp 4.9.1
  • SSL 验证:Android 系统 TrustManagerImpl
  • 域名验证:HostnameVerifier

一句话总结
Frida 脚本让 App 对 Fiddler 的"假证书"睁一只眼闭一只眼,但 Fiddler 自己还需要被 Android 系统信任才能解密内容。

5.2 完整脚本(ssl-bypass.js)

Java.perform(function(){console.log(" Hooking 王者营地 SSL");// 1. Hook 系统级证书校验(核心)varTrustManagerImpl=Java.use("com.android.org.conscrypt.TrustManagerImpl");varArrayList=Java.use("java.util.ArrayList");TrustManagerImpl.checkTrustedRecursive.implementation=function(){console.log("[+] checkTrustedRecursive() bypassed");// 直接返回空列表,跳过所有证书链校验returnArrayList.$new();};// 2. Hook OkHttp 证书锁定try{varCertificatePinner=Java.use("okhttp3.CertificatePinner");CertificatePinner.check.overload('java.lang.String','java.util.List').implementation=function(){console.log("[+] OkHttp CertificatePinner bypassed");};}catch(e){console.log("[-] OkHttp CertificatePinner not found");}// 3. Hook 域名验证try{varhostnameVerifier=Java.use("javax.net.ssl.HostnameVerifier");varMyHostnameVerifier=Java.registerClass({name:'com.example.MyHostnameVerifier',implements:[hostnameVerifier],methods:{verify:function(hostname,session){console.log("[+] Hostname verified: "+hostname);returntrue;// 任何域名都通过}}});varHttpsURLConnection=Java.use("javax.net.ssl.HttpsURLConnection");HttpsURLConnection.setDefaultHostnameVerifier(MyHostnameVerifier.$new());}catch(e){console.log("[-] HostnameVerifier hook failed");}console.log(" Hooks ready");});

替代的Python脚本(hook.py):

importfridaimportsysdefon_message(message,data):print(message)device=frida.get_usb_device()pid=device.spawn(["com.tencent.gamehelper.smoba"])session=device.attach(pid)withopen("ssl-bypass.js","r",encoding="utf-8")asf:script=session.create_script(f.read())script.on("message",on_message)script.load()device.resume(pid)sys.stdin.read()

5.3 关键方法解析

Hook 目标原始功能Hook 后效果
TrustManagerImpl.checkTrustedRecursive()递归验证证书链是否可信直接返回空列表,跳过校验
CertificatePinner.check()OkHttp 验证证书指纹空实现,不执行校验
HostnameVerifier.verify()验证域名与证书匹配永远返回 true

六、执行 Hook 与抓包

6.1 Attach 到运行中的进程

先手动打开王者营地 App

# 1. 确认 frida-server 在运行adb shell"su -c 'ps | grep frida'"# 2. 查看进程 PIDfrida-ps-U|findstr 王者营地# 输出:<ID> 王者营地# 3. Attach 并加载脚本frida-U-p<上面的ID>-l"C:\Users\yxn\Downloads\ssl-bypass.js"

成功后会看到:

[+] Hostname verified: galileotelemetry.tencent.com [+] Hostname verified: galileotelemetry.tencent.com

6.2 配合 Fiddler 抓包

注意:Frida 绕过了 App 的证书校验,但 Fiddler 还需要被 Android 系统信任。

证书安装步骤

# 导出 Fiddler 证书到桌面# Tools → Options → HTTPS → Actions → Export Root Certificate# 推送到系统证书目录(模拟器已 Root)adb root adb remount adb push FiddlerRoot.cer /system/etc/security/cacerts/ adb shell"chmod 644 /system/etc/security/cacerts/FiddlerRoot.cer"adbreboot


Fiddler 里全是 Tunnel to 说明 HTTPS 解密没生效,Frida 虽然绕过了 App 的 SSL Pinning,但 Fiddler 本身没能解密流量。

6.3 配合 HttpCanary 抓包

如果 Fiddler 证书一直搞不定,直接在模拟器里装 HttpCanary:
下载 HttpCanary APK 安装到模拟器
HttpCanary 设置 → 安装根证书 → 选择 System Trusted(需要 Root)
HttpCanary 有内置 SSL Pinning 绕过功能
开启抓包 → 打开王者营地 → 操作战力查询
在 HttpCanary 里直接看明文请求

成功了,可以看到捕获到了kohcamp.qq.com相关的数据,随便点一个进去,里面就有我们要的内容:


七、获取到的接口参数

请求示例

POST https://kohcamp.qq.com/honor/ranklist HTTP/1.1 Host: kohcamp.qq.com token: eyJhbGciOiJIUzI1NiIs... userId: 123456789 openid: oABC123... appid: 1104466820 version: 8.94.0417 Content-Type: application/json { "adcode": "310000", // 地区代码:上海 "roleId": "116581781", // 角色ID "areaId": "3", // 大区:3=微信安卓 "heroId": "146", // 英雄ID:146=露娜 "recommendPrivacy": 0 } # python请求头 DEFAULT_HEADERS = { "Content-Type": "application/json", "Accept": "*/*", "Host": "kohcamp.qq.com", "Connection": "keep-alive", "User-Agent": ( "Mozilla/5.0 (Linux; Android 14; PLR110 Build/UKQ1.230917.001; wv) " "AppleWebKit/537.36 (KHTML, like Gecko) Version/4.0 Chrome/121.0.6167.178 Mobile Safari/537.36" ), }
  • 关键参数说明
参数位置说明
tokenHeader营地登录态令牌
userIdHeader营地用户ID
openidHeader微信/QQ OpenID
roleIdBody游戏角色ID
areaIdBody大区代码:1=QQ安卓, 2=iOS, 3=微信安卓, 4=微信iOS
heroIdBody英雄ID,可从 herolist.json 获取
adcodeBody行政区划代码:100000=全国, 310000=上海等


编写一点python代码,战力数据查询请求成功,舒服了。


八、完整技术总结

8.1 问题解决路径

直接抓包失败(CONNECT 隧道) ↓ 识别 SSL Pinning 问题 ↓ 选择 Frida 动态插桩方案 ↓ 搭建 Frida 环境(frida-server + 客户端) ↓ 编写 Hook 脚本(绕过证书校验) ↓ Attach 到目标进程 ↓ 配合 Fiddler 系统证书 ↓ 使用HttpCanary抓包获取 ↓ 成功获取明文接口参数

8.2 核心知识点

  1. SSL Pinning:App 将服务器证书指纹硬编码,防止中间人攻击
  2. Frida 动态插桩:运行时修改内存中的方法实现,无需修改 APK
  3. TrustManagerImpl:Android 底层证书链验证核心类
  4. OkHttp CertificatePinner:应用层额外的证书指纹校验

8.3 注意事项

  • 法律合规:仅供学习研究,勿用于商业或恶意用途
  • 账号安全:token 等凭证有有效期,勿泄露
  • 请求频率:避免高频调用,防止被封
  • 接口变动:官方可能随时更新接口,需持续关注

九、参考资源

  • Frida 官方文档
  • OkHttp SSL 文档
  • Android TrustManager 源码
  • SSL Pinning 绕过技术总结

结语:这次探索从抓包失败到深入理解 SSL Pinning 机制,再到掌握 Frida 动态插桩技术,收获颇丰。移动安全领域还有很多值得深挖的方向,保持好奇心,持续学习。

有了战力数据,后面我们就可以做很多的事情了,比如战区修改,推荐合适的战区,分析那个战区容易上榜等,具体的开发见后续文章,创作不易,点赞收藏支持一下吧~

版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/5/7 6:56:29

从‘三个枪手’到产品经理决策:博弈论如何帮你避开需求评审的坑

博弈论实战&#xff1a;产品经理如何用"三个枪手"思维打赢需求评审战 会议室里弥漫着无形的硝烟——这已经是本周第三次需求评审会陷入僵局。技术负责人坚持认为新功能架构不合理&#xff0c;业务方拍着桌子强调"这是客户刚需"&#xff0c;而你作为产品经理…

作者头像 李华
网站建设 2026/5/7 6:52:09

个人工具箱项目解析:从自动化脚本到高效开发环境搭建

1. 项目概述与核心价值最近在整理个人自动化工作流时&#xff0c;发现一个挺有意思的GitHub仓库&#xff1a;hoochanlon/hamuleite。乍一看这个项目名&#xff0c;可能有点摸不着头脑&#xff0c;但点进去你会发现&#xff0c;这其实是一个围绕“哈姆雷特”&#xff08;Hamlet&…

作者头像 李华
网站建设 2026/5/7 6:51:47

JxBrowser 9.0.1 版本发布啦!

升级了 Compose 和 Kotlin 的最低版本要求Chromium 147.0.7727.138 &#x1f517; 了解更多。 &#x1f193; 30 天免费试用。

作者头像 李华
网站建设 2026/5/7 6:43:31

基于神经辐射场的三维场景实时重建与渲染,从像素到无限空间:基于神经辐射场的三维场景实时重建与渲染完全指南

目录 第一章:重新认识场景表示——为什么要告别网格和点云? 1.1 传统方法的困境 1.2 神经辐射场的基本思想 1.3 从离线到实时:技术演进之路 第二章:系统架构——搭建实时NeRF渲染管线 2.1 整体设计 2.2 环境配置 2.3 数据采集与预处理 第三章:实现实时神经辐射场…

作者头像 李华