安卓逆向 -- 某SSL双向证书无法抓包

admin 2024年11月1日07:44:38评论44 views字数 3248阅读10分49秒阅读模式

本期内容所需要的工具:

  • 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直接是无法抓取到内容的

安卓逆向 -- 某SSL双向证书无法抓包

解决方法:用算法助手的justTrustMe 过掉单证书验证(老生常谈)
步骤1:在电脑上打开Reqable(pc),手机上也打开Reqable(根证书自行安装),将抓包内容跟pc端同步
打开滴滴车主以进行抓包

安卓逆向 -- 某SSL双向证书无法抓包

打开抓包发现,软件显示掉线了,并且也无法抓取到Host: 139.199.240.14:25641的内容,因为滴滴在这里开启了SSL验证(双向证书),单向验证通过justTrustMe的就能正常抓取到内容.
例如 抖音,快手等大厂都会采取这样的双向证书验证,那行现在已经知道了问题的关键,那么就找到办法解决关键问题
解决办法: 打开r0capture,r0capture的目录下,输入cmd,开启终端(用r0capture来抓取内容)
注意:r0capture需要开启frida-server或者frida-gadget来配合,牢友们都懂(逆向第一步就是先开frida,开启教程自行搜索)
r0capture需要的库自己pip安装,以避免无法使用的问题

安卓逆向 -- 某SSL双向证书无法抓包

输入 python r0capture.py -U 滴滴车主 -v -p iqiyi.pcap

安卓逆向 -- 某SSL双向证书无法抓包

如果电脑有个多个python环境,也可以 "D:UsersAdministratorminiconda3python.exe" r0capture.py -U 滴滴车主 -v -p iqiyi.pcap 指定python版本

r0capture已经成功抓取到网络数据,并且他会在r0capture文件的目录下生成日志和iqiyi.pcap(需要用鲨鱼鳍分析)
现在停止抓包,让我们来分析下抓取内容
打开r0capture文件的目录下生成日志 滴滴车主-1728542776.log 和 iqiyi.pcap(用Wireshark打开-拖进来)

安卓逆向 -- 某SSL双向证书无法抓包

从上面Reqable无法抓取到Host: 139.199.240.14:25641内容,因为加了ssl验证
我们可以在鲨鱼鳍里面找得到
打开日志 搜索 139.199.240.14 这个ip地址,因为我们知道是向这个地址请求

安卓逆向 -- 某SSL双向证书无法抓包

从日志中,我们可以看到 他向 host":"d-push.udache.com" 这个连接发起请求,还能很清晰看到请求时经过的代码
我们可以在鲨鱼鳍里面搜索host":"d-push.udache.com" ,或者搜索 139.199.240.14 这个ip 都可以
让我们打开找到的内容 来 一一进行分析

安卓逆向 -- 某SSL双向证书无法抓包

打开发现 其实并没有重要的数据,主要原因是如下几点:
1. 眼尖的牢友应该发现在 日志中 该请求最后经过加密

at com.android.org.conscrypt.ConscryptFileDescriptorSocket$SSLInputStream.read(Native Method)

安卓逆向 -- 某SSL双向证书无法抓包

这个是安卓原生库,主要就是用来加密 SSL请求的
很多软件 都用这个库来对自己的app来加密

2.主要是用来验证 证书是不是匹配上了,所有请求体内 就没什么数据内容
那么,我们就通过这个 com.android.org.conscrypt.ConscryptFileDescriptorSocket
来找到证书位置
首先他是一个安卓的原生库,所有一般 就不可能会魔改或者改变库名称
那很简单,其实反问一下gpt 它也能告诉你,哪个位置是读取证书
如果能读取证书,那为什么r0capture并没有导出证书出来呢
翻下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大法

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 < acceptedIssuers.length; i++) {                var cert = acceptedIssuers[i];                console.log("Certificate " + i + ": " + cert.toString());            }        } else {            console.log("[!] X509TrustManager not found");        }        // 调用原始方法         var result = this.verifyCertificateChain(certChain, authType);    console.log(" verifyCertificateChain result: " + result);         return result;    };});

主要是hook (verifyCertificateChain)这个方法
查看com.android.org.conscrypt.ConscryptFileDescriptorSocket的源代码
源码(https://github.com/google/conscrypt/blob/master/common/src/main/java/org/conscrypt/ConscryptFileDescriptorSocket.java)[不重要,爱看不看都可以]
就知道 这个函数是验证证书,所以通杀所有用到conscrypt

安卓逆向 -- 某SSL双向证书无法抓包

·

原文始发于微信公众号(逆向有你):安卓逆向 -- 某SSL双向证书无法抓包

  • 左青龙
  • 微信扫一扫
  • weinxin
  • 右白虎
  • 微信扫一扫
  • weinxin
admin
  • 本文由 发表于 2024年11月1日07:44:38
  • 转载请保留本文链接(CN-SEC中文网:感谢原作者辛苦付出):
                   安卓逆向 -- 某SSL双向证书无法抓包https://cn-sec.com/archives/3340870.html

发表评论

匿名网友 填写信息