2

APP/小程序抓包

 2 years ago
source link: https://sunny250.github.io/2021/03/24/APP_%E5%B0%8F%E7%A8%8B%E5%BA%8F%E6%8A%93%E5%8C%85/
Go to the source link to view the article. You can view the picture content, updated content and better typesetting reading experience. If the link is broken, please click the button below to view the snapshot at that time.

0x00前言

在测试小程序或app总会遇到抓不到包的情况,也听很多大佬说过,抓不到包使用低版本安卓。小程序比较好解决,毕竟是在微信上运行的程序,可以加的东西比较少;独立的app可以加的东西就很多了,例如添加非标准的http协议,如可自定义的的http模块okhttp;或者证书校验;独立函数校验。这就分很多中情况了。

0x01 安卓7.0以上不能抓包根源

在 Android7.0 及以上的系统中,每个应用可以定义自己的可信 CA 集集。

默认情况下,应用只会信任系统预装的 CA 证书,而不会信任用户安装的 CA 证书。

而回想我们抓包的过程,无论是 fiddler 还是 Charles,想抓 https,都必须手机安装对应的证书,通过 fiddler/Charles 安装的证书恰恰正属于用户安装的 CA 证书,因此会被视作不安全的证书。

把手机root,然后安装证书到系统证书目录下
系统证书的目录是:/system/etc/security/cacerts/

每个证书的命名规则为:.

Certificate_Hash表示证书文件的 hash 值,Number是为了防止证书文件的 hash 值一致而增加的后缀;

证书的 hash 值可以由命令计算出来,在终端输入openssl x509 -subject_hash_old -in ,其中Certificate_File为证书路径,将证书重命名为hash.0放入系统证书目录,之后你就可以正常抓包了。

0x02小程序抓包

  1. 安卓系统 7.0 以下版本,不管微信任意版本,都会信任系统提供的证书
  2. 安卓系统 7.0 以上版本,微信 7.0 以下版本,微信会信任系统提供的证书
  3. 安卓系统 7.0 以上版本,微信 7.0 以上版本,微信只信任它自己配置的证书列表
    解决方法一:使用苹果系统
    解决方法二:使用低版本安卓
    解决方法三:root后安装证书到系统证书处,使用低版本微信
    解决方法四:hook微信

最简单的方法就是使用苹果系统进行抓包或者使用低版本安卓

0x03 app无法抓包

目前大多使用了各种手段以确保安全。首先要解决抓包问题,然后还要解决各种解密问题。
根据app对证书的处理分为以下几种方式

  1. 使用自定义http模块,例如okhttp,不实现其http代理功能,或者不完整的http代理功能
  2. 客户端对服务器的证书做校验
  3. 在客户端代码层对证书做校验
  4. 服务器对客户端证书做校验
  5. 在代码层判断是否启用了vpn

以上5中方法是对于http(s)的抓包,目前大多数app也都是这几种进行组合。
下面给出解决办法

  1. 使用vpn软件,将所有数据包走vpn通道
    在bp或者其他抓包软件中设置好代理后,使用Postern输入ip,端口进行连接
    upload_87e5e7106fcdc309a733a538e2b59408.png
    upload_7a16234ba09a4795d36027a875450a15.png

  2. 将抓包软件的证书导入到系统中
    上面说到了如何将证书导入到系统证书中

  3. hook校验证书的函数,使其失效(又被称为ssl pinning)
    使用frida,hook验证函数,也可以直接使用objection
    #android sslpinning disable
    upload_12ad68db8bdd3cdd123ea918df0259c0.png

  4. 将抓包软件导入app的证书
    直接抓包会出现400错误
    upload_7de4d19f4c961863eacc726fad44a1f7.png

    使用jadx反编译后,一般直接搜索client或者p12(可能有些是其他格式)就可以搜索到
    upload_d3fb09d32bc128cc173d94917d6680f0.png
    在app未启动时,使用objection抓取密码,大多数情况下可用
    #objection -g com.boqianyi.havefun explore --startup-command 'android hooking watch class_method java.security.KeyStore.load --dump-args e --dump-return'
    upload_9ebde0412f6f3bd6c40387efb564afbd.png
    然后选择对应对证书格式导入
    upload_ae8208f5b8d992f142ece12f6f05ad04.png
    最后选择证书,输入密码就可以愉快的抓包了
    upload_bde30b9f8ee0772accb2fa7076a85966.png

  5. hook校验函数,使其失效

0x04参考文章

https://www.anquanke.com/post/id/197657
https://testerhome.com/articles/17746


About Joyk


Aggregate valuable and interesting links.
Joyk means Joy of geeK