APP抓不到包及问题解决方法

前言

一般情况下手机在安装了burpsuite的伪证书后,是可以抓大部分APP数据包的。但是也会会遇到一些APP是不能通过burpsuite抓包的情况。

这种现象往往表现在burpsuite没有拦截到任何数据请求信息,且在客户端返回类似“服务器连接错误”等提示。那怎么去解决抓不到包的问题呢?

 

单向认证

什么是单向认证?

简单来说,单向验证的就是是客户端主动去校验服务端的证书,看看其服务端证书是否为客户端所承认的证书,如果证书校验出错就会无法与其建立连接。说白了就是APP使用SSL证书绑定(SSL Pinning)让客户端绑定了唯一可识别的证书,请求时当发现服务端证书和绑定的不一样时就不建立连接。

解决办法:Xposed框架+JustTrustMe模块(需root)

1、从下载好的文件中解压出Xposed,放到模拟器中安装:

APP抓不到包及问题解决方法_第1张图片

2、打开软件后是未激活状态,需要进行在线安装:

APP抓不到包及问题解决方法_第2张图片

3、安装完成后根据提示重启,重新进入软件显示成功激活即可:

APP抓不到包及问题解决方法_第3张图片

4、接着解压出justTrustme文件,进行安装。结束后Xposed会自动提示该模块未激活。点击激活跳转到Xposed模块界面进行勾选,接着重启即可。

APP抓不到包及问题解决方法_第4张图片

5、 接下来就可以用burpsuite等工具抓包了。

其实就是Xposed框架的justTrustMe模块,会将APP中所有进行证书验证的方法或者函数都进行hook。hook它就是一个钩子函数,通过这个钩子函数去修改了证书检验的结果,让其无论如何都可以继续进行通信。从而达到可以正常抓包的目的。

除此之外的方法

1、可以通过反编译APP文件,再篡改内部证书信息。难度较大,可能会遇到难搞的加壳、或者代码混淆的情况。

2、利用Frida框架进行APK注入,从而绕过证书检测。Frida工具中包含了一个能够让应用程序在运行时加载Frida的动态库,并允许我们对目标应用程序的代码和指令进行动态修改。

 

双向认证

什么是双向认证?

 双向认证的就是客户端校验证书的同时,服务端也要校验证书,无论哪个出现错误都会造成无法建议连接。相比 SSL Pinning 来说,两者实现的功能差不多但是使用双向认证会更贵点。

解决方法:反编译找证书私钥

1、先通过工具反编译APK文件,找到证书的文件。一般证书文件可能会放在assets或者res目录下,我是直接搜索证书文件格式后缀的如:crt、cer、p12、pfx等等。

2、找到证书文件后打开它会发现是需要私钥的。通过在反编译好的源代码中查找相关函数,找到私钥。

3、导入输入私钥后的证书到burpsuite后,即可正常抓包了。

至于怎么快速定位到私钥位置,可以关键字多搜索“key”、“password”、“ssl”等关键字,难点还是反编译后遇到难脱的壳和代码混淆的问题。

APP不走代理

问题描述

有些情况下APP是不走代理服务的,比如说手机已设置好burpsuite代理,通过手机浏览器访问网页可以正常抓包。然后关掉burpsuite软件,手机浏览器不可访问任何网页,但是APP可以正常访问业务。那么就可以说明APP使用了默认禁用系统代理的网络请求框架。

解决方法:HTTP Debugger Pro

这个工具是全局抓http/https流量,可以通过这个工具抓取模拟器上的流量。

APP抓不到包及问题解决方法_第5张图片

除此之外的方法

1、可以使用 Packet Capture 一款依托安卓系统自身 VPN 来达到免 Root 抓取数据包的应用程序,可以捕获 Android 手机上的任何网络流量。就是操作起来会比较麻烦,需要到手机里面复制数据包的请求,然后再发送到burpsuite中进行操作。

2、可以使用frida来hook网络请求框架的限制函数或方法,从而绕过验证。

 

APP代理检测

问题描述

顾名思义就是说APP会对当前网络是否属于代理环境进行检测,如果属于就禁止建立连接访问。

解决方法:遇到这种检测机制,没啥好办法了。只能用hook出代理环境限制的函数或方法,从而绕过限制。

 

严格的证书检验

问题描述

有些情况下使用了JustTrustMe也无法成功获取数据包,可能是APP使用了自定义的库进行证书校验,导致无法匹配通用的Hook函数,导致抓包失败。

解决方法通过反编译查看源代码,了解对应证书检验函数后重新编写Hook脚本。使用frida执行hook后再进行抓包。

 

安卓版本问题

问题描述

APP在安卓7.0或更高的系统下,无法抓取数据包。是因为安卓7.0开始 https 是不会走自己安装的证书的,根本原因是安卓sdk24可以设置只信任系统证书,所谓的中间人攻击就不起效果。

解决方法:使用低于7.0版本的安卓系统进行抓包。

 

后记

原创文章从自己的公众号搬运过来的,感兴趣的可以关注一波呀。

你可能感兴趣的:(app安全)