抓包分析安卓手机的HTTPS请求
工具和资料
- QQ群 - Javascript高级爬虫 - 作者自建群,欢迎加入!
- awesome-java-crawler - 作者收集的爬虫相关工具和资料
HTTP抓包流程
为了实现对安卓手机或模拟器的网络请求抓包,简单流程为:
- 电脑上安装Fiddler等抓包工具,其原理就是一个HTTP/HTTPS代理服务器。注意需要允许远程电脑连接
- 确保电脑和安卓手机在同一个子网中,互相能够PING通。比如:可以连接同一个WIFI热点,或者用电脑给手机开热点都可以
- 在手机的WLAN设置中,设置WIFI代理,指向电脑的IP和抓包工具的端口,比如:192.168.122.101:8888
- 这个时候,如一切正常,HTTP代理就已经可以工作了,可以在手机浏览器里访问HTTP站点,看看抓包工具中是否有反应。
HTTPS抓包原理
- HTTPS抓包就要麻烦一些了,要知道HTTPS的报文是加密的,主要防的就是在网络传输中间环节做手脚。
- 不过抓包工具可以用中间人方式(Man-In-The-Middle)方式来解析HTTPS报文,大概原理是对访问者假装自己是目标网站,对目标网站假装自己是访问者,
- 这需要访问者信任这个中间人签发的(伪造的)网站证书,具体做法是将抓包工具提供的根证书添加到系统的“受信任的根证书颁发机构”中去。
-
在电脑上比较简单,打开"Fiddler设置->HTTPS面板":
- 选中"Capture HTTPS CONNECTs", "Decrypt HTTPS traffic", "Ignore server certificate errors(unsafe)"
- 点击右面的Actions按钮,选择"Trust Root Certificate"即可
在Android中安装根证书
但是在安卓系统中就要自己动手安装根证书了,下面梳理一下整个过程:
前提
- Android 4.4及以上
- 手机已经root,则可以安装为系统证书,否则只能安装用户证书
区别在于:用户证书会要求手机必须有锁屏密码 - adb连接手机正常
安装为用户级别证书
- 把证书文件 .crt/.cer下载到内部存储,比如/sdcard
- 文件管理器打开文件,会自动打开证书管理应用,给证书起个名字即可导入,另外需要设定屏幕解锁密码
- 打开 设置 -> 安全和隐私 ->凭据存储 -> 用户 可以查看安装的证书
-
对于Fiddler有个更简便的办法:
- 打开手机浏览器,访问 http://ipv4.fiddler:8888/
- 打开的页面最下面的链接:You can download the Fiddler certificate,点击即可下载安装证书,步骤和从文件安装一致
安装为系统级别证书
把证书文件转换为Android可识别格式
- 确定文件名。我这里安装了两个不同工具的证书,即Fiddler和LittleProxy-MITM,它们的证书格式不同,因此使用的命令也略有不同。
openssl x509 -inform DER -subject_hash_old -in FiddlerRoot.cer
openssl x509 -inform PEM -subject_hash_old -in littleproxy-mitm.pem
把输出的第一行的8位hex字符串保存下来,比如269953fb,最终的证书文件名则为269953fb.0 - 转换证书文件格式
openssl x509 -inform DER -in FiddlerRoot.cer -text > 269953fb.0
openssl x509 -inform PEM -text -in littleproxy-mitm.pem > 4bb9877f.0 - 编辑输出的文件,把"-----BEGIN CERTIFICATE-----"到文件结束这部分移动到文件首部
安装证书
- 把证书文件复制到手机内部存储。adb push后第一个参数是证书文件在电脑上的路径,第二个是手机内部存储的路径
adb push path/to/269953fb.0 /sdcard -
从内部存储复制到系统证书目录。adb shell启动命令行交互,su获取超级用户权限,mount将/system目录重新挂载为可读写,最后执行复制
adb shell
su
mount -o remount,rw /system
cp /sdcard/269953fb.0 /system/etc/security/cacerts/ -
修改文件权限。
cd /system/etc/security/cacerts/
chmod 644 269953fb.0 -
用ls命令检查文件权限是否正确。下面一行是期望的输出。
ls -alZ
-rw-r--r-- root root u:object_r:system_file:s0 5ed36f99.0 - 重启设备
- 打开“设置->安全和隐私->凭据存储->系统”可以查看安装的证书。
验证
- 手机浏览器打开HTTPS站点,看抓包工具中是否可以正常解析HTTPS报文。
参考
- 详细过程:http://wiki.cacert.org/FAQ/Im...
- 不同扩展名的证书文件具体介绍及相互转换:https://blog.csdn.net/xianggu...
- openssl x509命令详解:https://www.openssl.org/docs/...
玩儿编程
编程也是可以玩儿的!微信公众号“玩儿编程”
推荐阅读
Cython + PyInstaller 创建 EXE 文件
参考Github上的例程简介引入Cython的目的是:将部分python源码转译成c,然后编译成.pyd格式的动态链接库,避免软件核心逻辑被轻易反编译引入PyInstaller的目的,打包成exe,可选单个文件或目录Python2.7 安装依赖...
rockswang阅读 2.8k
网易云音乐开源全链路埋点方案-曙光埋点(dawn)
网易云音乐开源了曙光埋点 dawn,一个跨多端的全链路埋点解决方案,旨在构造一个完美的数据理想国。曙光埋点创造性的提出了埋点虚拟树(VTree),并在此基础上实现了诸多能力,解决大前端侧埋点困难、精度差、不...
云音乐技术团队赞 3阅读 2.5k
Fiddler抓包
1.Fiddler设置打开Fiddler,配置fiddler允许监听到https(fiddler默认只抓取http格式的):Tools -> Options -> HTTPS:配置fiddler允许远程连接:Tools -> Options -> Connections:重启Fiddler。2.查...
园中桥赞 1阅读 5.9k
直播回顾 | 点击率提升400%,Ta是怎么做到的?
Discovery第18期直播已于3月30日圆满结束,本期直播邀请天眼查做客直播间,从天眼查与华为Push用户增长服务合作历程切入,聚焦用户增长,分享提升应用活跃度和渠道ROI的经验与见解。一起来回顾本期精彩内容吧!
HMSCore阅读 6.4k
Android Crash 前的最后抢救
众所周知,当 Andoird 程序发生未捕获的异常的时候,程序会直接 Crash 退出。而所谓安全气囊,是指在 Crash 发生时捕获异常,然后触发兜底逻辑,在程序退出前做最后的抢救。
xiangzhihong赞 1阅读 1.3k
教你如何在 Andorid 上使用OpenAI API 调用ChatGpt
现在Chat GPT功能越来越强了,几乎你想问实际问题它都能给你回答。正好,小组结课的 Android项目 有一个解梦的功能。正好调用chatGpt的Api来实现。下面就来简单实现在Andorid项目中打造一个简易的聊天机器人。
weiweiyi赞 1阅读 1k
Linux下编译WebRTC(Linux和Android版本)
随着新冠疫情的影响,这两年音视频的需求呈爆发式增长。在音视频领域中,WebRTC可以说是一个绕不开宝库,包括了音视频采集、编解码、传输、渲染的全过程。本文主要记录下在Linux平台上编译WebRTC Linux和Android...
吴尼玛阅读 3.3k评论 2
**粗体** _斜体_ [链接](http://example.com) `代码` - 列表 > 引用
。你还可以使用@
来通知其他用户。