为了能破解掉滴滴,花了一天时间来解决滴滴SSL证书抓包问题
安卓手机一部(小米,vivo,oppo,华为,模拟器都可以[如用到frida-server就需root])
以上工具需要自己安装,安装工具的教程我就不赘述了,网上有,如有不懂安装联系UP
教程内容:解决app中有ssl证书验证,绕过并且抓取请求内容,并用frida修改抓取的内容实现修改定位
问题1:该要抓包首先要解决的是单向证书问题,如果用Reqable直接是无法抓取到内容的
QQ截图20241010125703.png (118.32 KB, 下载次数: 0)
下载附件
2024-10-14 14:08 上传
[color=]解决方法:用算法助手的justTrustMe 过掉单证书验证(老生常谈)
步骤1:在电脑上打开Reqable(pc),手机上也打开Reqable(根证书自行安装),将抓包内容跟pc端同步
打开滴滴车主以进行抓包
QQ截图20241010130301.png (341.12 KB, 下载次数: 0)
下载附件
2024-10-14 14:08 上传
打开抓包发现,软件显示掉线了,并且也无法抓取到
[color=]Host: 139.199.240.14:25641
的内容,因为滴滴在这里开启了SSL验证(双向证书),单向验证通过
[color=]justTrustMe
的就能正常抓取到内容.
例如 抖音,快手等大厂都会采取这样的双向证书验证,那行现在已经知道了问题的关键,那么就找到办法解决关键问题
解决办法: 打开r0capture,
[color=]在
[color=]r0capture的目录下,输入cmd,开启终端(用
r0capture来抓取内容
[color=])
[color=]注意:
[color=]r0capture需要开启frida-server或者frida-gadget来配合,牢友们都懂(逆向第一步就是先开frida,开启教程自行搜索)
[color=]r0capture需要的库自己pip安装,以避免无法使用的问题
QQ截图20241010131021.png (110.32 KB, 下载次数: 0)
下载附件
2024-10-14 14:08 上传
[color=]输入 python
[color=]r0capture.py -U 滴滴车主 -v -p iqiyi.pcap
QQ截图20241010133122.png (205.94 KB, 下载次数: 0)
下载附件
2024-10-14 14:08 上传
[color=]如果电脑有个多个python环境,也可以
"D:\Users\Administrator\miniconda3\python.exe" r0capture.py -U 滴滴车主 -v -p iqiyi.pcap 指定python版本
[color=]r0capture已经成功抓取到网络数据,并且他会在
[color=]r0capture文件的目录下生成日志和
iqiyi.pcap(需要用鲨鱼鳍分析)
现在停止抓包,让我们来分析下抓取内容打开
[color=]r0capture文件的目录下生成日志
滴滴车主-1728542776.log 和 iqiyi.pcap(用Wireshark打开-拖进来)
QQ截图20241010145405.png (115.75 KB, 下载次数: 0)
下载附件
2024-10-14 14:08 上传
从上面Reqable
[color=]无法抓取到
[color=]Host: 139.199.240.14:25641内容,因为加了ssl验证
[color=]我们可以在鲨鱼鳍里面找得到
打开日志 搜索
[color=]139.199.240.14 这个ip地址,因为我们知道是向这个地址请求
QQ截图20241010150906.png (239.62 KB, 下载次数: 0)
下载附件
2024-10-14 14:08 上传
从日志中,我们可以看到 他向 host":"d-push.udache.com" 这个连接发起请求,还能很清晰看到请求时经过的代码我们可以在鲨鱼鳍里面搜索host":"d-push.udache.com" ,或者搜索
[color=]139.199.240.14 这个ip 都可以
让我们打开找到的内容 来 一一进行分析
QQ截图20241014141734.png (83.67 KB, 下载次数: 0)
下载附件
2024-10-14 14:18 上传
[color=]打开发现 其实并没有重要的数据,主要原因是如下几点:
[color=]1. 眼尖的牢友应该发现在 日志中 该请求最后经过加密
at
[color=]com.android.org.conscrypt.ConscryptFileDescriptorSocket
$
[color=]SSLInputStream.read
(Native Method)
QQ截图20241014145036.png (46.46 KB, 下载次数: 0)
下载附件
2024-10-14 14:50 上传
这个是安卓原生库,主要就是用来加密 SSL请求的
很多软件 都用这个库来对自己的app来加密
2.主要是用来验证 证书是不是匹配上了,所有请求体内 就没什么数据内容
那么,我们就通过这个 com.android.org.conscrypt.ConscryptFileDescriptorSocket
来找到证书位置
首先他是一个安卓的原生库,所有一般 就不可能会魔改或者改变库名称
那很简单,其实反问一下gpt 它也能告诉你,哪个位置是读取证书
如果能读取证书,那为什么
r0capture
[color=]并没有导出证书出来呢
翻下r0capture的源代码就发现,作者只是在java层读取证书
如果软件调用com.android.org.conscrypt.ConscryptFileDescriptorSocket
走的是native层,那肯定是hook不到证书的
在滴滴车主-1728542776.log日志中也清楚的写到
at com.android.org.conscrypt.ConscryptFileDescriptorSocket$SSLInputStream.read(Native Method)
(Native Method)
(Native Method)
(Native Method)
所以为什么,有些app r0capture可以吐出证书,有些不行
ok 我们开始使用hook大法
[JavaScript] 纯文本查看 复制代码Java.perform(function () {
var ConscryptSocket = Java.use("com.android.org.conscrypt.ConscryptFileDescriptorSocket");
var methods = ConscryptSocket.class.getDeclaredMethods();
methods.forEach(function(method) {
console.log("Method: " + method);
});
ConscryptSocket.verifyCertificateChain.overload('[[B', 'java.lang.String').implementation = function (certChain, authType) {
var x509tm = this.sslParameters.value.getX509TrustManager();
if (x509tm) {
console.log(" X509TrustManager obtained");
// 获取受信任的证书
var acceptedIssuers = x509tm.getAcceptedIssuers();
for (var i = 0; i
[color=]主要是hook (
verifyCertificateChain
[color=])这个方法
查看com.android.org.conscrypt.ConscryptFileDescriptorSocket的源代码源码(https://github.com/google/conscrypt/blob/master/common/src/main/java/org/conscrypt/ConscryptFileDescriptorSocket.java)[不重要,爱看不看都可以]就知道 这个函数是验证证书,所以通杀所有用到conscrypt
QQ截图20241014150343.png (66.33 KB, 下载次数: 0)
下载附件
2024-10-14 15:03 上传
可以看到导出的证书,那么导出证书如何配合大黄鸟使用以及修改加密的请求体的方法下篇在讲!!
[