背景
抓包很常见,以前做开发的时候也经常用
无论是charles
还是finddler
等等
你是否遇到过https
一篇红和unkown
的情况?
2024年了,都是https
了把,http
屈指可数
那么我们如何抓包https
呢
证书
其实说白了,证书才是关键
我们抓包的本质,是将网络请求代理到某个软件上
换句话说,自己当“中间人”
那么我们就需要安装这个代理软件的证书了
Charles
1.本机PC安装证书
这样就安装完毕了
2.浏览器安装根证书
基本上看到这篇文章的,用的应该不是Edge就是Chrome
我们以Edge为例,其他浏览器自行搜索
打开浏览器设置
搜索证书
我们可以发现有个证书管理
很显然,我们需要导入证书到受信任的CA里
这会儿我们的Charles
就可以正常抓https了
3.安卓手机安装证书(安卓7以上)
下载证书
下载以后
大伙肯定都知道,安卓7以上,不让把证书安装到受信任的证书里
那么我要是非要放进去呢
Android 7.0 之后抓包 unknown 和证书无效的解决方案
这里摘抄一下大哥说的话
将抓包软件的证书安装成系统证书(需 ROOT)
系统证书目录:/system/etc/security/cacerts/其中的每个证书的命名规则如下:
.
文件名是一个 Hash 值,而后缀是一个数字。文件名可以用下面的命令计算出来:
openssl x509 -subject_hash_old -in
后缀名的数字是为了防止文件名冲突的,比如如果两个证书算出的 Hash 值是一样的话,那么一个证书的后缀名数字可以设置成 0,而另一个证书的后缀名数字可以设置成 1
Windows用户openssl
这个命令没有的话,用git bash
就可以了
在座的么有不会用git
的人吧
1 | openssl x509 -subject_hash_old -in charles-proxy-ssl-proxying-certificate.pem |
那接下来直接把charles-proxy-ssl-proxying-certificate.pem
改名为7515195b.0
然后把7515195b.0
移到安卓设备/system/etc/security/cacerts/
里
那这里有人会问了,我手上的安卓没有Root,咋整呢
呐呐呐,我就知道有人会问了
所以这里又有两种方案
3.1 安卓模拟器(亲测有效)
这里我们不得不又说明一下借鉴自哪里
使用charls抓包微信小程序的解决方案(终极解决,各种坑不怕,亲测可用,不服来战!)
没错,使用安卓模拟器,我也和这位博主一样,要抓小程序
所以我也使用了夜神模拟器(等我有影响力了,麻烦夜神给我打钱)
不过要注意,使用它的安卓7版本即可,12版本亲测没有root,9版本未测试
接着我们把上述的手机端的hash命名文件,放到对应目录下
即把7515195b.0
移到安卓设备/system/etc/security/cacerts/
里
这时候你会发现。嘻嘻,还是不能抓包
原因是模拟器的根证书里并没有出现根证书
这里告诉一下大家证书名,免得不好找XK72 Ltd
其实根本原因是,证书的权限不对
那么接下来,告诉大家怎么去修改权限
3.1.1 adb链接模拟器
找到模拟器的安装目录
里头有个bin
目录,目录下有个nox_adb.exe
例如D:\Safety\Nox\bin\nox_adb.exe
在这里打开cmd,并使用nox_adb.exe devices
查看模拟器是否连接上了adb
如果没连接上,重启模拟器即可
3.1.2 给证书文件添加权限
1 | nox_adb devices |
如果chmod
执行报错Read-only file system
,那执行下面的
1 | adb shell |
这下应该会重启模拟器,重启完,模拟器配代理,欧了~
你的小Charles
应该就能抓https
了
3.2 安卓上的虚拟机搭配xposed(思路,未测试)
给个思路
搭配
开始你的真机https抓包吧
4.补一个设置https
填两个*就好了
BurpSuite
其实是一样的
先找到自己的代理端口
使用内置浏览器打开并访问该端口
点击下载证书 https://burp
你会下到一张der
证书
我们只需要把他变成pem
格式
1 | openssl x509 -inform DER -outform PEM -text -in cacert.der -out cacert.pem |
其他一切同上