【Tools】- 网络抓包(http,https),解决所有抓包
简介
大家平时在开发工程中,解决测试,线上bug的时候等很多时候都会用到网络抓包工具来分析服务器端返回的数据,找到十足的证据甩锅给后端的同事。
就Android开发来说,http抓包,很容易,如果是https呢,有一点麻烦,用低版本的手机(比如Android5.0)装上抓包工具生成的证书也就解决了。但是在高版本手机(比如Android7.0)发现装了证书不管用,直接提示握手失败或者无法访问网络,或者抓包工具什么数据内容都看不到,看到了也是一堆乱码。不慌,能解决。
如果应用进行了代理检测,应用加固,当线上出问题了,自己反编译apk又不太好操作(当然可以在本地打一个线上环境的apk调试bug),这时候怎么办,不慌,能解决。
我写的其它抓包相关的文章
- Wireshark
Wireshark抓包工具使用,一共四篇文章,点击链接,里面有目录
https://www.jianshu.com/p/28740f217642 - 其它
Android利用tcpdump和wireshark抓取网络数据包
工具
PC端
-
Fiddler
Window下载地址,mac也有,自己可以百度,mac没有直接支持的安装包,可以通过其它工具配合来支持,我mac是安装上了,但是始终用不了。 -
charles
目前我在mac上用的抓包工具,Window可以自己去下载安装。 -
wireshark
专业的抓包工具,使用更加复杂,但功能是否强悍。
手机端
这里列的是Android手机。
-
HttpCanary
如果可以访问Google Play可以直接下载安装,如果没有自己百度,上面有很多下载地址。 -
平行空间
实现应用双开,和抓包工具配合,抓取https。 - Packet Capture
其它工具
-
Xposed
当应用进行了反抓包机制,应用加固等,那么Xposed可以hook应用,对抗反抓包机制。但是手机需要ROOT。
Xposed Github项目
对应不同sdk版本的framework下载地址 -
VirtualXposed
在非ROOT设备上实现Xposed部分功能。 -
Lucky Patcher
Xposed module,具体各种破解功能,具网上资料,可以破解HttpCanary,但是我没有成功。 -
JustTrustMe
Xposed module,关闭证书检测,这样https可以直接抓包。
说明
本篇文章,以自己亲自事件总结的抓包相关的知识点。本着以简单的方式解决问题。下面将从简到难,分场景讲解。
http
http抓包就很简单了,用上面的任何一个工具都能够轻易抓包到,至于抓到包后的一些骚操作就要自己研究抓包软件了。
https
https通信过程,会进行认证,数据加密,如果设置代理抓https网络数据,会出现握手失败,无法连接网络,看不到抓包内容或者乱码等情况。
Android版本对证书的限制
Android从7.0开始系统不再信任用户CA证书(应用targetSdkVersion >= 24时生效,如果targetSdkVersion < 24即使系统是7.0+依然会信任)。也就是说即使安装了用户CA证书,在Android 7.0+的机器上,targetSdkVersion >= 24的应用的HTTPS包就抓不到了。
手机系统版本低于24 或者 targetSdkVersion < 24
安装抓包工具提供的证书,安装步骤自己百度,正常抓包。
手机系统版本高于2(包含24)并且 targetSdkVersion >=24
Android系统不在信任用户证书,即使你赚了抓包工具提供的证书依然不行。解决办法如下:
非root设备
-
HttpCanary + 平行空间
HttpCanary设置里面可以直接安装平行空间,然后在HttpCanary设置里面安装证书,使用平行空间空间打开应用,然后用HttpCanary抓包。异常情况,如果出现握手失败或者无法连接网络,可以先关闭HttpCanary,先进入应用,再打开HttpCanary,重新抓,这是我最开始使用HttpCanary+平行空间出现的问题,后面好像没有出现了。
-
pc抓包工具 + 平行空间
手机安装pc抓包工具提供的证书或者HttpCanary设置中安装证书,平行空间中打开应用。pc或者手机正常抓包。
在锤子7.1.1系统,targetSdkVersion = 26亲测,可以正常抓包。 -
VirtualXposed + 上面两种方案
VirtualXposed用在非root设备上实现Xposed功能,对抗应用代理检测,应用加固等阻碍抓包机制。
root设备
root设备除了拥有非root设备解决方案以外,其它解决办法。
-
HttpCanary
Android系统证书都是以“.0”结尾的,系统证书位置: /system/etc/security/cacerts。HttpCanary可以将自己的“.0”证书导入系统证书目录,这样可以实现抓包。刚开始用这种方式的时候,也出现了握手失败或者网络连接失败,通过先关闭抓包,走应用正常流程后再打开抓包就可以了(有点奇怪)或者 关闭抓包后,等操作应用后,立即打开抓包,可以抓包https。
-
JustTrustMe
安装抓包工具提供的证书,pc,手机正常抓包,但是启动JustTrustMe,很多浏览器里面的网站打不开,这些页面服务器对证书应该有验证。 -
Xposed
对抗代理检测等机制,Xposed有强大,开启应用调试,hook等等。
证书固定
客户端内置Server端真正的公钥证书。
在这种情况下,由于MITM Server创建的公钥证书和Client端内置的公钥证书不一致,MITM Server就无法伪装成真正的Server了。这时,抓包就表现为App网络错误。
有些服务器采用的自签证书(证书不是由真正CA发行商签发的),这种情况App请求时必须使用证书固定。
很多应用还会将内置的公钥证书伪装起来或者加密,防止逆向提取。
- 持有证书
好办,导入抓包工具即可。 - 没有
反编译APK,Xposed hook应用关键代码,关闭证书设置或者替换成自己的。
非HTTP协议抓包
如果上面的方式都不能够抓到网络包,那么考虑请求可能不是http,https请求,可以选择支持其它协议的抓包工具。
其它方式参考
Wireshark和Fiddler分析Android中的TLS协议包数据(附带案例样本)
Mac上的抓包工具Charles