安卓7.0+https抓包新姿势(无需Root)

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了安卓7.0+https抓包新姿势(无需Root)相关的知识,希望对你有一定的参考价值。

参考技术A 在平常的安全测试过程中,我们都会拦截应用程序的HTTPS流量。通过向android添加自定义CA,可以直接完成此操作。但是,从Android 7.0以上开始,应用程序不再信任客户端证书,除非App应用程序自身明确启用此功能。

在下面这篇文章中,介绍一个新的 Magisk模块,通过Magisk模块自动将客户端证书添加到系统范围的信任存储区,这样就可以完成对App应用程序的Https抓包了。

拦截Android上的HTTPS,只需以下几步:

下面这些步骤做完后,就可以查看浏览器与服务器之间发送的HTTPS流量了。

这种方法同样适用于应用程序的Https流量,因为在默认情况下应用程序会信任所有已安装的用户证书。

补充说明

厂商阻止Https抓包的方式:
阻止应用程序流量被截获的一种方法就是为应用程序本身安装专有证书。这就意味着在每个SSL连接上,服务器提供的证书将与本地存储的证书进行比较。只有服务器可以提供正确的标识,SSL连接才会成功。这是一个很好的安全功能,但实现起来是比较麻烦的,

我们知道从Android7.0开始,默认情况下,应用程序已经不再信任用户证书。
在开发阶段,开发人员可以通过更改应用程序中的AndroidManifest.xml文件,来配置networkSecurityConfig属性,选择接受用户证书,即可完成对应用程序的Https抓包分析测试。

还有一种方法是反编译App,修改和重新编译应用程序,如果该App应用程序有加壳,加密,等配置,那反编译的过程将非常困难。可以在warroom.securestate.com上找到App的反编译教程。

还有另一种方法是将用户证书添加到系统存储中。存储目录位于:/system/etc/security/cacerts,包含每个已安装根证书的文件。但这是需要对/system/etc/security/cacerts目录有读、写的权限,正常的手机没有Root,是不具备此项功能的。如果把手机Root,并且这是一项非常危险的操作。

Magisk是一个“通用无系统接口“,可以在不改变系统本身的情况下创建系统的修改掩码。”Magisk不修改/ system分区目录,所以这是一个非常好的抓包解决方式,其中应用程序已经增强了root检测。通过目标应用程序来激活“Magisk Hide”,使Magisk变得完全不可见。

Magisk还支持相当容易创建的自定义模块。为了将任何用户证书识别为系统证书,我们制作了一个简单的Magisk模块,可以在我们的github上找到: https://github.com/NVISO-BE/MagiskTrustUserCerts

该模块的功能如下,非常基础:

安装完后,Magisk模块的内容安装在/magisk/trustusercerts/上。此文件夹包含多个文件,但最重要的是系统目录。此目录自动与real/ system目录合并,实际上不会触及到/system分区目录。因此,/magisk/trusteusercerts/etc/security/中的所有证书都将以/system/etc/ security结尾。

该模块使用如下:

安装后,证书将显示在系统范围的信任存储中,并受应用程序信任:

当然,如果应用程序自身已做了专用SSL连接,仍然无法拦截HTTPS流量,但这个小模块使Android7.0+应用程序的运行方式与Android之前的7.0以下应用程序相同。

英文原版链接: https://blog.nviso.be/2017/12/22/intercepting-https-traffic-from-apps-on-android-7-using-magisk-burp/

安卓手机https抓包指导

由于安卓7.1后采用了SSL pining技术,导致即使在手机或PC端已安装根证书场景下,抓出来的包仍然显示Tunnel to 443;解决办法就是xposed + JustTrustMe;

Xposed框架安装

安装Xposed框架的前提是手机具有root权限,由于我用的华为荣耀V10手机在出厂时对BootLoader加了锁,因此需要先对其解锁后再root;

  1. 淘宝找商家帮忙获取BootLoader解锁码,解锁码是16位数字;记得当时我是花了50块钱解锁BL,对方说花100块可以直接root, 我以为解锁BL后很容易就可以root,被我断然拒绝;事后看真应该听人家的,少吃两顿饭,能省不少时间在上面;解锁后手机系统从EMUI 10.0变成EMUI 8.0了
  2. 双击打开华为工具箱,点击解锁bootloader后输入16位解锁码,然后根据指引解锁华为手机;
  3. 解压His96X_TWRP_8.X_v2(rec).rar,双击run.bat根据里面的教程刷入第三方recovery;
  4. 在手机上安装XposedInstaller_3.1.5.apk,然后将xposed-v90-sdk26-arm64-beta4-test1.zipxposed-uninstaller-20180117-arm64.zip放到内存或SD卡上;
  5. 进入到recovery界面(关机状态下同时按住开机键+音量上键进入,或者在手机连上电脑情况下通过华为工具箱重启到Recovery进入),点击“安装”后选择上一步所放zip的目录刷入重启即可;
  1. 对于安卓8.0系统,一定要用xposed-v90-sdk26-arm64-beta4-test1这个xposed框架,其他如xposed-v90-beta3会出现刷完变砖的情况;
  2. 上面所提软件都归档在这里,提取码为k6ij

JustTrustMe安装

安装完Xposed框架后,下载JustTrustMe并安装(注意该apk安装后是没有桌面图标的),安装完后进入xposed->模块,勾选即激活了,后面抓包遇到https消息就可以正常解析出来了;

安装抓包软件

  • 手机端:Packet Capture
  • PC端:Fiddler

FAQ

1. adb devices返回could not read ok from ADB Server

问题现象:开发者模式已打开、USB调试开关已打开情况下,使用奇兔刷机助手或者华为手机实用工具箱都连接不上手机,adb devices则弹出如下错误

问题原因:5037端口被占用了,netstat -ano | findstr 5037检查一下

解决办法:Ctrl + Alt + Delete打开任务管理器,找到该pid,关闭任务

2. adb devices返回unauthorized

当前还未找到办法,当前使用了奇兔刷机的TWRP来安装xposed框架;

3. 卸载华为手机原生应用

参考帖子:技巧 | adb助你华为手机免ROOT卸载预装软件

以上是关于安卓7.0+https抓包新姿势(无需Root)的主要内容,如果未能解决你的问题,请参考以下文章

安卓7.0及以上版本抓包https失败解决方法

charles——OpenSSL——安卓7.0以上https抓包

charles——OpenSSL——安卓7.0以上https抓包

微信7.0以上版本fiddlerCharles抓包报HTTPS证书信任问题通报

安卓手机mitmproxy抓包

新冠疫苗预约Fiddler抓包新冠疫苗预约接口及脚本实现