作者:E4b9a6, 创建:2021-04-11, 字数:3312, 已阅:42, 最后更新:2021-04-11
Android7.0以上版本更新了安全策略,软件可以选择不信任用户证书了,这就导致抓包一些APP的HTTPS流量时无法正常捕获其数据包
如何在高Android的版本中抓包HTTPS?解决方案据查阅相关资料如下,按难度主观排序一下
本文着重介绍一下第2种与第3种方法,手机以可以解锁Bootloader的小米系列为例,这里不展开讲如何Root手机,相关资源很丰富,可自行搜索
方法优点
方法缺点
相关资源
提示:TrustAleady模块启用之后可以有效禁用证书校验跟客户端SSL Pinning
下载VirtualXposed APK后直接安装,紧接着再下载TrustAleady APK,TrustAleady APK需要使用VirtualXposed进行安装
之后在模块管理中勾选TrustAleady模块并启用,如图所示
接下来就是添加需要抓包的程序,然后回到VirtualXposed设置选项并选择重启
这个方法通吃绝大部分APP,唯一的缺点是如果在VirtualXposed中导入程序后,程序无法正常运行起来
则该方法无效
如果VirtraulXposed无法运行程序,则需要考虑别的方法了
IOS抓包或者Android低版本抓包都是办法,但也有自己的局限性,例如没有IOS客户端或者应用并不支持低版本的Android系统
如果我们可以将抓包软件提供的证书从用户证书变成系统证书,就可以解决这个问题
此方法需要ROOT过的Android系统,鉴于越来越少的国内Android手机支持ROOT,国外的二手手机不失为好的考虑,或者虚拟机也是一个不错的方案
无论是使用任何代理软件,抓取HTTPS流量的思路都是替换证书(中间人攻击),对于APP来讲,有2个难点
因此,内置证书只能解决第一点,针对第二点,则需要安装第三方ExXposed+插件通过HOOK的方式来绕过SSL Pinning了
本文对SSL Pinning不展开讲,只对内置证书步骤进行分解,大致如下
以MitmProxy抓包Android APP为例子,在运行MitmWeb之后访问 http://mitm.it 并下载代理证书,如图所示
下载的证书是CER格式的,我们将其转换为PEM格式
➜ openssl x509 -inform der -in mitmproxy-ca-cert.cer -out mitmproxy-ca-cert.pem
此处如果报错"unable to load certificate 140640294299008:error:0D0680A8:asn1 encoding ...",则直接将cer更改为pem即可
接下来我们需要以这张代理的PEM证书制作Android内置证书
# 制作Android的内置证书(一)
➜ openssl x509 -inform PEM -subject_hash_old -in mitmproxy-ca-cert.pem | head -1
e5c3944b
➜ cat mitmproxy-ca-cert.pem > e5c3944b.0
➜ openssl x509 -inform PEM -text -in mitmproxy-ca-cert.pem -out /dev/null >> e5c3944b.0
# 制作Android的内置证书(二)
➜ openssl x509 -inform PEM -subject_hash -in mitmproxy-ca-cert.pem | head -1
82635c12
➜ cat mitmproxy-ca-cert.pem > 82635c12.0
➜ openssl x509 -inform PEM -text -in mitmproxy-ca-cert.pem -out /dev/null >> 82635c12.0
根据以上步骤我们将得到2张证书,接下来连接Android手机,使用adb将证书推送至Android内置空间中
➜ adb push 82635c12.0 /sdcard/
82635c12.0: 1 file pushed, 0 skipped. 7.6 MB/s (1322 bytes in 0.000s)
➜ adb push e5c3944b.0 /sdcard/
e5c3944b.0: 1 file pushed, 0 skipped. 5.3 MB/s (1322 bytes in 0.000s)
接下来我们使用adb shell挂载/system分区为可读,然后复制证书到系统内置证书文件夹中
➜ adb shell
polaris:/ su
# 挂载system分区,然后复制2张Android证书到系统内部,更改其权限后重启机器
:/ mount -o remount,rw /system
:/ cp /sdcard/e5c3944b.0 /system/etc/security/cacerts/
:/ cp /sdcard/82635c12.0 /system/etc/security/cacerts/
更改我们导入的证书权限,然后重启手机
:/ chmod 644 /system/etc/security/cacerts/e5c3944b.0
:/ chmod 644 /system/etc/security/cacerts/82635c12.0
:/ reboot
重启完成之后查看内置证书区域,可以看到mitmproxy的证书已经在内置证书区域中,如图所示
对于Android APP抓包来说没有IOS来的简单快捷,毕竟现在IOS还可以信任用户证书,APP针对反抓包的也是越来越严格,例如
对于抓包数据来说,没有破解不了的应用,只有破解代价高到无法承受的APP