一次不成功的抓包过程

news2024/11/17 14:51:11

想搞Android app抓包,简单的方法,已经不起作用,打开charles代理工具,抓不到我的目标app任何请求,搞了两三天,也没成功。
我的目标APP里,经过apk反编译出来,看到有libflutter.so文件,想着开发商用flutter框架开发的此应用,准备用frida hook技术+postern工具+Charles代理工具,对其进行抓包

软件版本

Windows:win 10 专业版 64位
Python:python-3.12.0
frida:frida-16.1.4
frida-server:frida-server-16.1.4-android-x86_64
adb:34.0.5
Android模拟器:雷神模拟器
postern:Postern_3.1.3

软件安装

模拟器安装

大家推荐使用夜神模拟器,默认开启root,自带adb工具,开始用起来还行,后面用着直接卡死不动,换成雷神模拟器,雷神安装系统证书的时候,又各种权限不足,即时开启了root,也是权限受限,算求拉倒吧,最后换成逍遥模拟器,目前用着没啥问题,直接官网就可以下载,安装好了之后,在设置里看一下,是否开启了root,没开就开启

adb安装

下载安装包
Windows版本:https://dl.google.com/android/repository/platform-tools-latest-windows.zip
Mac版本:https://dl.google.com/android/repository/platform-tools-latest-darwin.zip
Linux版本:https://dl.google.com/android/repository/platform-tools-latest-linux.zip
将文件下载下来,解压缩到自定义的安装目录,然后配置一下环境变量,执行以下命令,也看看能不能识别到模拟器:

adb devices

Python安装

直接在官网下载,下载地址
在这里插入图片描述
根据自己的系统版本下载,一般都是64位的,建议不要下载embeddable版本,此版本绿色解压就可以使用,但是缺少一些工具,也需要自己配置环境变量

Frida安装

使用Python命令安装

pip install frida==16.1.4
pip install frida-tools==16.1.4

安装完之后,在cmd命令行查看一下,frida --version 查看版本

Frida-server安装

  • 第一步 下载

需要和frida的版本一样,下载地址
在这里插入图片描述
这4个安装包,具体下载哪个,需要根据自己的CPU版本对应,用下面的命令看一下:

adb shell getprop ro.product.cpu.abi

如果输出是x86,那就直接下载frida-server-16.1.4-android-x86.xz,如果输出是x86_64,那就下载frida-server-16.1.4-android-x86_64.xz
比如我的是x86,下载frida-server-16.1.4-android-x86.xz,下载完成之后,解压出 frida-server-15.1.0-android-x86。

  • 第二步 上传
    在自己的Windows系统中,进入cmd命令行,执行以下命令,上传到模拟器里的Android系统目录/data/local/tmp
adb push frida-server-16.1.4-android-x86 /data/local/tmp
  • 第三步 修改权限
    在自己的Windows系统中,进入cmd命令行,执行命令,连接到模拟器里
adb shell & adb root

如果没报错,就进入到模拟器里了,在接着执行

su
cd /data/local/tmp
chmod +x frida-server-16.1.4-android-x86
  • 第四步 修改权限
    运行frida-server,执行以下命令:
./frida-server-16.1.4-android-x86

没报错,就运行成功,命令行不能退出,退出了,程序就结束,想后台运行在上面命令结尾加一个&符号

  • 第五步 设置端口转发
    在自己的Windows系统中,进入cmd命令行,运行以下命令:
adb forward tcp:27042 tcp:27042
adb forward tcp:27043 tcp:27043

frida和frida-server通信需要用到这2个端口

  • 第六步 验证
    在自己的Windows系统中,进入cmd命令行,运行以下命令:
frida-ps -U

如果列出一堆进程清单,就表示安装成功

d:\hook>frida-ps -U
 PID  Name
----  --------------------------------------------------
1884  Postern
 169  adbd
 743  android.ext.services
 151  android.hardware.audio@2.0-service
 152  android.hardware.camera.provider@2.4-service
 153  android.hardware.cas@1.0-service
 154  android.hardware.configstore@1.1-service
 155  android.hardware.dumpstate@1.0-service
 156  android.hardware.gnss@1.0-service
 130  android.hardware.keymaster@3.0-service
 ......

postern工具安装

flutter框架在和服务器通信过程中,不会经过Android系统配置的wifi代理,所以在charles代理工具中,看不到APP发起的请求,需要安装postern工具,将请求直接代理到Charles,Postern是Android系统里一款代理/ 虚拟专用网络管理程序,是全局代理工具。
参考这篇的安装教程 postern安装&配置

编写Hook脚本

文件名frida_hook_flutter_ssl.js

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 disablePinning(){
  var address = Module.findBaseAddress('libflutter.so').add(0x5DC3CC)
  hook_ssl_verify_result(address);
}
Process.enumerateModules({
    onMatch: function(module){
        console.log('Module name: ' + module.name + " - Base Address: " + module.base.toString());
    }, 
    onComplete: function(){}
});
setTimeout(disablePinning, 1000)

执行脚本

在自己的Windows系统中,进入cmd命令行,frida客户端执行命令:

frida -U -p 3055 -l frida_hook_flutter_ssl.js
#或者用
frida -UF -l frida_hook_flutter_ssl.js

-U参数表示frida链接到设备,可以理解为进入到Android后台,
-p参数表示Android系统中运行的进程ID号,通过上面的frida-ps -U命令,可以查看APP的进程ID,第一列就是
-l参数表示,要执行的脚本
-UF表示Android系统当前最前端正在运行的App
执行完上面的脚本,报错:

[ASUS I003DD:😗** ]-> TypeError: cannot read property ‘add’ of null
at disablePinning (d:\hook\frida_hook_flutter_ssl.js:18)
at apply (native)
at (frida/runtime/core.js:51)

网上搜索了一下,也没找到太多人遇到这个问题,据说是,app安装在模拟器里,没有去加载libflutter.so库,通过上面的日志输出,也能看到结果,确实没有去加载libflutter.so库,所以脚本就报’add’ of null,难道要刷机的路线,真机获取root权限,在用这套方案抓包吗?

逆向分析

上面脚本里这个地址add(0x5DC3CC),怎么得来的,通过开发工具IDA_Pro_7.7,反编译os库检索出来的。具体参考这个方法,内容不一样没关系,但是过程差不多,就能找出这个地址:
flutter框架app抓包

参考文档:
对flutter开发的某app逆向分析
Flutter 逆向初探
使用frida破解flutter APP证书检测抓包
一种基于Frida和Postern的针对Flutter抓包的方法

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

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

相关文章

AM@导数的应用@二阶导数的应用@函数的性态研究@函数图形的绘制

文章目录 概念称呼说明驻点极值和极值点最值极值点和最值比较曲线的凹凸性凹凸性判定定理👺例证明 凹凸性和单调性无必然关系拐点寻找拐点👺 函数图形的绘制例 概念 本文讨论导数的应用:利用导数研究函数的性态相关定理主要通过Lagrange中值定理进行推导…

首篇大模型压缩论文综述

首篇大模型压缩综述来啦!!! 来自中国科学院和人民大学的研究者们深入探讨了基于LLM的模型压缩研究进展并发表了该领域的首篇综述《A Survey on Model Compression for Large Language Models》。 Abstract 大型语言模型(LLMs&a…

文件操作 IO

文件(File) 狭义的文件: 指的是硬盘上的文件和目录 广义的文件: 泛指计算机中很多软硬件资源(操作系统中把很多硬件和软件资源抽象成了文件, 按照文件的方式同意管理) 本章内容只讨论狭义的文件 路径 绝对路径: 以c: , d: 盘符开头的路径相对路径: 以当前所在的目录为基准(…

【问题思考总结】如何求椭圆的切线?【过椭圆外一点】

问题 今天做2009年数一的真题,发现第17题求切线十分难顶,我用的方法是切线和椭圆方程联立,还有切线斜率和椭圆上一点和远点斜率相乘等于-1的方法。 思考 经过思考后,我认为之前的那个属于是高中方法(还不完全是&…

Prometheus接入AlterManager配置邮件告警(基于K8S环境部署)

文章目录 一、配置AlterManager告警发送至邮箱二、Prometheus接入AlterManager配置三、部署PrometheusAlterManager(放到一个Pod中)四、测试告警 注意:请基于 PrometheusGrafana监控K8S集群(基于K8S环境部署)文章之上做本次实验。 一、配置AlterManager告警发送至邮…

手把手入门Node框架Egg.js

0.介绍 Egg.js 是一个面向企业级应用开发的 Node.js 框架,它建立在 Koa.js 之上,提供了一种更简单、灵活的开发方式。Egg.js 提供了一些默认约定和最佳实践,可以帮助开发者快速构建可靠、可扩展的应用程序。 基于 Koa.js:Egg.js …

spacy.load(“en_core_web_trf“)报错TypeError: issubclass() arg 1 must be a class

使用spacy时遇到的问题 写在最前面: 安装spacy和en_core_web_trf时需要保证二者版本一致 安装及查看对应spacy版本 安装 pip install spacy查看版本 import spacy spacy.__version__安装en_core_web_trf 直接安装(如果可以的话) pytho…

【论文阅读】以及部署BEVFusion: A Simple and Robust LiDAR-Camera Fusion Framework

BEVFusion: A Simple and Robust LiDAR-Camera Fusion Framework BEVFusion:一个简单而强大的LiDAR-相机融合框架 NeurIPS 2022 多模态传感器融合意味着信息互补、稳定,是自动驾驶感知的重要一环,本文注重工业落地,实际应用 融…

反转链表review

反转链表 /*** Definition for singly-linked list.* public class ListNode {* int val;* ListNode next;* ListNode() {}* ListNode(int val) { this.val val; }* ListNode(int val, ListNode next) { this.val val; this.next next; }* }*/ class …

Rust逆向学习 (2)

文章目录 Guess a number0x01. Guess a number .part 1line 1loopline 3~7match 0x02. Reverse for enum0x03. Reverse for Tuple0x04. Guess a number .part 20x05. 总结 在上一篇文章中,我们比较完美地完成了第一次Rust ELF的逆向工作,但第一次编写的R…

JVM(Java Virtual Machine)垃圾收集器篇

前言 本文参考《深入理解Java虚拟机》一书,本文主要介绍几个经典的垃圾收集器:Serial、ParNew、parallelScavenge、CMS、Serial Old、Parallel Old、G1 本系列其他文章链接: JVM(Java Virtual Machine)内存模型篇 JV…

2434: 【区赛】[慈溪2013]统计方格

题目描述 给出一张 n 行 m 列仅由黑白方格组成的黑白图片(行从上到下 1 到 n 编号,列从左到右 1 到 m 编号)。如下图是一张由 17 行 18 列方格构成的黑白图片,图片中的任意一个方格要么是白色,要么是黑色。 仔细观察这…

介绍Sigmoid函数的平移、平滑和翻转【基于Python可视化分析】

文章目录 简介Sigmoid函数Sigmoid函数曲线调控参数设置python可视化参考 简介 本篇博客介绍了具有S型曲线的Sigmoid函数,以及如何设置、调整Sigmoid函数的参数实现S曲线的平滑、平移和翻转操作。博客给出了Python代码示例,更加深刻形象。😆&…

hdlbits系列verilog解答(两输入与门)-06

文章目录 wire线网类型介绍一、问题描述二、verilog源码三、仿真结果 wire线网类型介绍 wire线网类型是verilog的一种数据类型,它是一种单向的物理连线。它可以是输入也可以是输出,它与reg寄存器数据类型不同,它不能存储数据,只能…

数据结构与算法 | 第二章:线性表

本文参考网课为 数据结构与算法 1 第二章线性表,主讲人 张铭 、王腾蛟 、赵海燕 、宋国杰 、邹磊 、黄群。 本文使用IDE为 Clion,开发环境 C14。 更新:2023 / 10 / 22 数据结构与算法 | 第二章:线性表 线性表总览线性结构概念特…

大数据技术学习笔记(三)—— Hadoop 的运行模式

目录 1 本地模式2 伪分布式模式3 完全分布式模式3.1 准备3台客户机3.2 同步分发内容3.2.1 分发命令3.2.2 执行分发操作 3.3 集群配置3.3.1 集群部署规划3.3.2 配置文件说明3.3.3 修改配置文件3.3.4 分发配置信息 3.4 SSH无密登录配置3.4.1 配置ssh3.4.2 无密钥配置 3.5 单点启动…

人工智能(6):机器学习基础环境安装与使用

1 库的安装 整个机器学习基础阶段会用到Matplotlib、Numpy、Pandas等库,为了统一版本号在环境中使用,将所有的库及其版本放到了文件requirements.txt当中,然后统一安装 新建一个用于人工智能环境的虚拟环境 mkvirtualenv ai matplotlib3.8…

Mybatis应用场景之动态传参、两字段查询、用户存在性的判断

目录 一、动态传参 1、场景描述 2、实现过程 3、代码测试 二、两字段查询 1、场景描述 2、实现过程 3、代码测试 4、注意点 三、用户存在性的判断 1、场景描述 2、实现过程 3、代码测试 一、动态传参 1、场景描述 在进行数据库查询的时候,需要动态传入…

【源码解析】Spring源码解读-bean的加载

Spring的整体流程其实就是通过配置 xml、注解将自定义bean类信息进行配置,然后通过BeanDefinitionReader读取配置信息,由Dom转换成xml解析成Docment。在通过加载的配置信息进行初始化Bean对象,然后在对象的前后进行处理,也就是不同…

2023-10-22

一、总线通信协议简介 总线是计算机系统中负责连接各个硬件的通信线路,它可以传输数据、地址和控制信号。通信协议是指双方实体完成通信所遵循的规则。总线通信协议是一种规定总线设备之间数据通信方式和方法的规则,它包括数据的通信方式、速率、格式、…