APP爬虫-双向认证抓包的两种方法

APP抓取 2020-03-27 10:47:03 阅读(39092) 评论(0)

APP抓包相对繁琐,越来越多的 APP 在 https 请求和响应时,为了防止中间人攻击(或中间人抓包),会做证书认证,让抓包工具抓不到请求。

双向认证抓包

证书认证分单向认证和双向认证,双向认证是相较于单向认证而言的,单向认证就是只在 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 这部分代码,对参数做些输出打印,证书和证书密码就都有了。

大部分情况下,我们不用非常熟悉安卓原理,比如安卓在代码层面是如何操作证书的(当然熟悉更好)。因为资讯发达,一般灵活借助搜索引擎,灵活查阅资料,可以大体知道这些,就可以尝试去写 Hook 脚本去尝试看看。

查阅资料可以知道,安卓操作证书通常是 java.security.KeyStore 这个类,然后再了解下这个类的用法,参数形式。就可以尝试去 Hook 了。上述脚本就是 Hook java.security.KeyStore 这个类的 load 方法,load 方法的形参就是我们需要的证书和密码。

抠出的证书和密码,配置进 fiddler 或 charles 里面,就可以抓到双向认证的包。
PS: 还要注意证书的格式,抠出的证书可能是 jks 或 bks 格式的,fiddler 可能需要 p12 格式的, 所以要找工具先转换一下格式。

 

方法二:

如果只是想抓包,还有另一种方法,不需要抠证书的方法。虽然 https 在传输过程中是加密的,但在终端显示的时候,必然会解密,不然 APP 上都没法显示了。所以如果能知道安卓解密 SSL 加解密是哪个类, Hook 这个类, 类里相关方法的输入输出肯定就是传输的明文数据。

所以可以查阅资料,看看相关类的用法,就可以尝试去 Hook 打印输出看看情况。也有开源作者开源了该 Hook 脚本, 比如 5alt 老板在google开源的脚本基础上做了修改了的 ssl_logger 。
https://github.com/5alt/ssl_logger

能够 Hook SSL 加解密的地方,它会把传输的数据保存为 pcap 格式。再使用 wireshark 打开该 pcap文件, 在 wireshark 上就可以看到明文的数据了。

如果要模拟向服务器发送请求的话,还是只能使用第一种方法,因为客服端必须要提交正确的证书,服务端才会正确响应。必须得抠出证书,模拟请求时必须带上证书,才能请求到数据。安卓上的证书好多是 jks/bks格式的, 如果使用 Python requests 库的话, 不支持这个格式, 所以要想办法把证书转成 cert 格式的。

上面两种方法都是使用 Frida 进行 Hook ,所以要有 Root 过的手机和明白Frida 怎么使用就能搞定。

对于爬虫来说,搞定抓包和请求参数加密的问题,大部分 Hook ,都可以通过 Hook 安卓系统 API 来找到 APP 代码位置,或直接搞定。其实很少人能很熟悉安卓系统的各种原理,大部分时候能灵活通过各种关键字能查到相关原理的讲解文献,文献里讲的 API 灵活点拿去 Hook 康康线索,就能搞定很多拉。

其实使用双向认证的 APP 还是少数, 对服务器性能多少有影响。

 

PS :建了一个爬虫技术和爬虫技术做副业交流群, 可以扫我私人微信(dismissmewp)加入,备注:猿人学 。

personal wechat

猿人学banner宣传图

我的公众号:猿人学 Python 上会分享更多心得体会,敬请关注。

***版权申明:若没有特殊说明,文章皆是猿人学 yuanrenxue.con 原创,没有猿人学授权,请勿以任何形式转载。***

说点什么吧...