抓包https请求网络异常/无数据怎么破?歪歪老师来帮你!

以“贝壳找房”为例:

https>https://img-blog.csdnimg.cn/img_convert/e3c2aa4c731e8c861e17282456cf214b.png" width="455" />

Fiddler中看到的请求是这样的:

图片https>https://img-blog.csdnimg.cn/img_convert/dd2e2cc5d406d116b81fba80f020e53f.png" width="619" />

你可能开始找证书的问题:是不是Fiddler/Charles的证书没有导入的手机中去?配置一遍又一遍,又开始对比web端浏览器的https>https发现没问题。这时候你可能已经开始怀疑人生了。

那么究竟是不是证书的问题?

没错,就是证书的问题,但跟你想象中的证书有点不同,不是Fiddler内置证书的问题,而是App内置证书的问题 -- SSL Pinning机制

如果你想学习自动化测试,我这边给你推荐一套视频,这个视频可以说是B站播放全网第一的自动化测试教程,同时在线人数到达1000人,并且还有笔记可以领取及各路大神技术交流:798478386    

【已更新】B站讲的最详细的Python接口自动化测试实战教程全集(实战最新版)_哔哩哔哩_bilibili【已更新】B站讲的最详细的Python接口自动化测试实战教程全集(实战最新版)共计200条视频,包括:1、接口自动化之为什么要做接口自动化、2、接口自动化之request全局观、3、接口自动化之接口实战等,UP主更多精彩视频,请关注UP账号。https>https://csdnimg.cn/release/blog_editor_html/release2.3.6/ckeditor/plugins/CsdnLink/icons/icon-default.png?t=N7T8" alt="icon-default.png?t=N7T8" />https>https://www.bilibili.com/video/BV17p4y1B77x/?spm_id_from=333.337

什么是SSL Pinning?

首先,在https>https的建立连接过程中,当客户端向服务端发送了连接请求后,服务器会发送自己的证书(包括公钥、证书有效期、服务器信息等)给客户端,如果客户端是浏览器,则使用内置的CA证书去校验服务器证书是否一致。

那么为什么Fiddler能够抓的到浏览器的https>https请求呢?原因就是在于用户可以自由的将第三方的证书导入到浏览器内置的CA证书集中。

图片https>https://img-blog.csdnimg.cn/img_convert/3a326b12a77bf29ec5b46d00be952ad7.png" width="1080" />

明白上述一点之后,我们再回到App客户端,App默认是信任系统(Android or IOS)用户第三方安装的的CA证书集的,有一些App能够通过Fiddler抓到包的原因是因为:我们可以在系统的用户CA证书集中添加Fiddler的证书。这样App就能信任证书是安全的,放心的发送请求了。

图片https>https://img-blog.csdnimg.cn/img_convert/b613c60eeb8a20998e7a4cfbbd88f348.png" width="474" />

但是现在随着系统的更新,Google or Apple认识到安全越来越重要,所以就引入SSL-Pinning技术:开发者预先把证书相关信息预置到App中再打包,这样在https>https通讯过程中App本地可以与服务器返回的证书可以做对比,如果发现不一致,那么可能就是由于中间人攻击(比如Fiddler/Charles抓包工具),App客户端可以终止https>https链接。

而在新版本的系统规则中,应用只信任系统默认预置的CA证书,如果是第三方安装的证书(比如Fiddler安装的)则不会信任:

图片https>https://img-blog.csdnimg.cn/img_convert/8e70a2a87dda471d3da8fd37c1b3a604.png" width="480" />

解决方案

上面的都是一些理论方面的内容,到底该如何突破SSL Pinning机制能够抓到App的https>https请求包呢?

方案一:使用Android7.0以下的系统

目前已验证在Android 7.0或以上的系统有启用了对第三方证书的限制。但是在Android 7.0以下还是依旧可以将Fiddler/Charles的证书安装在用户的CA集中抓取https>https请求。

方案二:将Fiddler/Chales证书安装到系统默认预置的CA证书区域中

此种办法前提是需要root权限,但是现在很多新款手机获取root权限困难,所以此办法并不推荐。

方案三:反编译APK,修改AndroidManifest.xml文件

  • 有些APK加了壳,需要先进行脱壳处理

  • 再通过apktool等工具进行反编译

  • 在源码的res/xml目录添加network_security_config.xml文件,内容如下:

https>https://img-blog.csdnimg.cn/440747dfee504f2891a0dc035e056177.png" width="639" />

修改AndroidManifest.xml文件,在application标签中增加:

android:networkSecurityConfig="@xml/network_security_config"

https>https://img-blog.csdnimg.cn/9d2deb22c1b74bad9808930d5d4110e8.png" width="604" />

 此种方案比较适用于对反编译比较熟练的童靴

方案四:VitualXposed框架+JustTrustMe模块(推荐)

VitualXposed介绍:

Use Xposed with a simple APP, without needing to root, unlock the bootloader, or flash a system image

官网下载地址:https>https://vxposed.com/
简单来说,VitualXposed可以在不需要设备root的情况下,修改App的行为。此应用的工作原理类似于应用分身功能,会将应用安装到一个虚拟独立的环境当中,其内部会自带一个已经激活了的Xposed工具。

JustTrustMe介绍:

An xposed module that disables SSL certificate checking for the purposes of auditing an app with cert pinning

JustTrustMe是Github上面的一个开源项目,是xposed中的一个模块,用于禁止SSL证书验证。

官方链接:https>https://github.com/Fuzion24/JustTrustMe

操作流程:
  • 将VitualXposed安装到真机中,点击应用按钮->添加应用,将要调试的App、JustTrustMe.apk进行安装

https>https://img-blog.csdnimg.cn/4c3857d695b741459ff9646971783d83.png" width="516" />

  • 打开Xposed,选择左上角导航栏->模块,勾选JustTrustMe

https>https://img-blog.csdnimg.cn/942c9a83474847c8bb367611acc8436c.png" width="455" />

  • 重启VitualXposed应用,打开贝壳找房,通过Fiddler抓包,可以看到App请求正常,https>https请求能抓到

https>https://img-blog.csdnimg.cn/9c870880951644399a6e8f2f4057d35a.png" width="669" />

 https>https://img-blog.csdnimg.cn/8284d74c0fe44a58aedd54fae831108c.jpeg" width="459" />


http://www.niftyadmin.cn/n/5070822.html

相关文章

3d 贴图下载quixel

Quixel Megascans https://polyhaven.com/a/studio_small_03 Quixel Bridge:3D艺术家的宝库 在3D建模和渲染的世界中,找到高质量、适合项目的贴图素材至关重要。Quixel Bridge就是这样一个为3D艺术家提供大量免费贴图素材的资源库。在本文中&#xff…

体会jdk17对于空指针的增强

jdk17 // 可以清楚的看出来a.b.c.num中由于c是空指针,所以导致异常 jdk11 // 只报第6行空指针了,但是因为哪个变量,不知道

Configuration of phpstudy and sqli-labs

Go download the app: 小皮面板(phpstudy) - 让天下没有难配的服务器环境! (xp.cn) Have done. Then enter the program. Enable both functions: Apache and MySQL. Open the website: Next, Lets make the sqli-liab. GitHub…

一台 windows 电脑安装多个 node 版本,实现自由切换(不用 nvm)

背景 因为某些无法明说的原因,公司配的电脑无法执行操作 “系统环境变量”的写操作,只能操作“用户环境变量”。故 nvm 无法安装。但是,目前多项目用到的node 版本不同,需要安装多个版本。需要像 nvm 一样 安装多个版本后&#xf…

开源联合、聚力共赢丨2023 CCF中国开源大会10月开幕

2023 CCF中国开源大会(CCF ChinaOSC)拟于2023年10月21日至22日在湖南省长沙市北辰国际会议中心召开。会议将组织特邀报告、高峰论坛和领域分论坛等不同类型的活动。诚挚邀请开源领域学术界、企业界、教育界的学者、从业者、师生等前来参会,共…

划片机:半导体生产的必备设备

划片机是半导体加工行业中的重要设备,主要用于将晶圆切割成晶片颗粒,为后道工序粘片做好准备。随着国内半导体生产能力的提高,划片机市场的需求也在逐渐增加。 在市场定位上,划片机可以应用于半导体芯片和其他微电子器件的制造过程…

【Vue面试题一】、说说你对 Vue 的理解

文章底部有个人公众号:热爱技术的小郑。主要分享开发知识、学习资料、毕业设计指导等。有兴趣的可以关注一下。为何分享? 踩过的坑没必要让别人在再踩,自己复盘也能加深记忆。利己利人、所谓双赢。 面试官:有使用过vue吗&#xff…

linux 安装 jsoncpp包

报错 CMake Error at CMakeLists.txt:20 (find_package): Could not find a package configuration file provided by “jsoncpp” with any of the following names: jsoncppConfig.cmake jsoncpp-config.cmake 如何安装 jsoncpp sudo aot-get install libjsoncpp-dev