因为高版本的安卓默认不信任用户安装的证书导致没法抓包了,所以我们来搭建一个高版本的安卓测试环境,然后修改系统证书进行抓包吧。
本文章主要讲解 MAC 系统的安装,Windows 系统的用户也可以看看,知道原理后,再参考其他教程进行安装。
工具介绍
-
Android Studio: 这是一个谷歌官方推出的编写 Android APP 代码的编辑器,当然我们这里并不是要写代码,而是要用到这个编辑器自带的 AVD 也就是安卓模拟器。
-
adb : adb 是一个安卓系统调试工具,谷歌为安卓开发、测试提供了很多工具,这个工具集合都放在一个文件夹里,也没啥特定的名字,下载下来文件夹就叫
..../Android/sdk
, 而 adb 就是其中一个可执行文件,..../Android/sdk/platform-tools/adb
-
Proxy Toggle: 一个简单的 APP ,可以方便的开启和关闭手机是否启动代理,这样我们就不用去设置里面手动设置代理了。
-
burp: 最常用的抓包改包工具了,用来测试我们的环境搭建效果。
各工具的下载
- Android Studio : developer.android.google.cn/studio?hl=z... 直接访问官网,然后点击下载即可,然后选择自己系统对应的发行版本即可,基本上各种版本系统的都有,Windows、MAC Intel 芯片、MAC M芯片等等。下载完了点击安装就行了。
- adb : 安装完 Android Studio 后点击打开,会提示你,系统没有安装 sdk 工具包,是否现在安装,你直接点击是就行了,安装完成后,MAC 系统的默认路径是
/Users/xxxxx/Library/Android/sdk
, Windows 安装完的默认路径我不太清楚,大概在Program Files 或者 Program Files (x86)
里面的某个跟 Andordid 或者 google 相关的文件夹里面,当然你也可以直接在 PowerShell 中使用 whereis 命令查找。
如果最后没找到 adb 也无妨,自己去搜索一下,然后下载也行: developer.android.google.cn/tools/relea...
- Proxy Toggle : github 搜索一下应该能找到,我用的是这个:github.com/theappbusin... 下载下来先放在一边,等我们模拟器弄好了再安装。
- burp : 如果可以的话还是建议用官方正版的,暂时也可以用官方提供的免费社区版:portswigger.net/burp/commun...
创建一个模拟器
点击打开 Android Studio ,如果是第一次打开,会让我们选择创建一个项目,选个 Basic Activity 就行了,我们不关心项目是什么,只要进入主界面就行
进入主页面后,然后就是我红框框出来的几个部分是我们要用到的,其他的暂时不需要。
点击 Create device ,新建一个模拟器。注意! 千万不要选择这种带谷歌应用商店标志的手机型号,这种的无法 root 🥳
选择完手机型号后继续选择安卓系统型号,注意要选 Google APIs (要不然也无法 root ),(选 ABI 的时候最好是选 x64 位架构的,应为现在 32 位的东西很少了, 如果以后遇到 app 安装不上可以再建一个 32 位(也就是 x86)的试试)如果没有下载过,这里是需要点击下载的箭头,先进行镜像下载的(很慢)。
新建好了模拟器就可以点击开始按钮打开模拟器了。
下面就是模拟器打开后的模样,当然你也可以单独将模拟器拿出来,而不依赖 Android Studio, 这个后面会说。
配置 adb 工具
接下来我们配置 adb 工具的环境变量 和 安卓系统的文件读写权限
首先你可以看一下你自己用的 shell 的类型,比如 MAC 自带的是 zsh shell:
js
sanqiushu@sanqiushudeMacBook-Pro ~ % echo $0
zsh
接下来编辑对应 shell 的配置文件,正常来说 zsh shell 应该编辑 ~/.zshrc
文件的,bash shell 应该编辑 ~/.bash_profile
的,但是我用的是 zsh shell ,但是我编辑 ~/.bash_profile
竟然也可以。
js
sanqiushu@sanqiushudeMacBook-Pro ~ % cd && vim .bash_profile
# 然后将下面的代码加入到文件中
export ANDROID_HOME=/Users/xxxxx/Library/Android/sdk
export PATH="$ANDROID_HOME/emulator:$ANDROID_HOME/tools:$ANDROID_HOME/tools/bin:$ANDROID_HOME/cmdline-tools/latest:$ANDROID_HOME/cmdline-tools/latest/bin:$ANDROID_HOME/platform-tools:$PATH"
# 当然如果你不熟悉 vim ,可以直接打开对应的文件直接编辑的
sanqiushu@sanqiushudeMacBook-Pro ~ % cd && open .bash_profile
# 然后输入下面的命令使得配置生效, 直接关闭 shell 然后重新打开一个也行。
source .bash_profile
然后我们去以可写模式打开模拟器。
js
# 进入 sdk 的 emulator 目录
cd /Users/xxxxxx/Library/Android/sdk/emulator
# 查看模拟器名字(如果环境变量没有配置好,可能导致这里没有输出)
./emulator -list-avds
# 知道模拟器 id 后启动模拟器 (记得把刚才手动打开的模拟器先关机)
./emulator -avd 'Pixel_6_API_29' -writable-system
直接点击这个 X 就是关机
打开模拟器的可写模式后,我们就可以更改系统的证书了, 这样就可以正常抓包 https 了。
为了确保设备安全, 安卓系统会有一批自己信任的 CA 证书(根证书集),然后从 Android7.0 以后,系统允许每个应用可以自定义可信 CA 集。
而在 Android 中用户正常手动安装的证书都是会被放到用户证书集中,所以无论是 Filddler 还是 Charles 还是 burp 我们正常安装证书的话都只是把他们的证书安装到了用户证书集。
大部分应用为了安全默认只会信任系统预装的 CA 根证书集,而不会信任用户安装的 CA 用户证书集。所以我们的安装的证书是无效的。
所以我们可以把我们要安装的证书直接放到系统根证书集里面去,这样就会被这些应用信任了。
生成 burp 证书
开启 burp,然后浏览器设置代理,直接访问 http://burp/ ,可以打开 burp 的页面,点击右边的 CA Certificate
按钮就可以下载一份 burp 证书了。
然后我们使用 openssl 工具对其进行处理,kali 或者 其他 linux 应该都有这个工具
js
sanqiushu@sanqiushudeMacBook-Pro Downloads % openssl x509 -subject_hash_old -inform der -in cacert.der
9a5ba575
-----BEGIN CERTIFICATE-----
MIIDqDCCApCgAwIBAgIFAOgmzdowDQYJKoZIhvcNAQELBQAwgYoxFDASBgNVBAYT
C1BvcnRTd2lnZ2VyMRQwEgYDVQQIEwtQb3J0U3dpZ2dlcjEUMBIGA1UEBxMLUG9y
dFN3aWdnZXIxFDASBgNVBAoTC1BvcnRTd2lnZ2VyMRcwFQYDVQQLEw5Qb3J0U3dp
Z2dlciBDQTEXMBUGA1UEAxMOUG9ydFN3aWdnZXIgQ0EwHhcNMTQwOTE2MTAwMDU5
WhcNMzIwOTE2MTAwMDU5WjCBijEUMBIGA1UEBhMLUG9ydFN3aWdnZXIxFDASBgNV
BAgTC1BvcnRTd2lnZ2VyMRQwEgYDVQQHEwtQb3J0U3dpZ2dlcjEUMBIGA1UEChML
UG9ydFN3aWdnZXIxFzAVBgNVBAsTDlBvcnRTd2lnZ2VyIENBMRcwFQYDVQQDEw5Q
b3J0U3dpZ2dlciBDQTCCASIwDQYJKoZIhvcNAQEBBQADggEPADCCAQoCggEBAKDu
2x5sGndJZCvHLHQ2PkW5FQqIu8m+0+OztwfDSbNebRBv0mnW2aq+fsKjCdIgI9DO
k8RAAmwE6psAy/VdUxrK6GBVz1Mp9fEr2bT/5+9L/kxgahuNmL1o8oKzM/xjIbHs
rkeyqg8nqX4+IfekNHYamhCphxX3YU77NisObpbxNnETbgqMZY55sB57VY9Cn7y9
s/GpsCDFw8m0RlZeRVmPQt5SPq3VVBKJBVrI+zPPyXWhWvTcOuGmbsX9HdKk2Kp6
08Ho8FWNavFl8RVvcAdqjMtjrhuPRXk39pdau89ErL5UMWOje7vG4hPLsXn6Up2C
OTh7CnRUYK5J00KOJskCAwEAAaMTMBEwDwYDVR0TAQH/BAUwAwEB/zANBgkqhkiG
9w0BAQsFAAOCAQEADSB5q8lu/cRjyzk5LaE6K9Npt6UFLm1sCS2n7x8HvhgyFZ08
gylD82j/Ats5klvNAJ1Yzm5u50whNPBPke40lbhBrBiC8bLPM4z0w+8ERZFM+X/l
Q873u/S1+bfvliZyadHeZ93vXJu2zhliVdECGST3mtj1j8EnSO84oPmNDSXHs9+o
lD4YDqAk0FxNv7P9A0Ewoexe2APOUDLWHXYRXy8dRiODRthhWG2iiNsE1wXt4+5w
JsxTKebC8+ucf8DcRcIDYO3fz2HS0qVvcPjTBXOXeZ1qN+l+XR/bql/N65U8E7fR
PxoJjpn/ghK2EfbrrsUuVmaR2V3PIg8VPu+5MQ==
-----END CERTIFICATE-----
可以看到最上方输出了 hash : 9a5ba575
(根据自己的情况继续)
将 cacert.der 文件重命名为 9a5ba575.0
js
cd /Users/xxxxx/Library/Android/sdk/platform-tools
./adb root
./adb remount
# 先查看一下会不会倒霉有重名的证书,如果真的有,那么给我们的证书命明为 9a5ba575.1 即可
./adb ls /system/etc/security/cacerts/ | grep 9a5ba575
# 没有重名的就直接导入进去就行
./adb push /Users/xxxxx/Downloads/9a5ba575.0 /system/etc/security/cacerts/9a5ba575.0
然后就可以关闭模拟器了,再以后启动模拟器的时候就用命令启动(你也可以使用自动任务,做成 app 就可以点击启动了)
js
cd /Users/xxxxx/Library/Android/sdk/emulator && ./emulator -avd 'Pixel_6_API_29' -writable-system
安装 app
打开模拟器后,直接用 adb 命令安装,都不用传文件了。
js
adb install /path/to/app_file.apk
设置代理
打开 burp 设置,添加一个代理监听器,主要是设置 ip 为你的非 127 的 ip,如果是 127 的话,模拟器上的数据是代理不过来的。
然后安装 Proxy Toggle 这个 app ,然后设计代理 IP 和端口,点击按钮就可以开始抓包了。
打开浏览器,访问网页试试吧。