HOME
HOME
文章目录
  1. 0x01 替换系统证书
  2. 0x02 Magisk+Always Trust User
  3. 0x03 JustTrustMe
  4. 0x04 刷机
  5. 0x05 流量代理
  6. 参考

bypass android ssl pinning

在做app测试的时候,经常有抓不到包的情况,即使是导入了burp证书后,仍然无法抓取https的数据包,这种情况一般是遇到了ssl pinning。

0x01 替换系统证书

在android 7.0以前,系统导入burp证书为用户权限能够绕过部分未做证书校验的APP,但是7.0及以后应用默认不再信任用户证书,导入burp证书后仍然会提示证书错误,抓不到https的包。

这种情况下一般采用替换系统证书的方法,原理是将burp的证书直接导入为系统证书,前提是手机需要ROOT权限。导入后系统会把burp当成系统证书,自然就能中间人代理https流量了。

具体步骤如下:

1
2
3
4
5
6
7
8
9
10
11
12
# 下载burp证书,导出为cacert.der,然后转换为pem格式
openssl x509 -inform DER -outform PEM -in cacert.der -out cacert.pem
# 生成hash,得到一个hash 比如:9a5ba575
openssl x509 -subject_hash_old -in cacert.pem
mv cacert.pem 9a5ba575.0
# 上传为系统证书
adb push 9a5ba575.0 /system/etc/security/cacerts/
# 如果在push过程中显示readonly system,则需要remount
adb disable-verity
adb root
adb remount

系统证书的目录是:/system/etc/security/cacerts/ 每个证书的命名规则为:. Certificate_Hash 表示证书文件的 hash 值,Number 是为了防止证书文件的 hash 值一致而增加的后缀; 证书的 hash 值可以由命令计算出来,在终端输入 openssl x509 -subject_hash_old -in ,其中 Certificate_File 为证书路径,将证书重命名为 hash.0 放入系统证书目录,之后你就可以正常抓包了。

0x02 Magisk+Always Trust User

上述应用不认用户证书的解决方案还有一种,就是magisk加上MagiskTrustUserCerts。magisk类似于xposed框架,能够hook系统函数,AlwaysTrustUserCerts是该工具的一个插件,能够将用户导入的证书变成系统证书。

image-20200820102936183.png

在安装好后,进行正常的证书导入操作,证书就能直接导入到系统证书里边,较第一种方式方便许多。

该种方式可以通过recovery将Magisk刷入未root的系统中,可以绕过一些检测了root权限的应用。

0x03 JustTrustMe

在经过上述两种方法后,大部分的app都能抓到包了,但是还是能碰到少数情况仍然抓不到包,应用连不上网的情况。这种情况一般都是ssl pinning的场景。

应用中的代码对ssl证书进行了锁定。一般这种方法的思路就是通过xposed或者frida等hook框架对相应的证书验证代码hook进行绕过。一般app通常采用通用的解决方案,而xposed框架的JustTrustMe模块基本覆盖了这些类型,故本文不再探讨基于frida的自定义hook函数。

安装

安装方式比较简单,直接下载apk模块文件JustTrustMe,按照通用的apk文件安装方式。然后在Xposed框架中进行激活,然后重启生效。

image-20200820104447189

安装好后,再抓包,应用就能正常运行并抓取https数据包了。

0x04 刷机

在进行上述步骤操作时会碰到一些刷机问题,这里简单记录一下。

BL锁:现在的手机一般有BL锁(BootLoader锁),如果需要刷入第三方recovery或者第三方ROM

FastBoot:线刷时需要进入的模式,通过fastboot命令可以刷入recovery。

fastboot刷入的命令如下:

1
2
3
4
5
6
# 查看设备
fastboot devices
# 刷入recovery
fastboot flash recovery recovery.img
# 从新的boot启动
fastboot boot recovery.img

附件是windows版本的fastboot工具:fastboot.exe

TWRP:第三方recovery,相对于官方的recovery增加了很多功能,可通过该recovery进行卡刷升级等。可刷入xposed框架、Magisk框架等

0x05 流量代理

在做了以上操作后仍然有一种情况抓不到流量,就是应用不走配置代理。这种情况的解决思路是需要一个全局的代理工具,如内网渗透用到的proxychains或者proxifier,让所有的流量走统一的代理,然后使用burp抓包。因为默认的burp只能代理http流量,无法代理sock5,所以需要用到一个app工具:drony.apk

通过该工具可以配置代理流量,直接将手机的所有流量全局代理到burp上,这样就能抓包了。

具体使用方法比较简单,可自行搜索查询,不再赘述。

参考

  1. Android应用中https SSL pinning以及绕过的方法介绍

  2. Android SSL Pinning Bypass: Android 7-10

  3. JustTrustMe

  4. SSL Pinning Practice

  5. Frida.Android.Practice (ssl unpinning)