ARTICLE DETAIL

资讯详情

深耕郑州网站建设与运营推广的一线实战洞察。

Fiddler+夜神模拟器抓包实战:HTTPS解密与SSL Pinning绕过全流程

Fiddler+夜神模拟器抓包实战:HTTPS解密与SSL Pinning绕过全流程 搞移动开发或者做测试的朋友应该都遇到过这种场景联调时对方一口咬定“我这边接口没问题”可你这边就是复现不出来或者线上反馈某个接口数据异常你只能靠猜来定位问题。这种时候一台能稳定抓包的调试环境就是救命稻草。我这几年的习惯方案是 Fiddler 加夜神模拟器再配合 SSL Pinning 绕过基本能覆盖日常调试、接口分析、弱网测试和基础的安全检测需求。网上关于 Fiddler 抓包的教程一抓一大把但大多只讲电脑网页端一落到手机 App 上就各种翻车不是证书装不上就是抓到的全是乱码要么干脆连不上。这篇我把从环境搭建、HTTPS 解密、证书信任到抖音 App 抓包与 SSL Pinning 绕过的完整链路按我实际操作的顺序写出来。适合做客户端开发、接口测试、安全研究的读者参考前提是你抓包的对象是自己参与的项目或已获得授权测试的 App。先说明一点抓包本身是调试手段不是攻击工具。文中涉及抖音 App 抓包演示的是通用技术流程请务必在合规场景下使用。1. 方案选型为什么最后留下的是 Fiddler 和夜神1.1 抓包的核心其实是做“中间人”要理解这套方案先要搞清楚抓包到底在干什么。正常情况下App 发送请求到服务器服务器返回响应双方直接通信。抓包工具干的事是在中间插一个代理把请求拦截下来看一眼内容再转发出去。这个过程叫中间人代理英文是 Man-in-the-Middle。这个逻辑跟寄快递很像。你正常寄件快递员把包裹从 A 送到 B。现在快递点增加了一个“安检员”所有包裹必须经过他检查才能继续送。安检员把包裹拆开看里面装了什么再原样封装发出去。抓到包的内容就是你在“拆开看”这个环节看到的东西。所以抓包工具的核心能力就两个能截住流量能解开内容。截流量靠代理设置解内容靠 HTTPS 证书。后面所有配置都是围着这两点转。1.2 工具横向对比Fiddler、Charles、Wireshark、Reqable很多人一上来就问哪个工具最好用其实没有绝对答案得看场景。我用过的几款工具各有脾气。我自己电脑上 Fiddler Classic 和 Charles 都装过Wireshark 也会用一点最近还试过 Reqable。横向对比下来大概是这样的工具平台上手难度擅长场景明显短板Fiddler ClassicWindows中等HTTP/HTTPS 代理抓包、弱网模拟、请求断点修改只能装 Windows界面老旧不支持 HTTP/2 高级分析CharlesWindows/Mac/Linux中等手机抓包、弱网模拟、HTTPS 解密收费不便宜破解版满天飞但不建议用WiresharkWindows/Mac/Linux较高底层报文分析、TCP/UDP/DNS 等协议级排查不解析 HTTPS 内容看应用层数据很费劲ReqableWindows/Mac/Linux/移动端低新风格 UI、API 调试和抓包二合一生态不如老牌工具稳部分功能需要付费如果你在 Windows 上优先 Fiddler免费而且文档多、坑少。如果主力机是 MacCharles 或者 Fiddler Everywhere 更顺。Wireshark 属于另一个维度的工具——它能看网络包但不能直接帮你解出 App 的 HTTPS 明文内容不适合做应用层调试。抓 App 接口用 Fiddler/Charles 这类代理型工具才是正路。1.3 模拟器为什么比真机更适合新手抓手机 App 可以用真机也可以用模拟器。我的建议是学这套流程的人优先用模拟器原因有三个。第一模拟器默认 root改系统文件方便。SSL Pinning 绕过、把证书移动进系统信任区这些操作都需要 root 权限。真机要么得解锁 bootloader要么得用各种工具折腾新手很容易卡在第一关。第二模拟器可以随时拍快照。抓包配置错了、证书装坏了直接回滚快照一分钟恢复干净环境不用像真机那样反复刷机。第三夜神模拟器和 Fiddler 的组合在社区里被验证过太多次了问题好搜、答案多。你碰到的大部分坑别人都踩过照着解决方案抄就行。用真机的好处是网络环境更真实部分 App 在模拟器里会有风控或功能限制。但作为学习路径我强烈建议先用模拟器把整个流程跑通再考虑真机。2. 环境搭建Fiddler 和夜神模拟器的配置细节2.1 版本怎么选下载后要马上做的三件事Fiddler 现在有 Classic、Everywhere 两个主流版本。Classic 是免费的只支持 Windows功能上对付抓包调试完全够用。Everywhere 是跨平台付费产品界面现代化支持团队协作功能但很多基础能力跟 Classic 一样。我的建议很简单Windows 用户先下载 Fiddler Classic 就够了别一上来折腾更复杂的版本。下载安装时有三件事容易被忽略第一安装路径不要带中文否则后续处理证书、配置脚本时容易出幺蛾子。第二安装完先打开一次确认主界面能正常启动能看到左下角有“Capturing”字样这说明代理功能还没启用稍后再开。第三Fiddler 的默认监听端口是 8888如果这个端口被其他程序占了可以在 Tools Options Connections 里改建议改成 8888 之外不太容易被占的端口比如 8866后面所有代理配置都要跟着改。2.2 开启 HTTPS 解密这一步错了后面全是白搭Fiddler 默认只能抓 HTTP 明文流量现在 App 基本都是 HTTPS所以必须先开启 HTTPS 解密。操作路径是Tools Options HTTPS勾选 Capture HTTPS CONNECTs 和 Decrypt HTTPS traffic。第一次勾选时Fiddler 会提示你安装它自己的根证书。这里有一个非常关键的动作勾选后点右边的 Actions选择 Export Root Certificate to Desktop把 Fiddler 的根证书导出到桌面。这步很多人不做后面模拟器里要装证书时找不到文件又得回头重新导。发行根证书后Fiddler 自己会信任这张证书。接下来要做的是把这张根证书安装到模拟器里让模拟器里跑的 App 也信任它这样才能解开 HTTPS 密文。2.3 夜神模拟器网络设置代理别搞错夜神模拟器下载安装后先做两件事把模拟器的 Android 版本确认一下并打开 root 权限。夜神默认就带 root在模拟器右上角设置里能开关确认开启状态就行。代理设置有两种方式我推荐先用手动方式这样直观后面排查问题也方便。第一步Windows 上打开命令行输入 ipconfig找到本机在局域网里的 IPv4 地址一般是 192.168.x.x记下来。第二步打开夜神模拟器里的“设置”进入 WLAN长按当前连接的 WiFi选择“修改网络”展开“高级选项”把“代理”设为手动主机名填刚才记下的电脑局域网 IP端口填 Fiddler 的监听端口默认 8888保存后重连一下 WiFi。如果你不想在模拟器 UI 里一步步点也可以用 adb 命令直接设置代理adb shell settings put global http_proxy 192.168.x.x:8888想取消代理用adb shell settings put global http_proxy :0这里提醒一句夜神模拟器的 NAT 模式下模拟器访问宿主机电脑的地址有时候是 10.0.2.2但代理设置里别用它直接用电脑的局域网 IP 更稳否则可能出现能开网页但 Fiddler 收不到流量。3. 证书问题模拟器抓包最容易卡死的地方3.1 Android 7 之后“用户证书失效”是怎么回事不少人在网上跟着教程把 Fiddler 根证书导出、传到模拟器里安装显示安装成功结果打开抖音或者 Chrome还是提示“您的连接不是私密连接”Fiddler 里也看不到 HTTPS 请求的解密内容。这个坑的根源在 Android 7.0API 24开始的一项安全策略调整系统默认不再信任用户手动安装的 CA 证书。也就是说你装进去的那张 Fiddler 根证书对大部分面向 Android 7 的 App 来说等于没装。为什么Android 把证书分成“系统证书”和“用户证书”两个区域。你自己安装的证书都进用户区系统启动时就内置的证书在系统区。Android 7 之前App 默认同时信任两个区。Android 7 之后App 的 targetSdkVersion 一旦大于等于 24默认只信任系统区的证书。抖音这种大厂 App最低支持的 Android 版本都新款系统自然受这个策略影响。解决办法就是把 Fiddler 根证书从用户区挪进系统区让 App 认为它是“系统证书”。3.2 把证书装进系统信任区的完整操作这一步是保姆级教程的核心之一我按自己执行的顺序写。工具准备Windows 上准备一个能跑 openssl 命令的终端。如果你没装过 Git、OpenSSL 等工具直接去官网装一个 OpenSSL 命令行版或者装 Git for Windows里面自带 openssl。第一步把桌面上导出的 FiddlerRoot.cer 放到一个干净目录比如 C:\fiddler_cert。第二步把 DER 格式的 cer 转换成 PEM 格式openssl x509 -inform der -in FiddlerRoot.cer -out FiddlerRoot.pem第三步查看证书的 subject_hash_old这个值用来生成系统证书的文件名openssl x509 -inform PEM -subject_hash_old -in FiddlerRoot.pem | head -1我这边执行完输出的是 269953fb不同版本 Fiddler 生成的证书 hash 可能不一样以你实际输出为准。第四步把生成的文件重命名为 hash 值加 .0 后缀比如 269953fb.0copy FiddlerRoot.pem 269953fb.0第五步把证书推进模拟器系统目录。先让 adb 以 root 权限运行然后重新挂载系统分区adb root adb remount adb push 269953fb.0 /system/etc/security/cacerts/ adb shell chmod 644 /system/etc/security/cacerts/269953fb.0推完之后最好重启一下模拟器让系统重新扫描证书。如果 adb 提示 remount 失败大概率是模拟器没开 root 或者系统分区保护开启回到夜神设置里打开 root 权限再试一次。3.3 验证证书是否真正生效证书装完别急着开抖音先验证一下。在模拟器里打开浏览器访问 https://www.baidu.com。如果地址栏正常显示没有安全警告说明系统已经信任了 Fiddler 根证书。这个时候切回电脑上的 Fiddler左侧会话列表里就能看到大量带锁图标的 HTTPS 请求点任意一条右侧 Inspectors 里能看到“TextView”或“WebForms”标签页里面就是解密后的明文内容。如果你访问百度都报证书错误那不用往下看了先把证书这关过了。九成的抓包失败都倒在证书上。4. 抖音 App 抓包实操从启动到看到接口数据4.1 打开抖音前的最后检查清单环境配置好以后开始抓真实 App。在模拟器里打开抖音前过一遍这四项Fiddler 左下角 Capturing 是否开启没开启的话模拟器流量过了代理也不会被记录。Fiddler 的 HTTPS 解密是否勾选前面已配置过再确认一次即可。模拟器 WiFi 代理是否还在重启模拟器后WiFi 代理设置可能会失效重新检查。Fiddler 根证书是否在系统证书目录用 adb shell ls /system/etc/security/cacerts/ 看一眼。这四项都确认没问题就在模拟器里打开抖音。4.2 Fiddler 会话列表里到底多了哪些东西打开抖音后Fiddler 左侧的会话列表会刷出一大片请求。刚开始别慌筛选一下就能快速定位接口。在 Fiddler 左下角的过滤器里选择“Hosts”填入抖音相关的域名常见的有*.douyin.com*.amemv.com*.byteimg.com*.ixigua.com抖音的接口域名会动态变化过滤器用通配符写宽一点比如 douyin.com 和 amemv.com基本能覆盖大部分核心请求。刷几下视频Fiddler 里就会出现大量 JSON 接口。点开一个 data 开头的请求右侧 Inspectors 的返回答应里能看到完整的 JSON 结构里面包括视频列表、用户信息、推荐流参数等数据。这里我多说一句抖音 App 的请求里有很明显的风控和签名机制例如请求头里的 X-Gorgon、X-Khronos以及 URL 参数里的 msToken、ttwid 这些字段。它们的作用是服务端校验客户端身份和请求合法性。对开发者来说理解这些参数可以帮你判断服务端做了哪些校验但不要去尝试伪造或破解它们这是服务端安全体系的一部分涉及风控对抗不在调试技术讨论范围内。4.3 抓包时最常见的“数据是空的”现象很多人在这一步发现抖音确实有大量请求但点开请求内容Response 是空的或者请求是红色带锁图标双击也看不到明文。出现这种现象基本可以判断是两类原因。第一类是 HTTPS 证书没被 App 信任App 在建立 TLS 连接时校验证书失败连接中断Fiddler 自然拿不到内容。第二类是 App 实现了 SSL Pinning也就是证书固定即使系统信任了 Fiddler 的根证书App 也要求服务端证书必须匹配它内置的那张否则直接断开连接。抖音这种体量的 App两类问题都占。第二类 SSL Pinning 不是一个开关能关掉的它需要专门绕过这就引出下一章。5. SSL Pinning 绕过实战原理到动手5.1 SSL Pinning 到底是什么SSL Pinning 翻译过来叫“证书固定”或“公钥固定”。常规 HTTPS 校验客户端只要发现证书链能追溯到系统信任的根证书就放行。SSL Pinning 更强的点是客户端里内置了一个固定的证书指纹或公钥每次连接时拿服务器返回的证书去比对跟内置的不一致直接掐断连接谁劝都没用。理解成小区门禁就很好懂。普通访问是“保安看一眼访客登记的身份证”SSL Pinning 是“除了身份证还得业主提前跟保安说过这个人才放行”。Fiddler 的证书App 从没录入过业主白名单自然进不去。抖音等大厂 App 的高版本普遍启用 SSL Pinning这就是为什么你装好证书依然抓不到明文。5.2 常见的绕过方式对比绕过 SSL Pinning 有几种成熟路线我做个对比方法原理需要的条件难度修改 APK 重打包反编译后删掉/绕过证书校验代码重签安装会反编译能处理签名校验高Xposed 模块如 JustTrustMeHook 掉系统里校验证书的 API模拟器或设备支持 Xposed中Frida Hook运行时动态拦截 Java/native 层校验逻辑模拟器/设备能跑 frida-server中objection基于 Frida 的自动化工具一条命令禁用 pinning能跑 frida-server低对新手来说最友好的是 objection。它把 Frida 的不少常用功能封装成了命令其中 android sslpinning disable 就是用来绕过证书固定的省去自己写 Hook 脚本的麻烦。5.3 Frida objection 实操先说版本匹配这是最容易踩坑的地方。frida 分为电脑端和手机端模拟器端两边的版本必须一致。电脑端安装指令pip install frida-tools objection查看电脑端版本frida --version我这边假设你装的是 15.x 或 16.x。去 frida 官方 GitHub 的 release 页面下载对应版本的 frida-server注意选择架构。夜神模拟器在 x86 架构的电脑上运行Android 是 x86 或 x86_64用 adb 确认adb shell getprop ro.product.cpu.abi看到的输出如果是 x86_64就下 frida-server-版本-android-x86_64.xz 这个包。下载完解压后推送到模拟器授权并启动adb push frida-server /data/local/tmp/ adb shell chmod 755 /data/local/tmp/frida-server adb shell /data/local/tmp/frida-server 注意必须先开启电脑端的 adb 端口转发否则电脑端 Frida 连不上模拟器adb forward tcp:27042 tcp:27042 adb forward tcp:27043 tcp:27043然后验证 Frida 能看到模拟器里的进程frida-ps -U如果能看到进程列表说明 frida-server 和客户端已经连通。接着用 objection 连接抖音进程。抖音的包名是 com.ss.android.ugc.awemeobjection -g com.ss.android.ugc.aweme explore进入 objection 交互后执行android sslpinning disable --quiet看到类似“Pin disabled”的输出说明绕过指令执行成功。退回 objection 命令行按 CtrlD 退出。这里必须提示抖音不同版本的防护强度不同部分新版抖音可能做了反 Frida 检测、native 层自定义校验等加固以上命令不一定总能生效。如果你测试的版本绕不过去那不是教程的问题是对方安全体系升级了需要上更高级的对抗手段这类内容已经不是入门教程范畴。5.4 绕过后怎么验证有没有成功切回 Fiddler把模拟器里抖音进程杀掉重新打开。正常情况是之前红色带锁的请求消失改为绿色锁或者无锁的 HTTPS 请求点开就能看到 JSON 明文接口数据。验证的关键点在于看抖音的核心接口比如推荐流接口Response 里是不是有完整的 JSON 结构。如果能看到说明 SSL Pinning 绕过成功整个抓包链路打通了。如果还是红的继续看下一章的排查方法。6. 常见问题与排查方法6.1 模拟器连不上 Fiddler或上不了网每次搭环境这类问题出现率最高。先确认 Fiddler 的 Listening 端口已经打开。位置在 Tools Options Connections勾上 Allow remote computers to connect这一步在抓模拟器时容易漏。Windows 防火墙拦截也经常导致模拟器连不上电脑。第一次开启 Fiddler 远程连接时Windows 会弹防火墙提示记得选“允许”。如果当时点了取消去“控制面板 Windows Defender 防火墙 允许应用通过防火墙”里面把 Fiddler 相关项全部勾上。模拟器里如果直接网页都打不开先检查 WiFi 代理的 IP 和端口有没有填错。IP 是电脑在局域网里的 IP不是模拟器的 IP端口是 Fiddler 监听端口。改完代理设置后建议在模拟器的浏览器里访问 http://localhost:8888如果能打开 Fiddler 的回显页面说明网络通道已经通了。6.2 证书装好但还是抓不到 HTTPS证书装好但抓不到优先查 App 是否启用了 SSL Pinning。如果不涉及 Pinning 的普通浏览器访问没问题但目标 App 不行大概率就是 Pinning。也有一种比较简单的情况你把证书装到了“用户证书”区而不是“系统证书”区。反复确认证书是不是真的在 /system/etc/security/cacerts/ 目录下并且文件名是 hash.0 格式。还有一个隐蔽因素部分 App 会检测代理设置一旦发现系统设置了代理就不发请求或主动断开。抖音也有类似的风控策略不过在我们模拟器这套配置里不是首要问题。如果你发现绕过 Pinning 后依然抓不到可以考虑试试“透明代理”方案但那是进阶玩法了。6.3 Frida 连不上夜神模拟器Frida 连不上的常见原因有三个。第一版本不一致。电脑端 pip 装的 frida 和模拟器里的 frida-server 版本必须严格一致比如都是 16.0.1否则握手必然失败。统一版本后重新启动 frida-server。第二端口转发没做。夜神模拟器不是标准连接直接用 USB 设备枚举可能识别不到。执行 adb forward tcp:27042 tcp:27042再试 frida-ps -U。第三frida-server 启动后就被杀掉。夜神模拟器的 root 权限没开全或者 frida-server 文件权限不对。重新检查 chmod 755并确认 root 权限开启后再次启动。6.4 夜神模拟器启动后 adb 识别不到设备夜神模拟器的 adb 端口和标准模拟器不一样老版本常用 62001新版本可能不同。可以通过夜神安装目录下的 adb 工具直接连或者执行adb connect 127.0.0.1:62001连不上的时候打开夜神模拟器设置看“调试模式”是否开启然后重新连接。如果换了端口可以用netstat -ano | findstr 模拟器进程pid查实际监听端口。另外提一句如果电脑上同时开了其他安卓模拟器或手机助手可能会抢占 adb 服务导致设备识别冲突。关掉不必要的服务再试。6.5 卸载 Fiddler 后浏览器上不了网不少人卸载 Fiddler 后忘了系统代理还被指向 Fiddler 的端口结果浏览器上不了网。这不算 bug是“系统代理”没有复位。解决方法是打开 Windows 的 Internet 设置进入“连接”选项卡点“局域网设置”把“为 LAN 使用代理服务器”的勾去掉确定保存。以后卸载 Fiddler 前先手动把代理关掉再卸载能省很多麻烦。7. 合规提醒与我的几点经验7.1 什么场景能用什么场景千万别碰写到这里必须说点真心话。抓包和 SSL Pinning 绕过是安全测试和开发调试的基础技能但它们也是双刃剑。套用安全圈那句老话没有授权的渗透就是攻击。你可以拿这套流程调试自己开发的 App、自己公司的产品、自己家的智能设备也可以拿一个测试 App 练手。但没有授权去抓取第三方应用的敏感数据、绕过付费限制、爬取平台数据这些行为本身就游走在灰色或者非法地带平台的风控体系也在不断升级对抗手段。技术文章的价值是帮你搞懂原理和流程而不是给你提供作恶工具。具体到抖音这种拥有成熟风控体系的产品就算你在这里绕过了 SSL Pinning对方还有代理检测、设备指纹、请求签名、频率限制等多层防护。把精力放到这个方向上不划算不如学学通用方法应用到合规测试场景里。7.2 几个让我提升效率的小技巧最后分享几个实操中总结出来的小技巧都是文档里不容易看到的东西。第一Fiddler 的 AutoResponder 可以让请求直接返回本地预设的数据。做接口联调或者模拟异常响应时非常顺手。比如服务器挂了你用 AutoResponder 直接返回一个 mock 的 JSONApp 端的容错逻辑马上就能验证。第二Fiddler 内置了弱网模拟功能。Rules Performance Simulate Modem Speeds勾上以后模拟 2G/3G 的网络速度。做弱网测试或超时处理逻辑验证时比找一台信号差的真机方便得多。第三命令行的抓包方式。如果你对 Fiddler 的图形界面已经熟了可以试试直接用 Fiddler 的命令行参数或者配合外部脚本做批量采集效率更高。但新手阶段先把图形界面用熟练别上来就追求自动化。第四如果你平时用 Flutter Dio 开发抓包时不用额外改代码只要模拟器里配置好代理和证书Dio 的请求会自然走系统代理。但如果发现抓不到优先检查 Dio 是否设置了 ignoreBadCertificate 或自定义 HttpClient 的代理逻辑这两个地方往往会绕过系统代理。这套流程走下来Fiddler 加夜神模拟器加 SSL Pinning 绕过基本就是你日常调试和测试的一把万能钥匙了。第一次搭会有点繁琐但搭好以后就是一套固定流程越用越顺。我个人建议你把证书、代理、frida-server 这些文件专门建个目录存起来下次重装环境十分钟就能全部恢复。
返回列表