flutter抓包绕过

lutter的证书校验

起因:

最近工作上让做个app的复测,把apk发我后,开始尝试挂代理抓包,结果发现抓不到

为是证书没弄好,想着前几天不是刚导入了吗(雾)。又重新导入了下还是不行。然后各种lsp模块,objection都不行,r0capture也没数据。
然后jadx看了下,全是flutter字样,才想起来和flutter有关。 

开始百度(:

然后就开始各种找。
 

session_verify_cert_chain函数在第356行的ssl_x509.cc中被定义 

然后根据[原创]一种基于frida和drony的针对flutter抓包的方法-Android安全-看雪-安全社区|安全招聘|kanxue.com 这篇文章特征找,但是这个是32位的,所以在app安装的时候指定32位安装

 

写脚本绕过

32位

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

19

20

21

22

23

24

25

26

27

28

29

function hook_ssl_verify_result(address) {

Interceptor.attach(address, {

        onEnter: function(args) {

            console.log("Disabling SSL validation")

        },

        onLeave: function(retval) {

            console.log("Retval: " + retval);

            retval.replace(0x1);

        }

    });

}

function hookFlutter() {

    var m = Process.findModuleByName("libflutter.so");

    var pattern = "2D E9 F0 4F 85 B0 06 46 50 20 10 70";

    var res = Memory.scan(m.base, m.size, pattern, {

        onMatch: function(address, size){

            console.log('[+] ssl_verify_result found at: ' + address.toString());

        // Add 0x01 because it's a THUMB function

        // Otherwise, we would get 'Error: unable to intercept function at 0x9906f8ac; please file a bug'

            hook_ssl_verify_result(address.add(0x01));

        },

        onError: function(reason){

            console.log('[!] There was an error scanning memory');

        },

        onComplete: function() {

            console.log("All done")

        }

    });

}

然后启动就可以抓包了

64位

搜索ssl_client

 

然后就找到了这些

1

2

3

4

5

6

7

8

9

.text:0000000000596870 FF C3 01 D1                 SUB             SP, SP, #0x70

.text:0000000000596874 FD 7B 01 A9                 STP             X29, X30, [SP,#0x70+var_60]

.text:0000000000596878 FC 6F 02 A9                 STP             X28, X27, [SP,#0x70+var_50]

.text:000000000059687C FA 67 03 A9                 STP             X26, X25, [SP,#0x70+var_40]

.text:0000000000596880 F8 5F 04 A9                 STP             X24, X23, [SP,#0x70+var_30]

.text:0000000000596884 F6 57 05 A9                 STP             X22, X21, [SP,#0x70+var_20]

.text:0000000000596888 F4 4F 06 A9                 STP             X20, X19, [SP,#0x70+var_10]

.text:000000000059688C 08 0A 80 52                 MOV             W8, #0x50

.text:0000000000596890 48 00 00 39                 STRB            W8, [X2]

然后写脚本

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

19

20

21

22

23

24

25

26

27

28

29

function hook_ssl_verify_result(address) {

Interceptor.attach(address, {

        onEnter: function(args) {

            console.log("Disabling SSL validation")

        },

        onLeave: function(retval) {

            console.log("Retval: " + retval);

            retval.replace(0x1);

        }

    });

}

function hookFlutter() {

    var m = Process.findModuleByName("libflutter.so");

    var pattern = "FF C3 01 D1 FD 7B 01 A9 FC 6F 02 A9FA 67 03 A9 F8 5F 04 A9 F6 57 05 A9 F4 4F 06 A9 08 0A 80 52 48 00 00 39";

    var res = Memory.scan(m.base, m.size, pattern, {

        onMatch: function(address, size){

            console.log('[+] ssl_verify_result found at: ' + address.toString());

        // Add 0x01 because it's a THUMB function

        // Otherwise, we would get 'Error: unable to intercept function at 0x9906f8ac; please file a bug'

            hook_ssl_verify_result(address.add(0x01));

        },

        onError: function(reason){

            console.log('[!] There was an error scanning memory');

        },

        onComplete: function() {

            console.log("All done")

        }

    });

}

然后发现报错了

 

 

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

IDEA中的Run Dashboard

Run Dashboard是IntelliJ IDEA中的工具【也就是View中的Services】,提供一个可视化界面,用于管理控制应用程序的运行和调试过程。 在Run DashBoard中,可以看到所有的运行配置,以及每个配置的运行状态(正在运行&#xf…

嵌入式—— IIC

目录 一、初识IIC 1. 介绍 2. 理解 二、IIC的简单拆分 1. 物理层 特点: 2. 协议层 (1)IIC基本读写过程 具体过程描述: (2)通信的起始和停止信号 (3)数据有效性 &#xf…

模拟请求ElasticSearch

Step1 安装chrome的这个插件 Step2 打开插件,GET的json填什么。 在IDEA的debug模式,走到Java代码的searchBuilder, 在这个searchBuilder变量里,对里面query变量点右侧 view按钮, IDEA里会显示出一个json&#xff…

带着问题读源码——Spring MVC是怎么找到接口实现类的?

引言 我们的产品主打金融服务领域,以B端客户为我们的核心合作伙伴,然而,我们的服务最终将惠及C端消费者。在技术实现上,我们采用了公司自主研发的微服务框架,该框架基于SpringBoot,旨在提供高效、可靠的服…

10MHz 到 80MHz、10:1 LVDS 并串转换器(串化器)/串并转换器(解串器)MS1023/MS1224

产品简述 MS1023 串化器和 MS1224 解串器是一对 10bit 并串 / 串并转 换芯片,用于在 LVDS 差分底板上传输和接收 10MHz 至 80MHz 的并行字速率的串行数据。起始 / 停止位加载后,转换为负载编 码输出,串行数据速率介于 120Mbps…

优化:Dynamo根据构件坐标XY值排序

Hello 大家好!我是九哥~ 前一阵群里有个小伙伴咨询如何按 XY 坐标给桩编码,当时呢也没过多思考,就把常规的逻辑告诉他了,利用 Dynamo 自带的 List.SortByKey 节点,根据族放置坐标的 XY 值进行两次排序,就能…

跟着cherno手搓游戏引擎【19】抽象纹理

引入: 导入stb_image: GitHub - nothings/stb: stb single-file public domain libraries for C/C 下载复制stb_image.h的内容(8000多行),然后粘到如图位置 stb_image.cpp: #include"ytpch.h" #define STB_IMAGE_IM…

面试八股文(3)

文章目录 1.HashSet如何检查重复2.comparable和Comparator区别3.ConcurrentHashMap和Hashtable区别4.线程和进程5.并发与并行的区别6.为什么使用多线程7.使用多线程可能带来问题8.线程的生命周期和状态9.什么是上下文切换10.线程死锁11.产生死锁四个条件12.如何避免死锁 1.Hash…

双非本科准备秋招(14.1)—— 力扣刷题

今天做两个有点难度的题。 1、295. 数据流的中位数 手写堆实现: 加入元素: 如何维护一个中位数?我们考虑一下堆的特点,大顶堆堆顶是一个最大值,小顶堆堆顶是一个最小值,那么,如果我们可以把数…

NUXTJS安装始终报错无法正常运行问题解决

近日在了解NuxtJS,按照官方给出方法进行安装后,不是报错,就是安装成功后运行不了。执行npm run dev后始终运行出错,判断肯定是对应版本问题,沿着这方向研究,最终运行成功了。 文档地址:安装 - …

【C++初阶】--入门基础(一)

目录 一.命名空间 1.前言引入 2.namespace关键字 (1)前言 (2)域作用限定符 :: (3)命名空间域namespace ① 细节理解 ② 命名空间的名称相同 ③命名空间的嵌套 (4)命名空间的使用 ① 加命名空间名称及作用域限定符 ②使用using将命名空间中某个成员引入 ③ 使用u…

【内置对象·js】

数学对象 document.write("圆周率为 " Math.PI "<br>");日期对象 var date new Date(); // 实例化 Date 对象var month date.getMonth() 1; // 获取月份&#xff0c;取值为 0&#xff08;一月&#xff09;到 11&#xff08;十二月&#xff09;之…

某站平台的签名算法分享

先charles抓包&#xff0c;api.xxxxxx.com域名的包 分析包 看到路径参数如下 appkey1d8b6e7d45233436&build5531000&channeldw056&mobi_appandroid&mode0&oid326052200&plat2&platformandroid&ps20&statistics%7B%22appId%22%3A1%2C%22p…

Redis核心技术与实战【学习笔记】 - 16.Redis 缓存异常:缓存和数据库不一致

概述 只要使用 Redis 缓存&#xff0c;就必须面对缓存和数据库的一致性问题。 重要的是&#xff0c;如果数据不一致&#xff0c;那么业务应用从缓存中读取的数据就不是最新数据&#xff0c;这会导致严重的问题。比如说&#xff0c;我们把电商商品的库存信息缓存在 Redis 中&am…

机器学习_13_SVM支持向量机、感知器模型

文章目录 1 感知器模型1.1 感知器的思想1.2 感知器模型构建1.3 损失函数构建、求解 2 SVM3 线性可分SVM3.1 线性可分SVM—概念3.2 线性可分SVM —SVM 模型公式表示3.3 线性可分SVM —SVM 损失函数3.4 优化函数求解3.5 线性可分SVM—算法流程3.6 线性可分SVM—案例3.7 线性可分S…

如何读论文

如何读论文 0. 目的 单篇文章从头读到尾&#xff0c;可以&#xff1b; 世界上那么多篇文章&#xff0c; 都这样读&#xff0c; 时间上划不来。 适合你的文章就那么一小撮。 paper 的八股文结构&#xff1a; titleabstractintromethodexpconclusion 1. 第一遍 海选&#…

HiveSQL题——聚合函数(sum/count/max/min/avg)

目录 一、窗口函数的知识点 1.1 窗户函数的定义 1.2 窗户函数的语法 1.3 窗口函数分类 聚合函数 排序函数 前后函数 头尾函数 1.4 聚合函数 二、实际案例 2.1 每个用户累积访问次数 0 问题描述 1 数据准备 2 数据分析 3 小结 2.2 各直播间最大的同时在线人数 …

计算视图里的projection和aggregation节点区别

Projection 和 Aggregation到底有什么区别&#xff1f; 看名字就能看出来的。 那么在什么场景下用呢&#xff1f; 1. Projection就是投影&#xff0c;也就是说你本来的源里有什么&#xff0c;就直接给你拿出来。 除了这个&#xff0c;它使用的场景就是&#xff1a; 只映射需…

Framework - ActivityThread 应用启动UI渲染流程

一、概念 ActivityThread拥有 main(String[] agrs) 方法&#xff0c;作为程序的入口&#xff0c;是应用程序的初始化类。&#xff08;ActivityThread不是主线程&#xff0c;它在 main() 方法中实例化&#xff0c;是运行在主线程中。&#xff09;ApplicationThread是 ActivityT…

解析Excel文件内容,按每列首行元素名打印出某个字符串的统计占比(超详细)

目录 1.示例&#xff1a; 1.1 实现代码1&#xff1a;列数为常量 运行结果&#xff1a; 1.2 实现代码2&#xff1a;列数为变量 运行结果&#xff1a; 1.示例&#xff1a; 开发需求&#xff1a;读取Excel文件&#xff0c;统计第3列到第5列中每列的"False"字段占…