APP反抓包 - 客户端证书验证进阶(代码混淆)

news2024/11/25 4:02:38

1.关于混淆

  • 在安卓开发中,对于第三方的包是可以进行混淆的,例如:OKHttp3.Http.Cert.check 被混淆后可以是a.f.c.b 形式。
  • 在安卓开发中,系统包是无法混淆的,例如:java.security.KeyStore不会被混淆。

由于这种的情况的存在,再次审示我们之前的通用脚本,就会发现他是不通用的,例如:

  • 客户端证书校验的frida脚本【不通用,被混淆后无法用】

    Java.use('okhttp3.CertificatePinner');  
    Java.use('com.squareup.okhttp.internal.tls.OkHostnameVerifier');
    
  • 服务端证书校验的frida脚本【通用】

    Java.use("java.security.KeyStore");
    

那如果遇到有存在混淆的app,内部又加入了客户端证书校验,原来的绕过方式就都不能用来,怎么解决呢?

  • Hook系统底层必走的核心方法,获取调用栈
  • 根据调用栈向上寻找 客户端证书校验 代码位置,找其他被混淆后的 类名和方法名
  • 用frida Hook脚本的方式绕过

如下图:未混淆时,客户端证书校验的三个位置:

在这里插入图片描述

如下图:app混淆后,代码会变成这样:

在这里插入图片描述

2.客户端校验和系统方法

客户端校验的顺序分别是:

  • 第1步:调用证书校验
    在这里插入图片描述

  • 第2步:主机校验
    在这里插入图片描述

  • 第3步:pinner公钥校验,这个校验过程本质上是调用CertificatePinner类中的check方法。
    在这里插入图片描述

**注意:**内部按照顺序对这3个过程进行校验,只要有一个无法通过,后续的校验就不会再触发执行。

上述三个校验的触发位置是在:okhttp3.internal.connection.RealConnection类中的connectTls方法,例如:

在这里插入图片描述

2.1 调用栈

我是怎么确定触发校验的位置就是这里的?

最简单的方式就是对我们已开发完成的安卓程序(NetDemo)案例进行Hook,根据他们的调用栈来证明,例如:

Log.e("调用栈", Log.getStackTraceString(new Throwable()));

在这里插入图片描述

在这里插入图片描述

在这里插入图片描述

2.2 Hook系统位置

在上述调用栈中发现在证书校验时,底层会走 com.android.org.conscrypt.NativeSsldoHandshake方法。

所以,可以Hook他,根据调用栈向上找到证书校验的位置(其他验证也在旁边)。

Java.perform(function () {
   
    var NativeSsl = Java.use('com.android.org.conscrypt.NativeSsl');
    NativeSsl.doHandshake.overload('java.io.FileDescriptor', 'int').implementation = function (a, b) {
   
        console.log("参数:", a, b);
        console.log(Java.use("android.util.Log").getStackTraceString(Java.use("java.lang.Throwable").$new()));
        return this.doHandshake(a, b);
    };
});

// frida -UF -l 1.hook_check.js

在这里插入图片描述

对比未混淆和混淆的代码,可以找到相应的证书监测的位置:

在这里插入图片描述

3.滴答清单(案例)

以滴答清单(v6.3.3.0)为例,来展开代码混淆处理的过程。

3.1 现象

打开app,进入注册界面,点击【发送验证码】

  • 未设置代理,可以发送成功
  • 已设置代理,请求发送失败

在这里插入图片描述

那么,内部应该可能是做了客户端校验。

但是,使用justrustme 和 frida 脚本依然不好使,哪就有可能是内部进行了代码混淆。

3.2 寻找connectTls

因为触发客户端校验的位置是在:okhttp3.internal.connection.RealConnection类中的connectTls方法中,所以,我们可以先寻找到这个位置,看他被混淆成了啥?

在这里插入图片描述

可以通过hook系统方法 + 输入调用栈,定位 RealConnection类的connectTls方法

Java.perform(function () {
   
    var NativeSsl = Java.use('com.android.org.conscrypt.NativeSsl');
    NativeSsl.doHandshake.overload('java.io.FileDescriptor', 'int').implementation = function (a, b) {
   
        console.log("参数:", a, b);
        console.log(Java.use("android.util.Log").getStackTraceString(Java.use("java.lang.Throwable").$new()));
        return this.doHandshake(a, b);
    };
});

// frida -UF -l 1.hook_check.js

在这里插入图片描述

在这里插入图片描述

3.3 pinner校验

3.3.1 寻找位置

pinner校验比较常见,在这里也比较简单:

aVar2.f28365k.a(aVar2.f28355a.f28521d, a11.f28513c);

- 在安卓开发中,这个a方法其实就是 CertificatePinner类中的check方法
- 并且 aVar2.f28365k 返回的就是CertificatePinner类

在这里插入图片描述

在这里插入图片描述

所以,我们参考之前hook的check方法,来编写hook脚本,对此方法进行hook,例如:

在这里插入图片描述

Java.perform(function () {
   
    var pinner = Java.use('rk.f');
    pinner.a.overload('java.lang.String', 'java.util.List').implementation 

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1671964.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

2000-2022年上市公司供应链效率数据(含原始数据+结果)

2000-2022年上市公司供应链效率数据(含原始数据结果) 1、时间:2000-2022年 2、指标:年份、股票代码、省份、城市、区县、省份代码、城市代码、区县代码、首次上市年份、上市状态、股票简称、行业名称、行业代码、库存周转率、供…

单页源码加密屋zip文件加密API源码

简介: 单页源码加密屋zip文件加密API源码 api源码里面的参数已改好,往服务器或主机一丢就行,出现不能加密了就是加密次数达到上限了,告诉我在到后台修改加密次数 点击下载

解决宝塔Nginx和phpMyAdmin配置端口冲突问题

问题描述 在对基于宝塔面板的 Nginx 配置文件进行端口修改时,我注意到 phpMyAdmin 的端口配置似乎也随之发生了变化! 解决方法 官方建议在处理 Nginx 配置时,应避免直接修改默认的配置文件,以确保系统的稳定性和简化后续的维护…

过拟合和欠拟合的学习

1.什么拟合 就是说这个曲线能不能很好地描述某些样本数据,并且拥有较好的泛化能力。 2.什么是过拟合 过拟合就是曲线太过于贴切训练数据的特征了,在训练集上表现得非常优秀,近乎完美的预测/区分了所有得数据,但是在新的测试集上…

Springboot整合 Spring Cloud Gateway

1.Gateway介绍 1.是spring cloud官方推出的响应式的API网关框架,旨在为微服务架构提供一种简单有效的API路由的管理方式,并基于Filter的方式提供网关的基本功能,例如:安全认证,监控,限流等等。 2.功能特征…

java图片水印字体乱码问题

问题描述:在linux Centos-7.5_64bit系统的其他服务器上不乱码,在部署项目的正式服务器乱码 水印字体设置是 微软雅黑 Font wordFont new Font("微软雅黑", Font.ITALIC,(srcImgHeightsrcImgWidth)/50); 一.Springboot项目,部署在…

SSH 免密登录,设置好仍然需要密码登录解决方法

说明: ssh秘钥登录设置好了,但是登录的时候依然需要提供密码 查看系统安全日志,定位问题 sudo cat /var/log/auth.log或者 sudo cat /var/log/secure找到下面的信息 Authentication refused: bad ownership or modes...(网上的…

视频号小店怎么选品?给大家分享三个选品思维,让你快速脱颖而出

哈喽,大家好,我是电商花花,专注做电商的花花。 为什么我会说视频号小店是我们今年翻身,赚钱的最佳选择? 因为现在视频号小店不管是在流量上还是市场上,视频号小店都有着属于自己的优势,只要我…

Spring MVC(五) 文件上传

1 单文件上传 在程序开发中,有时候需要上传一些文件。我们在学习Servlet的时候,也做过文件上传的操作,只不过基于Servlet的文件上传操作起来过于复杂,因此所有的MVC框架都提供了自己的文件上传操作,基本上都是基于File…

SpringCloud微服务01-MybatisPlus-Docker

https://b11et3un53m.feishu.cn/wiki/MWQIw4Zvhil0I5ktPHwcoqZdnec 一、微服务介绍 单体架构所有功能集群在一个架构中,难以维护复杂需求 微服务之间是不同的TomCat要跨服务查询, 学习是如何拆分单体架构为微服务 二、MybatisPlus 1.快速入门 ①入门…

Win10弹出这个:https://logincdn.msauth.ne

问题描述: Win10脚本错误 Windows10家庭版操作系统开机后弹出这个 https://logincdn.msauth.net/shared/1.0/content/js/ConvergedLogin_PCore_vi321_9jVworKN8EONYo0A2.js 解决方法: 重启计算机后手动关闭第三方安全优化软件,然后在任务管理…

强化学习——马尔可夫过程的理解

目录 一、马尔可夫过程1.随机过程2.马尔可夫性质3.马尔可夫过程4.马尔可夫过程示例 参考文献 一、马尔可夫过程 1.随机过程 随机过程是概率论的“动态”版本。普通概率论研究的是固定不变的随机现象,而随机过程则专注于那些随时间不断变化的情况,比如天…

OpenHamrony 实战开发——LiteOS-M内核的中断管理

在程序运行过程中,当出现需要由CPU立即处理的事务时,CPU暂时中止当前程序的执行转而处理这个事务,这个过程叫做中断。当硬件产生中断时,通过中断号查找到其对应的中断处理程序,执行中断处理程序完成中断处理。 通过中…

Ubuntu安装VScode

Ubuntu安装VScode 前言: 1、Ubuntu安装VScode比较方便 2、我更喜欢source insight 1、获取到linux版本的VScode安装包 VSCode 下载地址是:https://code.visualstudio.com/ 2、得到安装包 3、复制到ubuntu中,使用命令安装 sudo dpkg -i cod…

jmeter分布式集群压测

目的:通过多台机器同时运行 性能压测 脚本,模拟更好的并发压力 简单点:就是一个人(控制机controler/调度机 master)做一个项目的时候,压力有点大,会导致结果不理想,这时候找几个人&a…

国际护士节庆祝活动向媒体投稿有方法很轻松

作为一名医院职工,我肩负着医院对外信息宣传的重任。在国际护士节这个特殊的日子里,我们医院举办了一系列庆祝活动,以表彰护士们的辛勤付出和无私奉献。然而,在将这些活动信息投稿至媒体的过程中,我最初却遭遇了诸多挑战。 起初,我采用传统的邮箱投稿方式,将精心撰写的稿件发送…

Docker运行出现iptables: No chain/target/match by that name报错如何解决?

在尝试重启 Docker 容器时遇到的错误信息表明有关 iptables 的配置出了问题。这通常是因为 Docker 需要配置网络,而 iptables 规则没有正确设置或被意外删除。具体到你的错误信息中,报错 iptables: No chain/target/match by that name 表示 Docker 尝试…

Java后端的接口参数两个interger 类型情况解决

get请求 &#xff0c;对应请求头 RequestParm, post请求&#xff0c; 对应请求体 &#xff0c;RequestBody 两个Integer参数情况 GetMapping("/insertStaffClass")public R<Void> insertStaffClass(RequestParam Integer staffId,RequestParam List<Integ…

Floyd+二分,蓝桥杯国赛2022[环境治理]

一、题目 1、题目描述 2、输入输出 2.1输入 2.2输出 3、原题链接 0环境治理 - 蓝桥云课 (lanqiao.cn) 二、解题报告 1、思路分析 考虑我们治理时间越长&#xff0c;灰尘度和越低&#xff0c;具有单调性 考虑 二分治理天数mid&#xff0c;1~n可以降低与其相连边 mid / n 点…

PyQt5中的QGraphicsView()

文章目录 1. 简介2. 一个简单的示例2. 加载一幅图片3. 常用方法示例 1. 简介 QGraphicsView是PyQt5中用于显示图形场景的小部件&#xff0c;它提供了许多常用的方法来控制视图的行为和属性。下面是一些常用的QGraphicsView方法&#xff1a; setScene(scene): 设置要显示的场景…