一次不成功的抓包过程

想搞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

将文件下载下来,解压缩到自定义的安装目录,然后配置一下环境变量,执行以下命令,也看看能不能识别到模拟器:

bash 复制代码
adb devices

Python安装

直接在官网下载,下载地址

根据自己的系统版本下载,一般都是64位的,建议不要下载embeddable版本,此版本绿色解压就可以使用,但是缺少一些工具,也需要自己配置环境变量

Frida安装

使用Python命令安装

bash 复制代码
pip install frida==16.1.4
pip install frida-tools==16.1.4

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

Frida-server安装

  • 第一步 下载

需要和frida的版本一样,下载地址

这4个安装包,具体下载哪个,需要根据自己的CPU版本对应,用下面的命令看一下:

bash 复制代码
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
bash 复制代码
adb push frida-server-16.1.4-android-x86 /data/local/tmp
  • 第三步 修改权限
    在自己的Windows系统中,进入cmd命令行,执行命令,连接到模拟器里
bash 复制代码
adb shell & adb root

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

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

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

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

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

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

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

bash 复制代码
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

javascript 复制代码
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客户端执行命令:

bash 复制代码
frida -UF -l frida_hook_flutter_ssl.js
#或者使用
frida -U -p 3055 -l frida_hook_flutter_ssl.js
#或者使用
frida -U -f com.*.* -l frida_hook_flutter_ssl.js

-U参数表示frida链接到设备,可以理解为进入到Android后台,

-p参数表示Android系统中运行的进程ID号,通过上面的frida-ps -U命令,可以查看APP的进程ID,第一列就是

-l参数表示,要执行的脚本

-UF表示Android系统当前最前端正在运行的App

-f表示我要抓包的app的包名,报名可以使用下面命令查看,前提是先在模拟器中把目标APP打开

bash 复制代码
adb shell "dumpsys window | grep mCurrentFocus"

上面命令执行结果

mCurrentFocus=Window{6af66e7 u0 com.. /com...main.FlutterWrapperActivity}

执行完上面的脚本,报错:

[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抓包的方法

相关推荐
宾有为4 天前
【Android】Proxyman 抓 HTTP 数据包
android·网络协议·http·抓包·proxyman
CYRUS STUDIO23 天前
frida脚本,自动化寻址JNI方法
android·运维·自动化·逆向·移动安全·jni·frida
代码讲故事1 个月前
性能测试:流量回放工具-GoReplay!结合一款无需CA证书即可抓取HTTPS明文的工具,简直无敌
网络协议·http·https·抓包·流量回放·ca·流量抓取
土小帽软件测试1 个月前
fiddler抓包17_简单接口测试(Composer请求编辑)
测试工具·fiddler·抓包·软件测试学习
土小帽软件测试1 个月前
fiddler抓包18-2_导出jmeter、postman脚本(带请求头)
测试工具·jmeter·fiddler·postman·抓包·软件测试学习
土小帽软件测试1 个月前
fiddler抓包18-1_导出jmeter脚本(jmx文件)
测试工具·fiddler·抓包·软件测试学习
土小帽软件测试2 个月前
fiddler抓包16_自动重定向(mock数据)
测试工具·fiddler·抓包·软件测试学习
Wuxiaoming1352 个月前
charles抓包flutter
flutter·抓包·charles
土小帽软件测试2 个月前
fiddler抓包07_抓IOS手机请求
测试工具·ios·fiddler·抓包·软件测试学习
白乐天_n2 个月前
FRIDA-JSAPI:Java使用
java·jsapi·frida