脚踢[滴滴车主app],拳打SSL双向证书无法抓包-1

查看 113|回复 10
作者:885604300   
开过滴滴司机的牢友都知道,滴滴是个吸司机血的平台,up也开过了三年滴滴的老司机了,已经被平台的规则恶心坏了
为了能破解掉滴滴,花了一天时间来解决滴滴SSL证书抓包问题
  • 本期内容所需要的工具:
  • Reqable(Reqable)
  • JADX(反编译工具)[Releases · skylot/jadx (github.com)]
  • r0capture(无视证书抓包)[r0ysue/r0capture: 安卓应用层抓包通杀脚本 (github.com)]
  • Wireshark(鲨鱼鳍,分析抓包内容)[Wireshark ·下载]
  • FrIDA(HOOK代码,frida-server或者frida-gadget)
  • 滴滴车主app(已去签)[https://pan.baidu.com/s/1EBjFglZnjqyP4IiQ4yXGzQ?pwd=1111]

    安卓手机一部(小米,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 上传




    可以看到导出的证书,那么导出证书如何配合大黄鸟使用以及修改加密的请求体的方法下篇在讲!!





    [

    证书, 下载次数

  • ghss   

    请合理讨论技术问题,不要在论坛发布容易引起争论的内容,这样会给论坛带来麻烦,可能让大家最后一点点发布技术交流的地方都没有了。
    75769837   

    我说怎么不来单呢,都让你楼主抢去了
    885604300
    OP
      

    建议修改一下激烈言论,环境就这样.鲁迅都待不住了.
    d669029   

    留个位置
    qclient   

    修改了有什么用啊
    xixicoco   

    先另存为html和pdf保存下,估计快和谐了,一直困扰双向证书认证的请求,抖音app端抓包抓不了,这次学到了,谢谢楼主,赏鸡腿
    wasm2023   

    发现ROOT检测特征   [dex]: /system/bin/su->classes9.dex
    发现模拟器检测特征 [dex]: 000000000000000->classes9.dex
    发现ROOT检测特征   [dex]: /system/xbin/->classes7.dex
    发现模拟器检测特征 [dex]: test-keys->classes7.dex
    发现ROOT检测特征   [dex]: /data/local/bin/su->classes2.dex
    发现模拟器检测特征 [dex]: goldfish->classes2.dex
    发现ROOT检测特征   [dex]: /data/local/bin/su->classes.dex
    发现模拟器检测特征 [dex]: test-keys->classes.dex
    发现模拟器检测特征 [dex]: test-keys->classes10.dex
    发现反调试检测特征 [dex]: threadCpuTimeNanos->classes10.dex
    发现模拟器检测特征 [dex]: 000000000000000->classes8.dex
    s1986q   

    感谢分享
    wle94036   

    你那个算法助手可以分享。
    您需要登录后才可以回帖 登录 | 立即注册

    返回顶部