在一次测试某APP时,发现装完证书后还是抓不到包,怀疑是证书校验的问题,于是通过逆向APP找到了校验的位置,并通过编写Xposed插件来解决抓不到包的问题。这里没啥技术含量,只是为了记录下使用Xposed做的那点事。
下面是整个过程
手机安装完Burpsuite和Filddler证书后,仍然抓不到数据包
通过逆向APP,发现并没有做加固,只是代码做了些混淆
直接关键字搜索:KeyStore.getInstance
进入之后发现几个关键的函数,分别是校验客户端:checkClientTrusted和校验服务端:checkServerTrusted,同时也检查是否有代理证书。
存在则直接抛出异常了。
最开始的思路就是直接使用Xposed来Hook掉a函数,让它一直返回True,这样就绕过了代理证书的检测了。
但是在编写插件时候发现,通过DDMS发现并没有调用到private boolean a(X509Certificate[] x509CertificateArr)而是调用了public void checkServerTrusted(X509Certificate[] x509CertificateArr, String str)
因此没有Hook成功,而checkServerTrusted也不好处理。
继续分析代码,发现这里的变量a和b可以处理
通过查看发现,this.b是作为一个开关变量,表示是否开启HTTPS的证书校验,这里可以说是测这个APP的运气吧。
到这里,我们直接Hook变量b即可绕过这个APP的HTTPS的证书校验了。
下面是编写的Xposed插件关键代码
对于APP的双向校验,不知道能不能Hook来处理,还在研究中...
如果文中哪里不对的,或者有疑问的,可以留言。
领取专属 10元无门槛券
私享最新 技术干货