加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 综合聚焦 > 资源网站 > 资源 > 正文

安卓手机微信7.0.4调试小程序抓包https请求失败的问题和解决

发布时间:2020-12-14 19:20:35 所属栏目:资源 来源:网络整理
导读:注意:阅读本文需要一台已经root的安卓手机! 说明 系统: MacOS 10 .13 .6 手机:小米6(已 root )抓包工具: Charles 微信版本:7 .0 .4 现象 安卓手机无法通过Charles代理抓包https请求,我前天(2019年04月16日)用的7.0.3不知道为什么能抓到,昨天手残

注意:阅读本文需要一台已经root的安卓手机!

说明

系统:MacOS 10.13.6
手机:小米6(已root)
抓包工具:Charles
微信版本:7.0.4

现象

安卓手机无法通过Charles代理抓包https请求,我前天(2019年04月16日)用的7.0.3不知道为什么能抓到,昨天手残更新到7.0.4就不行了。而iOS(iPhone5S 12.1.4)没有问题。

查找相关资料,都说微信升级到版本7之后就限制了用户证书凭据。根据网上较多的推荐方案,建议把证书放在系统证书存放目录下,那这就?需要Root手机?了,如果没有,以下内容不适合阅读。

接下来,我尝试将Charles生成的证书放在手机的系统证书中,并没有那么顺利,很失败!我慢慢来讲解一下。

步骤

生成Charles证书

我们要生成一个可以存放在系统证书目录下的可被识别的证书。

手机代理设置好了后,手机访问:<chls.pro/ssl>下载下来证书,名称是这样的?charles-proxy-ssl-proxying-certificate.pem?(你把这个文件搞到电脑上,假设该证书存在电脑的路径:?~/charles-proxy-ssl-proxying-certificate.pem?)。

在你的电脑?终端?通过这个命令生成一个hash值:

openssl x509 -subject_hash_old -in ~/charles-proxy-ssl-proxying-certificate.pem

可以看到输出了类似如下

P750TM:webs whidy$ openssl x509 -subject_hash_old -in ~/certificate.pem 
07e87b3d
-----BEGIN CERTIFICATE-----
MIIFYjCCBEqgAwIBAgIGAWeQpfWHMA...
....
77JclxPc0UdJHi5rOf7w+LU8YZFPdMTLa/c2JjMlspt08UeQVDE=
-----END CERTIFICATE-----

将证书更名?07e87b3d.0?注意后缀!

接下来你可以用任意手段将该文件拷贝至手机的?/system/etc/security/cacerts/?目录,如果成功则再次尝试抓包,如果失败,请继续看。

超级终端操作

如果不嫌麻烦的话,你完全可以在安卓手机上面的超级终端(自行下载的工具)进行以下操作,但是我没有这样,我在MacOSX中启用adb连接操作手机,如果你正有此意,请按照我的方式操作。

电脑终端执行以下命令(这里不介绍brew,不理解的自行学习)

brew cask install android-platform-tools

装好后,数据线连上手机,测试一下

没报错,且大概出现以下信息则正常:

然后获取root权限,尝试将文件?07e87b3d.0?拷贝到?/system/etc/security/cacerts/

获得权限后,直接执行下面命令将证书放入系统目录。

push ~/07e87b3d.0 /system/etc/security/cacerts/

如果成功了,请尝试抓包。如果提示失败,比如权限不足,只读啥的,反正大概错误信息如下:

P750TM:/ whidy$ adb push ~/07e87b3d.0 /system/etc/security/cacerts/
adb: error: failed to copy '/Users/whidy/07e87b3d.0' to '/system/etc/security/cacerts/07e87b3d.0': remote couldn't create file: Read-only file system
/Users/whidy/07e87b3d.0: 0 files pushed. 0.0 MB/s (1947 bytes in 0.119s)

那就要继续折腾了。网上抄到的chmod 777目前是不管用的。要通过mount的相关操作来解决这个问题。

装载可写的system目录

查看当前system目录挂载在哪里?mount?,可以得到大致如下:

rootfs on / type rootfs (ro,seclabel,0); font-weight: bold;">size=2828452k,0); font-weight: bold;">nr_inodes=707113)
tmpfs on /dev type tmpfs (rw,0); font-weight: bold;">nosuid,0); font-weight: bold;">relatime,0); font-weight: bold;">size=2912600nr_inodes=728150,0); font-weight: bold;">mode=755)
devpts on /dev/pts type devpts (mode=600)
proc on /proc type proc (gid=3009,0); font-weight: bold;">hidepid=2)
sysfs on /sys type sysfs (relatime)
selinuxfs on /sys/fs/selinux type selinuxfs (relatime)
/dev/block/dm-0 on /system type ext4 (discard,0); font-weight: bold;">data=ordered)
debugfs on /sys/kernel/debug type debugfs (none on /acct type cgroup (cpuacct)
none on /dev/stune schedtune)
tmpfs on /mnt mode=755,0); font-weight: bold;">gid=1000)
none on /config type configfs (none on /dev/memcg memory)

注意到?/dev/block/dm-0 on /system type ext4 (ro,seclabel,relatime,discard,data=ordered)?这一行,后面括号有个ro,代表readonly!

接下来尝试修改为可写(?rw?)状态:

mount -o rw,remount /dev/block/dm-0 /system

如果成功了,就试试将文件拷贝进去,失败了,例如提示:?'/dev/block/dm-0' is read-only,请继续阅读。

这里参考?Android O,failed to mount /system,/dev/block/dm-0 is read only?,一顿操作!我这边是这样的:

关闭验证是要重启设备的。执行重启后,继续:

再执行?mount?发现结果跟刚才不一样了,找到有system的那一行发现这样的

/dev/block/sde43 on /system type ext4 (rw,data=ordered)

已经可写了,我试试拷贝进去。执行?adb push ~/07e87b3d.0 /system/etc/security/cacerts/,出现以下结果:

P750TM:/ whidy$ adb push ~/.0 /system/etc/security/cacerts/
/Users/whidy/07e87b3d.0: 1 file pushed. 0.1 MB/s (1947 bytes 0.022s)

应该就完成了。再去我的小米6手机里面的?设置 > 更多设置 > 系统安全 > 加密与凭据 > 信任的凭据 > 系统?里面看看,滚到最低部,ok,证书导入成功了。再去抓包看看~

我这文章是边写边记录的,现在可以看到https请求的抓包已经Ok啦~

最后

我建议最后还原之前操作的?disable-verity?,这样操作一下:

行了差不多就这些了。

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读