一次不成功的抓包过程

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

相关推荐
切糕师学AI7 天前
Web 调试代理工具 Fiddler
测试工具·fiddler·抓包·web 调试代理工具
留白的云9 天前
Charles抓包是乱码
抓包
胡楚昊1 个月前
frida labs通关
安全性测试·frida
小白用python2 个月前
雷电模拟器安装charles证书精要
抓包
zfj3212 个月前
http请求完整的tcpdump抓包解读
网络协议·http·抓包·tcpdump
Jet_582 个月前
神庙逃亡(Temple Run)IL2CPP 逆向实战:从 APK 到 Frida 实现角色无敌
unity·il2cpp·逆向工程·frida·android逆向·hook技术·游戏逆向
深念Y3 个月前
proxypin抓包工具获得nb实验室VIP(已失效)
游戏·网络安全·抓包·逆向工程·软件逆向·nb实验室·教育软件
Jet_583 个月前
[特殊字符] AndroidReverse101:100 天系统学习 Android 逆向工程(学习路线推荐)
安卓逆向·逆向工程·frida·android逆向·安全研究·apk逆向
介一安全3 个月前
【Frida Android】实战篇18:Frida检测与绕过——基于内核指令的攻防实战
android·网络安全·逆向·安全性测试·frida
介一安全3 个月前
【Frida Android】实战篇17:Frida检测与绕过——基于inline hook的攻防实战
android·网络安全·逆向·安全性测试·frida