Advertisement

HTTPS双向认证破解抓包

阅读量:

近段时间研究了Android+SpringBoot环境下HTTP + TLS协议的抓包技术,在实验过程中主要涉及证书生成与管理。使用 JDK自带的Keytool工具生成证书并将其转换为bks格式,并添加了必要的第三方安全库bcprov-jdk15on-168.jar以满足描述了利用Xposed框架进行破解的过程及具体实现代码(如JustMePlush)。此外还探讨了双向认证的技术细节及配置方法,并通过Burp Suite等工具演示了抓包效果。整个研究过程中遇到了诸多问题和挑战,例如证书转码、环境配置等,并通过不断调试解决了这些问题。

最近因业务需求开始深入研究 HTTP/HTTPS 加密协议与抓包技术,在整个研究过程中确实耗费了不少时间和精力。好在最终还是顺利得出了结论,并整理成文以便于后续查阅和总结经验教训。
实验环境基于 Android 平台搭建,在开发过程中发现 JDK 设置较为复杂为了避免冗余操作选择统一使用 JDK 内置的 Keytool 工具生成数字证书。具体操作包括确保安全性的前提下将 bcprov-jdk15on-168.jar 添加至 JDK 环境中并完成必要的配置步骤。
以下是对 Android 平台中 TLS 证书管理的具体介绍:
#1. 介绍 Android 平台中 TLS 证书的 SSL Ping 揑定与解除过程
在本地存储中通常会将 TLS 证书存放在 assets 文件夹内(也可放置于其他位置只要能在本地找到即可)。单向认证仅需一个 TLS 证书即可完成验证流程。

图片.png

在初始化SSLContext 时把服务端的证书 放到TrustManagerFactory里

图片.png
图片.png

完成两种不同的证书绑定方式有两种途径:第一种是通过直接连接;第二种则是提取公钥进行验证。一旦完成证书绑定操作后(即使机器上安装了相应的抓包工具),通常也不会成功捕获数据——因为校验过程会失败并且不会返回任何结果信息。其实解决方法非常直接:只需在初始化阶段取消认证步骤即可实现解密功能。以下是具体的Xposed代码实现:

图片.png

市场上存在一些工具能够破解该绑定类似于Xposed + JustMePlush其基本原理与我所写的代码相似其源代码托管于GitHub仓库:https://github.com/OtherPart/JustTrustMe如对代码实现感兴趣则可访问该GitHub仓库查看

图片.png

2.HTTP + TLS双向验证 及破解

双向绑定Android端需要两份证书

图片.png

这是获取对应的KeyManagerFactory和TrustManagerFactory

图片.png

然后在SSLContext初始化时把 两个证书管理器当做两个参数放进去

图片.png

至此为止,在安卓端上已经实现了双向认证的实现。

该抓包工具在设置相应的证书参数时才能成功抓取网络包。

下面详细讲解配置步骤(以下以Burp Suite为例演示)

1.先设置 转发ip和port

图片.png

要与机器上设置的对应

图片.png

2. 设置证书

图片.png

上面写TLS 的验证域名

图片.png
图片.png

这个证书就是工程里的

图片.png

这个证书(其实也可以把xx.bks证书转成xx.p12证书,然后上传这个证书的)

图片.png

这里输入证书的密码,这个密码可反编译目标apk在里面找

图片.png

这是我用jadx反编译apk,在里面找到的密码。
添加证书,成功后是这样的

图片.png

这就是刚才添加的证书

图片.png

所有操作做完了,下面看下效果

3. 看下抓包效果

图片.png

【该包被成功捕获

值得注意的是

全部评论 (0)

还没有任何评论哟~