APP/小程序抓包

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,端口进行连接

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

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

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

    使用jadx反编译后,一般直接搜索client或者p12(可能有些是其他格式)就可以搜索到

    在app未启动时,使用objection抓取密码,大多数情况下可用
    #objection -g com.boqianyi.havefun explore --startup-command 'android hooking watch class_method java.security.KeyStore.load --dump-args e --dump-return'

    然后选择对应对证书格式导入

    最后选择证书,输入密码就可以愉快的抓包了

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

0x04参考文章

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

  • © 2019-2023 sunny250
  • Hexo Theme Ayer by shenyu
    • PV:
    • UV: