Android 通用抓包方式

前言

抓包思路有两种

  1. 中间人
  2. hook android libssl.so 获取ssl key log

中间人的优势是简单方便,实时。hook的方式优势是原汁原味(比如可以看到两端握手的过程)。具体选哪一种,根据实际需求决定

中间人

可以利用的工具有pcap remote + wireshark、postman等等。这里就用我最常用的pcap举例

不管用什么工具,最核心的步骤就是:导入证书到系统证书目录。

为什么是导入到系统证书目录呢?因为从Android 7开始,默认是不信任用户证书的,所以普通的安装用户证书的方式很多都无法抓包,但是系统证书不存在这个问题。

导入证书到系统证书目录

准备:一台已经root的手机,我这里用的是Android 11已经root的手机。

  1. 将抓包工具需要安装的证书导出为pem文件

  2. 获取pem文件的hash

    openssl x509 -inform PEM -subject_hash_old -in xxxx.pem | head -1
    87bc3517
    
  3. 将pem文件重命名

    这里重命名为87bc3517.0

  4. 修改system分区权限

    adb root;adb disable-verity;adb reboot;adb wait-for-device;adb root;adb remount
    
  5. 拷贝到系统证书目录

    cp 87bc3517.0 /system/etc/security/cacerts/
    
  6. 修改权限

    chmod 644 87bc3517.0
    

抓包

导入后就可以抓包了,这里就不具体演示了,根据自己具体使用的工具来。我这里主要介绍下面的hook方式

hook android libssl.so 获取ssl key log

在pc上我们经常使用wireshark来抓包,但是wireshark不支持中间人抓包。抓到基于tls加密的包是无法解密查看的。然而Android内部的libssl.so有个设置SSL/TLS连接上下文中的密钥日志回调函数SSL_CTX_set_keylog_callback。所以我们只要想办法设置回调并将密钥打印出来,然后将密钥设置给wireshark,它就可以解密出抓到的加密内容了。具体操作详见这篇 意外发现的Android硬核https抓包, 在多个app亲测ok, 自定义ssl也无用哦~

你可能感兴趣的:(android,wireshark)