Android 通用抓包方式
前言
抓包思路有两种
- 中间人
- hook android libssl.so 获取ssl key log
中间人的优势是简单方便,实时。hook的方式优势是原汁原味(比如可以看到两端握手的过程)。具体选哪一种,根据实际需求决定
中间人
可以利用的工具有pcap remote + wireshark、postman等等。这里就用我最常用的pcap举例
不管用什么工具,最核心的步骤就是:导入证书到系统证书目录。
为什么是导入到系统证书目录呢?因为从Android 7开始,默认是不信任用户证书的,所以普通的安装用户证书的方式很多都无法抓包,但是系统证书不存在这个问题。
导入证书到系统证书目录
准备:一台已经root的手机,我这里用的是Android 11已经root的手机。
-
将抓包工具需要安装的证书导出为pem文件
-
获取pem文件的hash
openssl x509 -inform PEM -subject_hash_old -in xxxx.pem | head -1 87bc3517
-
将pem文件重命名
这里重命名为
87bc3517.0
-
修改system分区权限
adb root;adb disable-verity;adb reboot;adb wait-for-device;adb root;adb remount
-
拷贝到系统证书目录
cp 87bc3517.0 /system/etc/security/cacerts/
-
修改权限
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也无用哦~