某台球app sign逆向分析
字数 1683 2025-08-29 08:30:05

Flutter混合开发App的Sign逆向分析教学文档

1. 背景介绍

本教学文档基于对某台球App的sign签名逆向分析过程,该App采用Flutter框架进行混合开发。我们将详细讲解从抓包发现sign值到最终逆向分析出sign生成逻辑的全过程。

2. 工具准备

进行此类逆向分析需要准备以下工具:

  • 抓包工具:小黄鸟(或其他HTTP抓包工具如Charles、Fiddler)
  • 反编译工具:jadx(用于查看Java代码)
  • 脱壳工具:frida-dump(用于脱壳处理)
  • Flutter逆向工具:blutter(专门用于Flutter逆向)
  • Hook工具:Frida(用于动态分析)
  • IDA Pro(用于分析so文件)

3. 初步分析

3.1 抓包发现sign值

使用小黄鸟抓包工具捕获App的网络请求,发现请求中包含一个名为sign的参数,这是一个常见的签名参数,用于服务端验证请求合法性。

3.2 反编译APK

使用jadx反编译APK文件时,发现App有壳保护,直接反编译无法获取有效代码。

3.3 脱壳处理

使用frida-dump进行脱壳:

  1. 运行frida-dump脚本
  2. 获取脱壳后的dex文件
  3. 将脱壳结果重新拖入jadx中分析

3.4 确认Flutter混合开发

在反编译后的代码中发现入口页面是FlutterActivity,确认这是一个使用Flutter框架开发的App界面。

检查APK的lib文件夹,发现存在:

  • libapp.so
  • libflutter.so

这进一步确认了App采用Flutter混合开发模式。

4. Flutter逆向专项分析

4.1 使用blutter工具

blutter是一个专门用于Flutter逆向的工具,能够解析libapp.so中的快照数据,获取业务代码的类和方法信息。

项目地址:https://github.com/worawit/blutter

使用步骤:

  1. 克隆blutter仓库
  2. 运行blutter解析libapp.so
  3. 生成IDA脚本ida_script/addNames.py

4.2 搜索关键函数

在blutter解析出的结果中搜索关键字"sign",发现多个相关函数。由于sign值是32位长度,初步猜测可能是MD5算法。

搜索"MD5"关键字,找到4个相关函数,需要进一步分析确认。

5. 动态Hook分析

5.1 修改blutter_frida.js

为了动态分析MD5相关函数,需要修改blutter生成的blutter_frida.js脚本:

  1. 增加dump函数,用于打印详细信息
  2. 修改onLibappLoaded函数,增加更多参数打印
  3. 添加对可疑MD5函数的Hook

5.2 逐个Hook验证

通过逐一Hook四个MD5相关函数,对比抓包结果,最终确定关键函数:

Allocate_MD5SinkStub_b953c0是生成sign的核心函数。

5.3 Hook结果分析

Hook输出示例:

String@7d01397219 = "android_api_get{\"mobile\":\"13245621451\"}NKzK8hNnxNrWooj3"

将上述字符串进行MD5加密后,与抓包中的sign值对比,发现完全一致。

6. Sign生成逻辑分析

通过逆向分析,确定sign的生成规则如下:

  1. 固定前缀:"android_api_get"
  2. 拼接参数字典的JSON字符串表示
  3. 拼接固定字符串:"NKzK8hNnxNrWooj3"
  4. 对拼接后的完整字符串进行MD5加密

伪代码表示:

import hashlib

def generate_sign(params):
    fixed_prefix = "android_api_get"
    fixed_suffix = "NKzK8hNnxNrWooj3"
    param_str = json.dumps(params)
    raw_str = fixed_prefix + param_str + fixed_suffix
    sign = hashlib.md5(raw_str.encode()).hexdigest()
    return sign

7. 验证方法

为了验证分析结果的正确性:

  1. 构造相同参数
  2. 按照上述规则拼接字符串
  3. 计算MD5值
  4. 与抓包中的sign值对比

如果一致,则证明分析正确。

8. 总结

本教学文档详细介绍了Flutter混合开发App的sign逆向分析全过程,关键步骤包括:

  1. 使用抓包工具发现sign参数
  2. 处理加壳保护并反编译
  3. 识别Flutter混合开发特征
  4. 使用blutter工具进行Flutter专项逆向
  5. 通过动态Hook定位关键函数
  6. 分析并验证sign生成逻辑

这种分析方法不仅适用于本案例,也可作为类似Flutter应用逆向的通用方法参考。

Flutter混合开发App的Sign逆向分析教学文档 1. 背景介绍 本教学文档基于对某台球App的sign签名逆向分析过程,该App采用Flutter框架进行混合开发。我们将详细讲解从抓包发现sign值到最终逆向分析出sign生成逻辑的全过程。 2. 工具准备 进行此类逆向分析需要准备以下工具: 抓包工具 :小黄鸟(或其他HTTP抓包工具如Charles、Fiddler) 反编译工具 :jadx(用于查看Java代码) 脱壳工具 :frida-dump(用于脱壳处理) Flutter逆向工具 :blutter(专门用于Flutter逆向) Hook工具 :Frida(用于动态分析) IDA Pro (用于分析so文件) 3. 初步分析 3.1 抓包发现sign值 使用小黄鸟抓包工具捕获App的网络请求,发现请求中包含一个名为 sign 的参数,这是一个常见的签名参数,用于服务端验证请求合法性。 3.2 反编译APK 使用jadx反编译APK文件时,发现App有壳保护,直接反编译无法获取有效代码。 3.3 脱壳处理 使用frida-dump进行脱壳: 运行frida-dump脚本 获取脱壳后的dex文件 将脱壳结果重新拖入jadx中分析 3.4 确认Flutter混合开发 在反编译后的代码中发现入口页面是 FlutterActivity ,确认这是一个使用Flutter框架开发的App界面。 检查APK的lib文件夹,发现存在: libapp.so libflutter.so 这进一步确认了App采用Flutter混合开发模式。 4. Flutter逆向专项分析 4.1 使用blutter工具 blutter是一个专门用于Flutter逆向的工具,能够解析 libapp.so 中的快照数据,获取业务代码的类和方法信息。 项目地址:https://github.com/worawit/blutter 使用步骤: 克隆blutter仓库 运行blutter解析 libapp.so 生成IDA脚本 ida_script/addNames.py 4.2 搜索关键函数 在blutter解析出的结果中搜索关键字"sign",发现多个相关函数。由于sign值是32位长度,初步猜测可能是MD5算法。 搜索"MD5"关键字,找到4个相关函数,需要进一步分析确认。 5. 动态Hook分析 5.1 修改blutter_ frida.js 为了动态分析MD5相关函数,需要修改blutter生成的 blutter_frida.js 脚本: 增加dump函数,用于打印详细信息 修改 onLibappLoaded 函数,增加更多参数打印 添加对可疑MD5函数的Hook 5.2 逐个Hook验证 通过逐一Hook四个MD5相关函数,对比抓包结果,最终确定关键函数: Allocate_MD5SinkStub_b953c0 是生成sign的核心函数。 5.3 Hook结果分析 Hook输出示例: 将上述字符串进行MD5加密后,与抓包中的sign值对比,发现完全一致。 6. Sign生成逻辑分析 通过逆向分析,确定sign的生成规则如下: 固定前缀: "android_api_get" 拼接参数字典的JSON字符串表示 拼接固定字符串: "NKzK8hNnxNrWooj3" 对拼接后的完整字符串进行MD5加密 伪代码表示: 7. 验证方法 为了验证分析结果的正确性: 构造相同参数 按照上述规则拼接字符串 计算MD5值 与抓包中的sign值对比 如果一致,则证明分析正确。 8. 总结 本教学文档详细介绍了Flutter混合开发App的sign逆向分析全过程,关键步骤包括: 使用抓包工具发现sign参数 处理加壳保护并反编译 识别Flutter混合开发特征 使用blutter工具进行Flutter专项逆向 通过动态Hook定位关键函数 分析并验证sign生成逻辑 这种分析方法不仅适用于本案例,也可作为类似Flutter应用逆向的通用方法参考。