Android平台HTTPS抓包解决方案及问题分析

Android平台HTTPS抓包解决方案及问题分析导出.0格式的证书后,可以使用MT管理器将.0文件复制到/etc/security/cacerts/目录下,或者通过adb remount然后push也可&#xf

导出.0格式的证书后,可以使用MT管理器将.0文件复制到/etc/security/cacerts/目录下,或者通过adb重新挂载然后push(这里稍微提到了,但是不要不要搜索它(不要搜索这个)SD卡内的目录)。

4. Firefox证书安装

Firefox 浏览器Firefox 有自己的一套CA 证书管理,无论是系统CA 证书还是用户CA 证书,但Firefox 不识别它们。此时,您需要通过特殊方式将CA证书导入到Firefox中。否则,当您浏览网页时,Firefox 将停止工作。

HttpCanary v2.8.0版本提供了Firefox证书导入选项。在“设置”>“SSL 证书设置”>“将HttpCanary 根证书添加到Firefox”下:

单击右上角的复制按钮,将URL 复制到粘贴板,保留此页面,打开Firefox,然后粘贴复制的URL。

当出现“下载证书”弹出框时,请务必手动检查网站是否使用“信任”进行标记,并且电子邮件用户是否使用“信任”进行标记。然后检查。

5. 公钥证书固定

证书固定是指嵌入在客户端服务器中的实际公钥证书。发出HTTPS 请求时,服务器发送给客户端的公钥证书必须与客户端内置的公钥证书匹配,请求才能成功。

在这种情况下,MITM服务器无法冒充真实服务器,因为MITM服务器创建的公钥证书与客户端安装的公钥证书不匹配。此时抓包会显示为app网络错误。饿了么等已知应用程序使用证书锁定。

此外,某些服务器使用自签名证书(不是由实际CA 颁发者颁发的证书)。在这种情况下,应用程序在发出请求时必须使用证书固定。

固定证书的常见方法是在您的应用程序中构建公钥证书(.crt 或.cer 格式),并在创建TrustManager 时将公钥证书添加到您的应用程序。许多应用程序模拟或加密其内置公钥证书以防止反向提取。例如饿了么将其伪装成png。当然,没有必要纯粹模拟或加密公钥证书。自欺欺人。

证书固定是数据包捕获的一个非常麻烦的障碍,但我们总有办法解决它。就是有点麻烦而已。

5.1 JustTrustMe破解证书固定

Xused和Magisk都有相应的模块来解密证书固定并实现定期抓包。

示例:github.com/Fuzion24/Ju.

破解的原理大致来说就是Hook创建SSLContext以及TrustManager相关的其他方法来移除修改后的证书。

5.2 基于VirtualApp的Hook机制破解证书固定

Xused和Magisk需要刷机等特殊处理,但如果不想费心刷机,也可以在VirtualApp中添加hook代码,使用VirtualApp打开目标应用程序并抓包。当然,一些开发者已经实现了相关功能。请参阅下面的详细信息。

github.com/rk700/Virtu…github.com/rk700/CertU…

但是,CertUnpinning 插件中的代码存在一个问题需要修复。

5.3 导入真正的公钥证书和私钥

如果客户端固定公钥证书,MITM 服务器必须维护与实际公钥证书匹配的私钥。如果开发者拥有真实服务器的公钥证书和私钥(例如百度的公钥证书和私钥,百度后端开发需要它们),则进入HttpCanary并导入常规数据包。您还可以完成捕获。

在“设置> SSL证书设置> 管理SSL导入证书”中,切换到服务器并导入公钥证书+.bks格式文件。

6. 双向认证

SSL/TLS 协议提供双向身份验证。这意味着除了客户端必须验证服务器的真实性之外,服务器还必须验证客户端的真实性。尽管这种情况一般很少见,但仍有一些应用程序启用了双向身份验证。例如,匿名社交应用Soul中的某些接口使用了双向身份验证。使用双向身份验证的HTTPS 请求也无法直接捕获数据包。

关于双向认证的原理。

首先,双向认证需要服务器支持,客户端必须拥有一组公钥证书和私钥。在SSL/TLS 握手过程中,服务器向客户端请求证书。客户端必须向服务器发送嵌入的公钥证书,服务器验证公钥证书的真实性。

这里的内置公钥证书与上面5中的固定公钥证书不同,内置公钥证书+用于双向认证的私钥是额外的一套。包含在公钥证书中,用于证书修改。

如果客户端同时使用证书固定和双向身份验证,则客户端必须拥有一组公钥证书以及一组公钥证书和私钥。第一组与服务器端公钥证书相同,用于客户端系统检查是否与服务器发送的证书相同,即证书是否被修改。 SSL/TLS握手时将公钥证书发送到服务器端,服务器端进行签名验证,即双向认证。

用于双向身份验证的公钥证书和私钥代表客户端的身份,因此它们是机密的,通常存储在.p12或.bks文件+密钥中。由于它内置于客户端中,因此存储的密钥通常会硬编码到客户端代码中。 S 一些应用程序,例如匿名社交应用程序,会将密钥写入so库以防止反编译。客户端有一种方法可以提取它。

6.1 双向认证抓包

本文以匿名社交应用为例,介绍如何为使用双向认证的应用抓包HTTPS。

如果你的服务器使用Nginx并且开启了双向认证,那么在抓包时你会看到400 Bad Request错误,如下所示。

有些服务器不返回404,请求直接失败。

有些服务器可能不会返回404,导致请求直接失败。

接下来我们看看如何使用HttpCanary配置双向认证抓包。

首先,解压APK 并提取.p12 或.bks 文件。二进制文件通常存储在raw 或assets 目录中。

将client.p12文件导入到手机中,在HttpCanary的设置-SSL证书设置-管理SSL导入证书中,切换到客户端(因为需要分配MITM客户端),导入.p12文件。

用于双向身份验证的公钥证书和私钥受密钥保护,并且需要密码。

通常可以通过逆向工程从APK 中提取密钥。这里省略了某些操作。输入密钥后,必须输入映射的域名。这里我们使用通配符*来映射所有相关的域名。

导入完成后,它将如下所示:

您可以点击证书详情查看详细信息。此client.p12 文件包含用于双向身份验证的公钥证书和私钥。

配置完成后,再次抓包查看效果。

可以看到,前面两个需要双向认证的400 Bad Request请求都成功了。

7. SSL重协商

某些服务器可能启用了SSL 重新协商。也就是说,服务器在SSL/TLS 握手成功后发送请求时需要重新握手。这种情况一般很少见,但已知的应用程序(例如10000 Community)可能会使用SSL 重新协商。

Android系统对SSL重协商的支持有限,因此部分系统版本抓包失败,表现为网络异常。 Android 8.1之前,SslSocket完全支持SSL重新协商,但SSLEngine不支持,HttpCanary使用SSLEngine解析SSL/TLS。 Android 8.1及更高版本支持SSL重新协商,因为SSLEngine和SslSocket是统一实现的。

因此,如果您确定您的服务器正在使用SSL重新协商,请使用8.1或更高版本的系统来捕获数据包。

8. 非HTTP协议抓包

如果经过上述检查后,HttpCanary 仍然无法抓包,则可能没有使用HTTP 协议。例如微信聊天、视频直播等不使用HTTP协议。在这种情况下,您将需要使用其他抓包工具,例如Packet Capture,它直接解析TCP/UDP协议。 HTTP协议数据包很可能是二进制而不是文本格式,因此即使它们到达时无法解析,也可以捕获它们。

##9.结论

数据包捕获是一项技术工作,需要对网络协议有大致的了解。对数据包捕获感兴趣的学生可以探索TCP、UDP、SSL/TLS、HTTP 和其他相关信息。

HttpCanary是一款专业的HTTP协议抓包工具,专注HTTP协议30年。不过,目前不支持QUIC/HTTP3 等新协议。

原文转载自:【威震王】(https://juejin.im/post/5cc313755188252d6f11b463)

《设计思想解读开源框架》

第一章热修设计

第1 节,AOT/JIT dexopt 和dex2oat

第2 节,热修复设计中的CLASS_ISPREVERIFIED 问题

第三节热修复设计的热修复原则

第四节Tinker的集成和使用(自动生成补丁包)

第2 章,设计插件框架

第1 节. 解释Class 和Dex 文件的结构

第二节Android资源加载机制详解

第三节四个主要组件的调用原理

第四节文件加载机制

第五节、Android系统服务实现原理

第3 章,组件框架设计

第一节、阿里巴巴开源路由盒——AR原理分析

第二节:APT编译时自动生成代码和动态类加载

第三节、Java SPI机制

第4 节,AOPIOC

第五节,手写组件的架构

第4 章,图像加载框架

第1 部分. 选择图像加载框架

第二节、滑动原理分析

第三节、手写图像加载框架实践

第5 章,设计网络访问框架

第1 部分:网络通信所需的基础知识

第2 节,解读OkHttp 源代码

第三节,Retrofit源码分析

第6 章设计RXJava 响应式编程框架

第1 节,链式调用

第2 节,扩展观察者模式

第三节,事件转换设计

第4 节,调度程序线程控制

第7章IOC架构设计

第1 节,依赖注入和控制反转

第2 节,ButterKnife 原则第1、2 和2 部分

第三节Dagger架构设计核心的加密

第8 章,Android 架构组件Jetpack

第1 节,LiveData 原则

第2 部分:导航如何解决tabLayout 问题

第3 节:ViewModel 如何了解视图生命周期和核心原则

第四节房间建造方法与技术

第5节,为什么dataBinding可以支持MVVM

第6 节,公开WorkManager 内核

第7 节,生命周期

本文包括不同方向的编程自学路线、面试题/访谈集、系列技术文章等等。资源持续更新中.

为什么taBinding可以支持MVVM**

第6 节,公开WorkManager 内核

第7 节,生命周期

[外部链接图像正在传输.(img-zsFaJQre-1720080413515)]

本文包括不同方向的编程自学路线、面试题/访谈集、系列技术文章等等。资源持续更新中.

[外部链接图像正在传输.(img-5pT7oJv1-1720080413516)]

# 以上Android平台HTTPS抓包解决方案及问题分析相关内容来源网络,仅供大家参考。相关信息请参见官方公告。

原创文章,作者:CSDN,如若转载,请注明出处:https://www.sudun.com/ask/92976.html

(0)
CSDN's avatarCSDN
上一篇 2024年7月4日 下午6:29
下一篇 2024年7月4日 下午7:05

相关推荐

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注