1. 环境准备:VMOS内的调试环境搭建
1.1 为什么先搭环境,而不是先装工具
很多人拿到这套组合的第一反应是“我电脑上已经有Fiddler和Burp了,直接开始抓不就行了”。真上手你会发现问题全在手机端:目标APP的通讯不走系统代理、证书校验直接拒绝中间人、客户端检测Root和虚拟机直接闪退,这三个问题任何一个都能让抓包计划泡汤。所以我建议所有第一次接触这套流程的朋友,把VMOS环境搭建当成整个项目的第一个里程碑,而不是临时补一步。
VMOS是一个安卓虚拟化方案,它不依赖系统级root,直接在应用层跑一个完整的安卓子系统。对我们的调试场景来说,它有两个特别值钱的特点:一是你可以随意替换ROM包,想要内置root、内置Xposed框架的版本都有现成的可用;二是虚拟机和宿主机共享WiFi网络,Fiddler和Burp只需要监听电脑本机端口,VMOS里的APP就能通过网络把流量送过来。相比用真机去折腾root和证书,这样可以把风险集中在虚拟环境里,宿主机完全不受影响。
1.2 VMOS版本、ROM包与基础设置
我在实操中推荐使用VMOS Pro版本,支持手动添加ROM包,自由度更高。激活方式上,如果手机本身已经root,可以直接授权;如果没有root,它会通过激活器等方式来运行,具体看版本说明。需要注意的是,不同手机型号对VMOS Pro的适配有差异,个别机型的虚拟化权限受限,运行起来会提示需手动开启“允许创建虚拟机”之类的开关,进系统设置里找一下VMOS的辅助权限就行。
ROM包的选择很关键。做抓包调试,优先选自带Root和Xposed的版本,省去自己刷的麻烦。我用的比较多的是一个安卓9的精简包,默认开启Root权限,内置了几款常用工具,包括终端模拟器和Xposed Installer,基本能满足调试需求。装上之后进设置,把分辨率、内存都调高一点,因为后续要同时跑Fiddler的证书安装、Xposed模块注入这些操作,内存太抠会频繁卡顿。
网络设置是另一个容易踩坑的点。VMOS默认的“NAT模式”对抓包是友好的,因为它是通过宿主机的网络出口访问外部,代理指到电脑IP就能跟上。但千万不要打开“Root权限下的全局透明代理”之类的选项,那会改变数据流路径,导致我们在电脑上监听不到请求。
1.3 把目标APP和调试工具放进同一个虚拟网络
完成基础配置后,你需要把两个重要的东西装到VMOS里:一个是目标APP,另一个是证书安装工具。目标APP直接从应用商店或者APK安装包拖进去即可。因为VMOS是独立的系统环境,宿主机和虚拟机的APP数据完全隔离,所以不必担心和其他已登录账号冲突。
证书部分,我一般直接在VMOS里用浏览器下载Fiddler的证书生成页面(http://你的电脑IP:8888),前提是VMOS系统里能访问到这个地址,这也就要求电脑端Fiddler必须先启动监听。下载后通过设置里的安全选项安装到“用户凭据”,很多旧版安卓ROM没有Android 7以上的用户证书隔离限制,装完就能解密HTTPS流量。如果你用的是Android 7+的精简包,还要多做一步:把用户证书转换成系统证书。
转换证书有个比较实用的方法:把下载来的cer证书通过OpenSSL转成PEM格式,再用openssl x509 -inform PEM -subject_hash_old -in yourcert.pem算出hash值,重命名成“[hash].0”然后放到系统证书目录/system/etc/security/cacerts。很多现成的教程会直接给一条命令搞定,但说实话在虚拟机里操作挂载读写,不如直接用支持系统证书安装的定制ROM包方便。如果你手头的ROM包不支持,就用下面这种方式试一遍,成功率很高。
bash复制# 先进入VMOS内部终端,或者通过adb连接
# 将证书文件从sdcard复制到临时目录
cp /sdcard/Download/FiddlerRoot.cer /data/local/tmp/cert.cer
# 计算证书的hash值
openssl x509 -inform PEM -subject_hash_old -in /data/local/tmp/cert.cer
# 假设输出为 3adf3456,则重命名证书
mv /data/local/tmp/cert.cer /data/local/tmp/3adf3456.0
# 挂载系统分区为可读写(需要root)
mount -o rw,remount /system
# 复制到系统证书目录
cp /data/local/tmp/3adf3456.0 /system/etc/security/cacerts/
# 修正权限
chmod 644 /system/etc/security/cacerts/3adf3456.0
# 重新挂载为只读
mount -o ro,remount /system
# 重启VMOS内的安卓系统,让证书生效
reboot
这套操作不是每次都要做,做一次能管很久。如果你发现证书明明装了,但Fiddler解密出来的还是“CONNECT隧道”,优先检查这一步骤有没有完成。
需要模型API调用? 免费领10W Token,多模型网关一键接入 Claude、DeepSeek 等主流模型。
2. Fiddler抓包配置详解
2.1 监听端口与远程连接的启用
Fiddler作为这套链路的前端入口,它的任务是把来自VMOS的所有HTTP/HTTPS流量先接住,再决定是直接解密分析,还是把流量原样或者改写后转发给Burp。默认情况下,Fiddler只监听本机回环地址,也就是127.0.0.1:8888,这样宿主机自己的进程能走代理,但VMOS的流量过不来。所以第一步必须打开“允许远程计算机连接”。
具体操作路径:菜单栏Tools -> Options -> Connections,勾选“Allow remote computers to connect”。如果端口8888被占用,改成其他端口也行,但后面的VMOS代理设置、Burp上游转发配置都要同步改。端口我建议固定下来,最好写在一个笔记里,后面排查问题会省很多时间。
启用远程连接后,Windows防火墙大概率会弹窗,这时候需要手动允许Fiddler通过专用网络。很多人在这里被卡住,现象是VMOS里访问不到电脑IP的8888端口,Fiddler日志里也不见任何请求。这时候在宿主机上用netstat -ano | findstr 8888看一下端口监听状态,如果监听地址是0.0.0.0:8888说明配置生效,如果只有127.0.0.1:8888,那就是Fiddler没真正打开远程监听,需要重启Fiddler再试。
2.2 证书安装:模拟器与真机的差异
Fiddler抓HTTPS的核心原理是中间人解密,客户端和服务器之间原本加密的TLS连接,被Fiddler拆成两段:客户端信任Fiddler的根证书,Fiddler再和服务器建立真正的TLS连接。这样做导致了一个前提条件——客户端必须信任Fiddler的CA证书。
真机上安装证书要过CD锁屏PIN/密码,VMOS里则简单得多。最常见的方式是VMOS浏览器访问http://<电脑IP>:8888,点击页面顶部的“FiddlerRoot certificate”链接下载证书文件。下载完成后进VMOS设置搜索“证书”或“加密与凭据”,从存储设备安装证书。这里要特别提醒:如果你装完证书后Fiddler里依然看到大量隧道CONNECT记录,且无法解密内容,十有八九是证书只装成了“用户凭据”,而Android 7以上默认不信用户凭据。此时按1.3里的方式转成系统证书,或者直接找支持系统证书的ROM包。
还有一个小细节:VMOS里的应用如果使用了独立的网络栈,比如一些即时通讯和音视频类APP,它们可能不走系统代理,一样抓不到。遇到这种情况要用到后面第5章说到的强制转发方案。
2.3 过滤器、快捷键与弱网模拟
Fiddler的界面初看并不友好,左边列表密密麻麻全是会话,不设置过滤器等于大海捞针。我个人的习惯是在Filters页勾选“Use Filters”,然后按Host过滤目标域名,比如填example.com或者关键字api,这样列表里只保留目标APP的请求。生产环境里也可以按进程过滤,勾选“Show only traffic from”选中目标进程,效果更好。
快捷键方面有几个高频操作必须记住:
- Ctrl+X是清空当前所有会话,每次开始一轮新测试任务前先清屏,避免干扰。
- Enter键查看选中会话的Inspectors面板,里面能看到请求头、响应头、Cookie、JSON体。
- Shift+Delete直接删除选中会话,比鼠标右键快很多。
弱网测试是Fiddler的另一个硬功能,在做APP体验优化时特别有用。菜单Rules -> Performance -> Simulate Modems Speeds,开启后Fiddler会给所有流量加上网络延迟和低带宽。默认参数是2G网络速度,想自定义的话在FiddlerScript里修改SimulateModem函数下的延迟数值。我常用的配置是延迟300ms、带宽300kbps,模拟弱网环境下APP的反应。做的时候要记得给Burp保留转发通道,因为弱网模拟会影响整条链路,如果Fiddler后面还挂着Burp,两段转发的延迟叠在一起,数据会比真实弱网更极端。
2.4 Fiddler与宿主机代理冲突问题
Windows系统如果设置了全局代理,Fiddler的代理监听到的流量会非常杂乱,包括系统自带应用、后台更新的流量全进来了。排查问题时很难聚焦到目标APP。我的建议是抓包期间关掉其他可能发起网络请求的软件,或者在Fiddler的Host过滤器里只保留目标域名。另一个常见的坑是开着其他代理工具再启动Fiddler,两者抢同一个端口或者流量互相转发,导致抓包链路混乱,表现为Fiddler页面能打开,但VMOS完全连不上。这个我踩过不止一次,后来养成习惯,抓包前先检查电脑端是否有进程占用了8888端口,再用浏览器访问http://127.0.0.1:8888自测一下Fiddler是否正常响应。
3. Burp Suite接入:形成双代理分析链路
3.1 为什么要加一层Burp,Fiddler不够用吗
很多人问,Fiddler已经把HTTPS解密了,为什么还要接Burp?直接答案就是Burp在请求分析和改包这两个维度上比Fiddler专业太多。Fiddler更像“交通警察”,负责站在路边看清每辆车长什么样、开到哪里去,但你要让某辆车改道或者拍下车牌,也能做到,只是操作不够顺手。Burp则是“车辆检测工位”,你能把请求拖进来任意改动,转发、重放、对比响应,还能把多个请求连成一个测试流程,这对分析APP端的签名算法、参数校验逻辑来说价值极大。
实际项目里,我把两条路都会走一遍。第一步用Fiddler全量流量观察,找到目标请求后,通过Burp的上游代理功能把请求转到Burp里进行深度测试。比如想测试一个登录接口的密码加密参数是否可被篡改、是否缺少时间戳校验,直接在Burp的Repeater里改参数重放,比在Fiddler里改完还要重新触发APP操作高效得多。
3.2 配置上游代理:让Fiddler把流量转发给Burp
技术上实现“Fiddler + Burp”协同很简单。Burp默认监听127.0.0.1:8080,Fiddler要做的是把所有捕捉到的流量,原封不动或者有选择地转发到这个端口。具体配置:
打开Fiddler菜单Tools -> Options -> Gateway,在“Upstream Proxy”填上:服务器127.0.0.1,端口8080。保存后,从VMOS发来的每一个请求都会先被Fiddler解密,再由Fiddler作为客户端重新请求Burp,Burp再把流量发往最终服务器。需要注意,这里Fiddler和Burp之间的通信仍然是明文HTTP,因为它们在同一个电脑上。Burp如果要解密HTTPS请求的明文内容,需要先导入Fiddler的CA证书,或者在Burp里配置一个“代理监听”项,用于接收Fiddler转发的流量并显示明文数据。
实际操作中,我觉得上游代理的转发范围要单独筛选,因为有些CDN服务器的流量没必要进Burp,浪费资源还拖慢速度。可以通过FiddlerScript在OnBeforeRequest里写判断逻辑,只对特定域名走代理,其余直接放行。代码如下,供参考:
javascript复制if (oSession.HostnameIs("api.targetapp.com")) {
oSession["X-Override-Proxy"] = "127.0.0.1:8080";
}
当然,更省事的方式是直接全部转发,Burp支持多线程处理,平时测试几千个请求也没压力。我一般只在性能测试的时候才做针对性过滤,日常分析全量转发就够了。
3.3 Burp端证书准备与常见报错
Burp作为中间人代理同样需要证书。如果只在自己的电脑上调试,可以直接用Burp的默认CA证书。但我们的链路里,Fiddler已经和APP之间建立了TLS连接,此时Burp面对的是来自Fiddler的明文HTTP流量,所以Burp的证书仅用于“Fiddler和Burp之间的TLS连接”(如果Fiddler用HTTP转发则没有这一步)。如果配置上游代理时Fiddler和Burp走的是HTTP明文,Burp只需要正常开启8080监听即可。
有个很典型的报错是“Burp received an unknown host or certificate”或者“Connection reset”。这种问题多半来自Burp的监听设置。打开Burp的Proxy Settings,确认监听地址是127.0.0.1:8080,并且勾选了“Support invisible proxying”。否则Fiddler转发过来的请求没有经过正常的代理握手,Burp会直接拒绝。另一个常见问题是Burp的HTTPS拦截和Fiddler解密出来的HTTPS明文中转配置不匹配,导致响应乱码。解决方式是在Burp的TLS Pass Through选项里把所有目标域名临时加为“Pass Through”,先确认数据通路正常,再逐步放开拦截,定位问题。
3.4 双工具协作时如何区分流量归属
链路通了以后,最大的麻烦是分不清某一个请求到底是哪个APP、哪个页面发出来的。Fiddler和Burp各自有自己的会话列表,但它们都不认识APP的页面逻辑。我自己的办法是在Fiddler里先对流量做一层“标注”:利用FiddlerScript分析请求的Referer头或者User-Agent,把当前所在页面信息写到会话的备注列,同步传给Burp的请求头自定义字段里。这样Burp看到的不只是裸请求,还能知道它是从哪一个功能点触发的。
javascript复制if (oSession.HostnameIs("api.targetapp.com")) {
var referer = oSession.RequestHeaders["Referer"];
if (referer) {
oSession["uiColor"] = "blue";
oSession["uiText"] = "Page: " + referer;
}
// 传递自定义头给下游代理
oSession.RequestHeaders.Add("X-Debug-Source-Page", referer);
}
这条脚本带来的收益在写自动化测试脚本时特别明显,因为Burp记录下来的请求都会带上这个来源头,后续写断言、做参数提取都能对应到具体页面。如果你只是偶尔抓包,不搞自动化,也可以省掉这段,直接用Burp的Host过滤和搜索功能定位,效果也不差。
4. 实战剖析:一次完整登录接口的抓包与改包测试
4.1 从VMOS启动APP到流量出现在Burp的全过程
下面用一个实际例子把整条链路串起来。假设目标APP叫“示例商城”,它的登录接口是https://api.example-shop.com/app/v1/user/login,入口参数是用户名、密码、设备指纹和签名。
第一步,确认Fiddler和Burp都已启动,Fiddler监听8888,Burp监听8080,上游代理配置生效。第二步,在VMOS里设置WiFi代理,指向电脑的局域网IP和8888端口。第三步,启动“示例商城”,进入登录页面,输入一个测试账号,点登录。
正常流程下,Fiddler会话列表会立刻出现大量请求,通绿或通蓝。按域名过滤出api.example-shop.com,会看到POST /app/v1/user/login的请求。点击它,在Inspectors面板看到请求头里有一串自定义Header,比如X-Signature,请求体是一串JSON,密码字段是加密后的密文。此时Fiddler已经可以分析字段了,但我们还要再打一层:确认Burp里也出现了同样的请求,并且请求体内容一致。
如果Burp里没有出现,优先排查上游代理配置是否正确,检查Fiddler右侧的会话详情里是否有超时记录。如果Burp里有请求,但响应时间很长,考虑是不是因为Burp在上游有额外的代理设置,或者目标服务器对请求头里的自定头敏感,拒绝的同时带了个大错误页,导致传输体量大。这个在后续优化中可以细调。
4.2 修改请求与重放:用Burp验证参数逻辑
拿到登录请求后,我通常先在Burp的Repeater面板里复制一份,开始做参数篡改测试。第一轮测试是替换法:把请求体里的password字段改成一组随机字符串,观察响应是否依然返回成功。如果返回成功,说明后端没有校验密码字段的真实性,这是一个典型的越权风险提示,需要由开发修复。第二轮测试是删除法:把签名头X-Signature删掉后重放,如果服务端仍返回业务上的成功代码,说明签名校验存在缺口。
操控方式很简单:在Burp的HTTP History里右键请求,选择“Send to Repeater”,左侧是请求编辑区,右侧是响应区。改完参数后点“Send”,响应内容会直接刷新。这里的核心观察点是状态码、响应体的code字段以及服务器耗时。我通常会同时打开Fiddler,看看重放请求时Fiddler是否同步转发,确认Burp没有绕开Fiddler单独发包。
小提示:Burp的重放是独立的TCP连接,不经过Fiddler的UI层流转,所以Fiddler列表里不会显示Repeater产生的请求。如果你需要让团队看到这轮重放流量,可以在Burp里用右键菜单“Copy as curl command”,把请求导出后用其他工具执行,这样可以保证流量经过Fiddler代理。
4.3 绕过证书固定:从Xposed到Frida的取舍
很多APP在客户端做了证书固定(Certificate Pinning),也就是APP内置了服务器的证书或公钥。开启Pinning后,即使VMOS系统信任了Fiddler的CA证书,请求也会被客户端拦截并报错,表现就是登录页面转圈、接口返回“网络不给力”。要绕过Pinning,我们得在客户端层面动手。
最传统的方式是Xposed模块,典型工具是“JustTrustMe”。在VMOS里启动Xposed Installer,安装JustTrustMe模块,勾选后重启虚拟机系统。它的原理是Hook掉Android系统里校验证书的方法,让客户端默认信任所有证书。这个方案在旧版Android和部分老APP上很有效。
但近几年的APP普遍使用了更高版本的TLS栈,比如OkHttp配合自签名扩展,或用到Android Network Security Config。JustTrustMe的Hook点可能失效。这时就要上Frida。Frida是一个动态插桩框架,通过USB或网络连接,把JavaScript脚本注入到目标进程里执行。它能做的不仅限于绕过证书校验,还可以直接调用APP内部方法查看参数。
在VMOS里跑Frida有个额外好处:虚拟机的root权限能直接绑定到调试端口,不用像真机那样敲一堆adb命令。实际操作时,我在宿主机上装Frida客户端,VMOS里跑frida-server(arm64版本的),然后通过adb forward tcp:27042 tcp:27042做转发,宿主机就能对VMOS里的进程进行注入。这只是其中一种做法,如果你不想开adb,也可以通过frida-ps -H 127.0.0.1:27042来连接远程frida-server。
至于具体绕过脚本,一个简单的SSL unpinning脚本在GitHub上搜“frida ssl unpinning example”能找到很多,都是几十行JavaScript,原理多是Hook SSL_CTX_set_custom_verify或者OkHttp的CertificatePinner类。这里不贴长代码了,因为不同APP适配差异很大,核心思路是找到校验点,然后让它“返回空”或“返回true”。
4.4 参数加密与签名算法的初步判断
拿到登录请求后,看到密码是一串密文,签名是另一个字符串,第一反应不应该是头大,而是先判断加密算法属于哪一类。看密文的长度可以估算:如果长度是32位,大概率是MD5;64位是SHA-256或HmacSHA256;128位或者更长可能是AES的密文加上Base64编码。签名通常是把多个参数按一定顺序拼接后做摘要,比如md5(account + timestamp + key)。
如果只是想确认参数是否被篡改,可以先做“黑盒观察”:修改请求体里的时间戳字段,看签名校验是否拦截。若不拦截,说明签名没有覆盖时间戳;若拦截,说明服务端重新计算了签名并比对。接下来可以尝试把响应中服务端返回的时间戳与请求时间戳做对比,判断是否允许时间偏差。掌握了这些行为,后续再让开发给出具体的签名实现,或者决定是否深入逆向客户端代码(这属于更复杂的话题,网上有专门教程,这里不做展开)。
5. 常见问题与排查技巧实录
5.1 证书不生效:为什么装了CA还是“证书错误”
这个问题排在所有抓包问题之首。典型表现是:VMOS浏览器能下载证书,Fiddler也显示连接正常,但APP内请求要么超时,要么直接报“证书验证失败”。原因多数是“用户证书”与“系统证书”的信任范围不同。Android 7以上,APP默认不信任用户CA证书,只有系统证书才会被自动信任。解决方式之前在1.3已经写过,这里再补充一个快速验证方法:在VMOS里打开浏览器访问https://httpbin.org/get,如果浏览器提示证书错误,那Fiddler解密链路没走通;如果浏览器能正常打开,但APP报错,基本就是APP自身做了SSL Pinning或者Network Security Config限制了信任范围。
5.2 抓不到流量:代理模式的局限与强制转发
VMOS里设置WiFi代理后,多数APP的HTTP请求都会被Fiddler截获。但有三种情况例外:第一,APP使用非HTTP协议,比如自定义TCP、UDP长连接;第二,APP内嵌了Socket层,不走系统API;第三,APP自己实现了代理检测和绕过。第一种情况需要换Wireshark做底层抓包,第二种可以用VMOS的Root权限配合iptables强制转发所有出网流量到Fiddler端口。
bash复制# 在VMOS的终端中执行,获得root后
# 将所有TCP流量重定向到Fiddler监听地址
iptables -t nat -A OUTPUT -p tcp --dport 80 -j DNAT --to-destination <电脑IP>:8888
iptables -t nat -A OUTPUT -p tcp --dport 443 -j DNAT --to-destination <电脑IP>:8888
我用这个方法解决过好几个不走系统代理的APP,效果很明显。要注意,Fiddler在Receiving模式下需要允许CONNECT隧道,并且证书已经装好,否则重定向之后会直接握手失败。执行iptables后,Fiddler的会话列表会瞬间多出一堆来自VMOS系统组件的流量,所以最好先用Host过滤。
5.3 链路慢或断连:排查顺序建议
慢和断连是双工具协同最闹心的问题。排查顺序我认为应该是:机器性能 → 网络路径 → 工具配置。先看宿主机CPU是否打满,Burp和Fiddler同时跑,开双代理模式对内存和CPU都有压力,8GB内存的电脑会比较吃力。再看VMOS里App访问外网是否本身慢,关掉Fiddler和Burp,直接让App裸连,排除是网络问题还是工具引入的延迟。最后再检查Fiddler的上游代理配置是不是有问题,比如Burp没有正常监听,Fiddler会一直等待上游响应,表现为所有请求在Fiddler里都pending,直到超时。
还有一个小细节:如果Fiddler开启了HTTPS解密,同时Burp也开启TLS拦截,那同一段HTTPS流量会被连续处理两次,CPU消耗翻倍。在没有必要的情况下,可以让Fiddler解密完成后用明文HTTP转发给Burp,Burp不再做TLS解密,只处理业务逻辑。这样既能看清数据,又能减少一半的计算开销。
5.4 常见问题速查表
| 现象 | 可能原因 | 解决方式 |
|---|---|---|
| VMOS无法访问电脑IP:8888 | Fiddler未启用远程连接/防火墙拦截 | 勾选Allow remote computers,允许专用网络访问 |
| 证书在浏览器里被信任,但APP报证书错误 | APP不信任用户证书 / SSL Pinning | 转系统证书;用Frida/Xposed绕过Pinning |
| Fiddler只显示CONNECT隧道 | APP要求TLS直连/未解密 | 检查证书信任;用iptables强制走代理 |
| Burp收不到Fiddler转发的请求 | 上游代理未配置/Burp监听地址不对 | 在Fiddler的Gateway里设置127.0.0.1:8080 |
| Burp收到请求但响应超时 | Burp默认监听不支持隐身代理 | 开启Support invisible proxying |
| Fiddler和Burp都开了,但延迟非常高 | 双重TLS解密+性能瓶颈 | 让Fiddler以明文HTTP转发,Burp不做TLS解密 |
| VMOS里App直接闪退 | 检测到root/虚拟机 | 使用隐藏Root或专门的反检测ROM包 |
这些坑基本都是实际环境里非常低频但是一旦踩上就要耗半天的点,记录在这里,希望你能避开。
6. 从抓包到工程化:进一步提升效率的思路
6.1 把常用配置固化成导出模板
研究过一套抓包链路之后,最该做的是把经验固化成工程产物。比如Fiddler配置,可以通过菜单File → Export Settings把当前的Script、过滤器、代理设置导出成配置文件,下次重装系统导入一下就能用。同理,Burp的项目配置也可以导出。这样一来,换电脑、重装环境时,只需要几分钟就能恢复整套调试环境。
VMOS这边更有价值:做完所有证书安装、模块启用、ROOT配置后,把这个ROM包导出为模板。下次要调试类似需求的APP,直接导入模板再装目标APP,省掉所有基础配置时间。这个习惯在团队协作里收益更高,新同事不会因为环境配置问题耽误一天。
6.2 用命令行和脚本替代手点
Burp支持命令行启动和接口驱动,Fiddler也有FiddlerCore库可以嵌入自己的测试程序。如果只是简单场景,我会用curl模拟Burp导出的请求做回归测试,配合Node.js或Python脚本批量验证参数。写一个简单的Python脚本,读取Burp导出的流量文件,把关键参数替换后逐个重放,比在GUI里手工点击高效一个数量级。
python复制import json
import requests
with open('login_request.json', 'r', encoding='utf-8') as f:
req_data = json.load(f)
url = 'https://api.example-shop.com/app/v1/user/login'
headers = req_data['headers']
body = req_data['body']
for i in range(10):
modified_body = body.replace('"username":"test01"', '"username":"test0{}"'.format(i))
resp = requests.post(url, data=modified_body, headers=headers, verify=False)
print(i, resp.status_code, resp.text[:100])
这种脚本的好处在于,每次APP版本更新,测试脚本还能复用,你不需要同一个接口点十遍登录按钮。
6.3 分析维度的扩展:Wireshark与网络监控
虽然标题里只有三件套,但实际遇到需要看网络底层时,Wireshark还需要补充进来。Fiddler能看到HTTP/HTTPS层,但如果某个APP的连接调试需要分析TCP重传、TLS握手细节、DNS解析耗时,Wireshark提供的信息更有价值。方式是在VMOS里把流量外发前再镜像一份到另一个端口,或者直接在宿主机上监听虚拟网卡流量。这个思路可以作为下一步进阶方向,日常HTTP层调试还是以三件套为主。
有个实用的组合是:Fiddler负责业务接口,Burp负责安全性,Wireshark负责在两者都看不透时做兜底。真正工作了几年的人都知道,工具链重要,但更重要的是自己的分析框架,知道每一步该看什么、排除什么,比熟练点击菜单键有价值得多。我个人经验是,多折腾这几个工具的联动,能帮你慢慢建立起一套“从底层到业务”的流量分析直觉,这对排查线上问题也会很有帮助。
