证书认证分单向认证和双向认证,双向认证是相较于单向认证而言的,单向认证就是只在 APP 侧做证书校验,单向认证有现成的解决方法,比如用各种 bypass ssl 校验的 hook 脚本既可让单向认证失效,例如:JustTrustMe 。如果 APP 的网络请求库有混淆,上述 bypass ssl 脚本无效,也有开源作者开发了自适配的 bypass 程序,可以 hook 混淆后的网络库。比如:JustMePlush 。简单说了下单向认证如何解决,开始说双向认证如何解决。
双向认证除了要在 APP 侧做证书校验外, 对方服务端还要做证书校验。对方服务端是要检测证书的,不提交真正的证书给服务端,肯定会请求失败。
双向认证抓包有两种解决方法:
一是:按照搞定证书的思路去想的话,就是要想办法拿到真正的证书。二是:Hook SSL 对数据解密数据的地方。
方法一:因为 APP 能正常跟服务端通信,所以真正的证书肯定是在 APP 里面。所以就是要想办法从 APP 里抠出证书。抠证书有开源的 Frida Hook 脚本。如下地址是开源作者写的 Frida Hook 脚本https://gist.github.com/ceres- c/cb3b69e53713d5ad9cf6aac9b8e895d2gfgg可以把证书从内存里读出来保存到本地,并且证书密码也能读出来,非常的方便。
该脚本的原理是:因为 APP 在向服务端发请求时, APP 肯定会操作证书,所以如果能找到 APP 操作证书的代码地方, Hook 这部分代码,对参数做些输出打印,证书和证书密码就都有了。
大部分情况下,我们不用非常熟悉安卓原理