Python中手机App抓包流程:使用Fiddler或Charles查找接口,再用mitmproxy提取数据,最后用Appium或AirtestIDE控制吗?
前言
我这边是没办法测试这个流程了,因为我的手机和电脑按照上面这几个软件所写的开端口,手机搞证书搞代理,但是只能抓取到 http 的,https 根本抓不到.
fiddler 根据设置,发现我只有在 pc 端可以看到 https 请求和内容,手机上设置完 网络就出现问题 并且在 fiddler 中发送的 https 请求看不到, http://i2.tiimg.com/691087/985a55c38b750b7e.png
但使用 pc 访问手机版的 V2EX 能看到 https 请求,内容也看得到 http://i2.tiimg.com/691087/7b490d2497620ecf.png
http://i2.tiimg.com/691087/bcea635ba47531e0.png
使用 mitmproxy 中只能看到有 http 请求,
并且在手机上设置代理 ip:8080,我去访问 bilibili 时网络无法连接的情况
http://i2.tiimg.com/691087/b203a4b95300089b.png
charles 也是同样,设置了代理 ip:8888,证书,ssl,能看到 https 请求,但出现 unknown 显示,显示都是乱码 http://i2.tiimg.com/691087/97d9d4e77e7f8684.png
也就只有自动化软件能用了...
有哪位知道怎么搞定这些,能否告知一下
我先来说说流程
相对页面的数据进行抓取
(1) 使用 fiddler 或者 Charles 想抓取的接口
(2) 编写要在 mitmdump 筛选提取 addons.py 文件
(2)(1)
impoer mitmproxy.http.HTTPFlow
from mitmproxy import ctx, http
def response(self, flow: mitmproxy.http.HTTPFlow):
if '找到接口中所有含有的关键字' in flow.response.url or flow.request.host == "关键字":
text = flow.response.get_text()
text = re.findall('提取的内容',text)
#存入数据库或者文本
with open(....)as f:
f.writer(text)
addons = [ response() ]
(2)(2)
开启 mitmproxy 中的 mitmweb ->>> 直接在命令行开启 mitmweb
(2)(3)
mitmdump 加载刚刚写出来的文件 ->>> 加载文件 mitmdump -s addons.py
这样手机在使用 app 滑动的时候,mitmdump 会对所有经过的请求进行过滤,进行文本提取,保存
(3) 上面几乎已经完成,只需要使用自动化工具 appium 或者 AirtestIDE 来对手机不断滑动发送请求,mtimdump 则保存
网络上教程太少了,文档也就那么几个反反复复,
这个流程是否正确??????????? 是可以无视 js 和加密的把?
Python中手机App抓包流程:使用Fiddler或Charles查找接口,再用mitmproxy提取数据,最后用Appium或AirtestIDE控制吗?
噶 你的头像和我做的事情真的是一模一样。。。怀疑是不是自己梦游建的账号发的帖
这个流程基本正确,是移动端自动化测试和数据抓取的常见组合方案。
核心流程梳理:
- 抓包定位接口:用Fiddler/Charles设置代理,让手机流量经过PC,找到目标API的请求URL、参数和响应格式。这是分析的基础。
- 自动化提取数据:用mitmproxy写Python脚本,直接拦截、解析或修改HTTP/HTTPS流量,比手动查看更高效,适合批量或实时处理。
- 自动化控制App:用Appium(支持iOS/Android,基于WebDriver协议)或Airtest(基于图像识别和poco控件)模拟用户操作,触发接口请求。
关键代码示例(mitmproxy部分):
# addons.py - mitmproxy脚本示例
from mitmproxy import http
class ApiCapture:
def request(self, flow: http.HTTPFlow):
# 过滤目标请求(例如包含特定关键词)
if "api.target.com" in flow.request.pretty_host:
print(f"捕获请求: {flow.request.method} {flow.request.url}")
# 可修改请求参数
# flow.request.query["token"] = "new_value"
def response(self, flow: http.HTTPFlow):
if "api.target.com" in flow.request.pretty_host:
# 提取响应数据(假设为JSON)
import json
try:
data = json.loads(flow.response.content)
print(f"响应数据: {data.get('key')}")
# 可保存到文件或数据库
except:
pass
addons = [ApiCapture()]
运行:mitmproxy -s addons.py -p 8080
工具搭配建议:
- 优先选mitmproxy:如果你主要做数据抓取和分析,它比Fiddler/Charles更编程友好。
- 控制工具选择:复杂逻辑用Appium,快速原型或游戏测试用Airtest。
- 证书处理:抓HTTPS需在手机安装mitmproxy/Fiddler的根证书。
一句话总结: 这套组合拳很实用,先用抓包工具分析,再用mitmproxy编程处理,最后用自动化工具驱动App。
小声 BB,微信头像
更新一下,我试了用 ios,结果可以用 chlarles 抓取到 https 的请求了,果然是小米手机的问题吗?
http://i1.fuimg.com/691087/749b4cdaed5b307c.png
http://i1.fuimg.com/691087/511747de62e4717a.png
抓的起点和趣天下
用 goproxy
反编译 app,得到算法密钥类能算出签名,直接 api 请求了吧?
android7 之后,用户证书不再被信任,抓不到 https 是正常的,root 了之后把用户证书移到信任区应该可以,另外一种情况是 sslpinging,不太了解
还是得到反编译这阶段啊。抓不到 https 你查下 SSL Pinning。
JustTruestMe 走起
我看了一下,这个软件使用来建立代理服务器开端口用的? 不懂
Xposed+JustTruestme
不敢 root 自己用的手机, ios 我测试了可以抓 https 的, sslpinnning 也不可能每个 app 都用了吧
难道爬虫终极阶段要有反编译 app 的能力吗,别吓我. 也不可能能每个 app 都有 SSL Pinning 吧?,ios 手机测试了能抓到 https
是安卓版本问题吧?
golang 版本的,静态文件比 mitproxy 好用
小米 note4 charles 抓起点 https 没问题
安卓 8.0 以后用户自己安装的证书都不认了,需要 root 权限安装证书到设备中
应该是安卓版本没有到 8 把?
弄个 Android6.0 的实机或者虚拟机是最好的,低版本 xposed 支持不好,高版本安全性太高
go’看不懂,再说了我也只是 app 抓数据,不可能数据都给加密了吧,中途拦截数据 mitmdump 挺好用的,简单
哈哈 我也正在做虚拟机版的,
不知道 windows 的电脑使用 AirtestIDE 能不能控制 ios 啊?
找个 android5/6 的设备呗…
楼上说 root 导入到系统 CA 真的尝试过吗?我弄了很多次,确定按正确格式导入,权限也配置好,仍然不被信任。
至于 justtrustme,试了下他的 release 版仍然不行,回去编译一下看看。
可以看一下我的这几篇文章
[当你写爬虫遇到 APP 的请求有加密参数时该怎么办? [初级篇-常规模式] ]( https://mp.weixin.qq.com/s/KFM37LN7phd8nbI8iIHDtw)
[当你写爬虫遇到 APP 的请求有加密参数时该怎么办? [初级篇-秒杀模式] ]( https://mp.weixin.qq.com/s/_FjW6zzBv7-LENfB9B2loA)
[当你写爬虫抓不到 APP 请求包的时候该怎么办? [初级篇] ]( https://zhuanlan.zhihu.com/p/46433599)
[当你写爬虫抓不到 APP 请求包的时候该怎么办? [中级篇] ]( https://zhuanlan.zhihu.com/p/56397466)
[当你写爬虫抓不到 APP 请求包的时候该怎么办? [高级篇-混淆导致通用 Hook 工具失效] ]( https://zhuanlan.zhihu.com/p/63028507)
膜拜大佬
ios 直接越狱然后装个 ssl-kill-switch2 就能抓到了啊
我用模拟器试了下,直接用安卓版本 5.0 以上的 用 xposed +justtrustme 可以无视证书,证书的安装也不用了,charles 能抓到 https 的请求了 这是我写的随笔 https://www.cnblogs.com/zengxm/p/11061900.html
根据需求来越狱吧? 我直接在 wifi 中写入代理和端口,在 ios 自带的浏览器上下证书,直接安装信任就好了,直接抓到 https 的请求,比起安卓简单的太多了,除非 app 中含有 sslpinning 才需要把?我尝试了起点的 https 请求可以抓到,抖音也行
#26

还有种简单的方法是安装平行空间,在平行空间里打开对应的软件,然后抓包平行空间的请求就可以了。
https 指定是能抓到的,跟手机没关系,因为我们测试过小米,华为,IOS
要看情况,没做证书验证随便抓,如果客户端有做证书验证,就要干掉 sslpinning,进一步如果客户端服务端做双向验证,则还要找到客户端保存的证书和秘钥,locoz 发在站上的系列文章,算是很全面教程了。
学到了。666
这种对于证书能搞定吗,对安卓版本有没有要求啊?
感谢大佬的文档,不过我有个问题,
比如我是在 win 下使用 mitmdump 拦截数据保存的,
但是我需要手动滑动一些页面,想要使用自动化软件 airtestIDE 让手机自动化,发现使用的是模拟器,没有使用真机,想知道怎么无线让两个运作起来??共用同一个端口也不行吧?
网络上的教程都是使用抓包软甲+有线 adb 手机抓取, 难道只能使用真机+有线来操控吗
感谢 ,我目前也是刚深入到 LZ 的地步,止步于 xposed
#36
卧槽我居然没看到你这个回复的,赶紧补一下,ADB 群控可以用网络控制,不一定非要有线,这些都是灰黑产玩烂的东西了。最简单的就是网络 ADB,但效率没有直接用专门的网络群控 APP+控制端高,而且连接不太稳定,管理起来也不是很方便,所以如果要搞的话建议走第二个方案。
#37 能对你有帮助就好


