大家好,欢迎来到IT知识分享网。
安卓手机抓包方法归纳总结
最近需要对安卓应用发出的网络数据进行抓包分析,除了常见的HTTP还包括MQTT协议。
本文总结归纳了。手机端抓包的各种方法和思路
0x01 wireshark方案
在PC端抓过包的人一定不会对Wireshark感到陌生,该软件可以直接抓取流经网络适配器(网卡)的所有数据包,意味着局域网内其它主机发出的数据包也可以截获(这种模式叫作混杂模式)。此外该软件能够解析下至数据链路层,上至应用层的绝大多数网络协议。
那么在手机端如何使用wireshark进行抓包分析呢?大致的思路有两种:
1. 在PC上使用wireshark
把手机端的网络流量导流到PC上。在PC上直接使用Wireshark进行抓包并分析。
这种方案要求手机与PC处于同一局域网内。
可行的办法是,手机连接电脑开的热点。对于没有无线网卡的电脑,可以使用随身WIFI来创建WIFI热点
2. tcpdump + wireshark
在手机端使用tcpdump抓包,然后在PC端使用wireshark分析。
tcpdump是linux上的一个命令行抓包工具。它直接在网卡抓取数据包,所以需要root权限。
具体步骤可以参考:详解使用tcpdump、wireshark对Android应用程序进行抓包并分析
解析SSL层密文遇到麻烦
Wireshark很强大,但是它在解析SSL层加密过的信息时,需要配置秘钥。
如果拥有服务器证书的私钥,那一切就很简单了。简单在wireshark的首选项中设置一下即可。
另一种方法只针对浏览器发出的HTTPS数据,Chrome和Firefox会在日志中记录会话的秘钥。
只要在系统环境变量中增加SSLKEYLOGFILE变量,重启浏览器即可。
具体实践可参考:Wireshark对HTTPS数据的解密
显然,这种方案对手机APP产生的HTTPS数据无能为力。
0x02 HTTP代理思路
将手机的HTTP请求导流至代理服务器,那么便可以在代理服务器中抓取到网络数据包了.
可以使用的工具有Fiddler或者Charles
该思路的不足是,只能抓取http的数据,如果要抓取别的应用层协议,就无能为力了。
同一局域网下使用Fiddler
在PC端打开Fiddler作为HTTP代理服务器。
在手机端设置HTTP代理。这样就可以把手机端的HTTP流量导流只PC端。
对于HTTPS流量,可以在手机端安装Fiddler的证书。这样代理就可以解密加密的数据了
具体实践可参考:Fiddler实现手机抓包
通过SDcard安装证书的方法:Fiddler证书安装(查看HTTPS)
不同局域网下使用DevTools + Fiddler
对于不处于同一局域网的设备,还可以使用Chrome游览器的设备远程调试功能,具体步骤如下:
- 在PC端的chrome浏览器输入 chrome://inspect/#devices 即可进入
- 点击Port forwarding,弹出设置窗口
- 在设备端口输入框填写移动设备要监听的端口号,此处设为8000(可以任意未被使用的值,只要下面使用处做相应修改即可)。
选中Enableport forwarding,点击Done完成。
- 在手机端设置HTTP代理,主机号:localhost,端口号:上一步中设置的8000
- 在手机端用浏览器随访问任意网页,当chrome://inspect窗口的端口号闪动为绿色时,表明该端口转发配置已生效。此时任何通过手机8000端口发出的请求都会通过数据线被映射到电脑的localhost:8888
0x03 手机端抓包工具:Packet capture
这个工具是手机端的一个VPN,也相当于是一个代理。
它还可以把抓取到的数据保存为pcap格式,这样就可以在PC上使用Wireshark来分析。相比较于Tcpdump,它的好处是不需要root手机。
在实践中,并不能解析SSL加密的数据包。查资料,说是因为高版本安卓不再信任用户添加的CA证书列表。或者是客户端APP对CA证书进行了校验。总之是没法解析TLS数据。
一种解决办法是使用Xposed 插件just trust me。来跳过CA证书的校验过程。
扩展阅读:
手机抓包工具汇总
0x04 其它思路
其实抓到包很容易,难的是如何解析SSL层加密的数据。
抓包的目的就是分析网络数据,如果有APP的源码,其实可以换个思路,不用在网络侧抓包,而是在代码里调用网络接口前,将数据打印出来。
注意这里的目的是获取到应用层协议的报头,而不仅仅是应用层协议的载荷。
1. Xposed HOOK
这是一种比较野的路子,在尝试的过程中失败了。但是可以把思路写出来
利用Xposed框架,Hook网络请求的相关代码,将数据打印出来。
能够在不修改源代码的前提下,截获网络数据。
2. 自定义Socket
在代码里自定义一个Socket/SSLSocketFactory,对Socket进行一层包装,增加自定义的逻辑。
自定义逻辑可以是统计流量,也可以是记录。
这种思路同样可以获得应用发出的网络数据。
然后在OkhttpClient.Bulder中设置SSLSocketFactory/SocketFactory。网络库一般都会提供设置SocketFactory的方法。
免责声明:本站所有文章内容,图片,视频等均是来源于用户投稿和互联网及文摘转载整编而成,不代表本站观点,不承担相关法律责任。其著作权各归其原作者或其出版社所有。如发现本站有涉嫌抄袭侵权/违法违规的内容,侵犯到您的权益,请在线联系站长,一经查实,本站将立刻删除。 本文来自网络,若有侵权,请联系删除,如若转载,请注明出处:https://yundeesoft.com/11806.html