12345下一页
返回列表 发新帖

流光助手-另类逆向

  [复制链接]

12

主题

148

回帖

605

积分

初中生

Rank: 3Rank: 3

金币
35
好评
4
信誉
100
QQ
发表于 前天 10:12 来自手机  | 显示全部楼层 | 阅读模式  来自 中国
本帖最后由 Cynnie 于 2026-8-24 10:15 编辑

流光助手 3.1.0 会员解锁分析:Flutter App 反混淆 + Mock代理服务器方案

前言

流光助手是一款基于 Flutter + Gopeed(Go下载引擎) 开发的网盘资源下载工具,版本 3.1.0。本文记录了从静态分析到最终实现会员解锁的完整过程,核心思路是利用 Blutter 反混淆 libapp.so 定位关键逻辑,再通过 篡改型透明代理服务器 从源头替换会员状态,规避服务端校验。

一、应用架构分析

APK 的 Java/Kotlin 层极其精简(仅14个类),只是个壳:
-
  1. GopeedBridge
复制代码
通过 MethodChannel 桥接 Go 下载引擎
-
  1. MainActivity
复制代码
注册广告插件

真正的业务逻辑(登录、会员判断、网盘接口)全部编译在
  1. libapp.so
复制代码
(Dart AOT 产物,9.3MB)中。这意味着传统的 Java Hook 方案失效,需要深入 Dart 层。

二、Blutter 反混淆定位关键逻辑

使用 Blutter 对 libapp.so 进行 Dart AOT 反编译恢复。通过字符串交叉引用(string_xrefs),快速定位到核心类与方法:

1. 会员状态存储
定位到
  1. SecureSessionStorage
复制代码
类,会员状态通过
  1. flutter_secure_storage
复制代码
(AES加密存储)持久化到本地:
-
  1. auth_is_pro
复制代码
— 会员状态(字符串 "1"/"0")
-
  1. auth_pro_expires_at
复制代码
— 到期时间

关键方法
  1. _fromValues
复制代码
读取缓存并构建
  1. AuthSession
复制代码
对象,其中 isPro 的判断逻辑是将读取到的字符串与对象池常量
  1. "1"
复制代码
比较。

2. 网络架构
通过搜索
  1. extscreen
复制代码
/
  1. pan-api
复制代码
等关键词,定位到后端:
-
  1. AuthApiService
复制代码
— 认证服务,构造请求时调用
  1. _endpoint()
复制代码
拼接 baseURL + path
- baseURL 由
  1. GuangyaApiService._configuredBaseUri()
复制代码
硬编码返回,存储在 .rodata 明文字符串中
- 网络栈为标准 Dart
  1. http
复制代码
包 +
  1. dart:io HttpClient
复制代码
无 SSL Pinning

3. is_pro 真正来源
分析
  1. AuthApiService
复制代码
调用链,发现会员状态并非仅存本地缓存,而是由服务端
  1. GET /api/v1/auth/me
复制代码
接口实时下发:
  1. {
  2.   "data": {
  3.     "user": {
  4.       "is_pro": 1,
  5.       "pro_expires_at": "2099-12-31 23:59:59",
  6.       ...
  7.     }
  8.   }
  9. }
复制代码


这解释了为什么仅 Patch 本地缓存读取(返回 "1")无法稳定生效——登录或刷新时服务端下发的 is_pro 直接进入内存,绕过了缓存路径。

三、方案演进:从本地 Patch 到代理服务器

方案1:本地 Smali + Dart 机器码双重 Patch(失败)
初期尝试在 Java 层 patch
  1. FlutterSecureStorage.readUnsafe
复制代码
返回 "1",并在 Dart 层
  1. _fromValues @0x4fd0b0
复制代码
强制返回 true(
  1. add x4, x22, #0x2f
复制代码
)。
结果:仅在重启读缓存时偶尔显示会员,登录即时状态仍以服务端为准,不稳定。

方案2:Mock 代理服务器(最终方案)
既然无 SSL Pinning 且 baseURL 为单个明文字符串,最彻底的方案是替换 baseURL 指向自建代理服务器,代理服务器仅篡改会员接口,其余透传真实服务器。

四、实施步骤

1. Patch baseURL 字符串
libapp.so 中 baseURL 以明文 ASCII 存储,需等长替换(Dart 对象池要求)。原字符串
  1. https://pan-api.yodlx.com
复制代码
共25字节,替换为等长的自建域名。
关键:域名需 ≤17字符,凑满25字节槽位。

2. 部署篡改型透明代理
代理服务器核心逻辑:仅对
  1. /api/v1/auth/me
复制代码
  1. /api/v1/auth/login
复制代码
篡改
  1. is_pro=1
复制代码
  1. pro_expires_at=2099
复制代码
,其余所有请求原样转发至真实服务器。

这保证了网盘文件列表、下载链接、积分等所有功能正常工作(数据来自真实服务器),仅会员判断被篡改。

核心代码(Python):
  1. REAL_SERVER = "https://真实服务器域名"
  2. TAMPER_PATHS = {"/api/v1/auth/me", "/api/v1/auth/login"}

  3. def _forward(self):
  4.     # 原样转发请求至真实服务器
  5.     url = REAL_SERVER + self.path
  6.     # ... 转发并获取响应 ...
  7.    
  8.     # 仅篡改会员接口
  9.     if self.path in TAMPER_PATHS:
  10.         j = json.loads(resp_body)
  11.         j["data"]["user"]["is_pro"] = 1
  12.         j["data"]["user"]["pro_expires_at"] = "2099-12-31 23:59:59"
  13.         resp_body = json.dumps(j).encode()
  14.    
  15.     # 返回给App
复制代码


3. HTTPS 证书
因 Dart http 包校验证书链,需使用正规 CA 证书。利用 Let's Encrypt + certbot webroot 模式申请免费证书,nginx 反代至代理服务即可。

五、效果

- 用真实账号登录,网盘文件列表、下载等全部功能正常
- 会员状态显示为 Pro,到期时间 2099 年
- 无需修改任何功能代码,仅靠流量代理实现

六、总结

本次分析的关键经验:
1. Flutter App 的 Java 层是壳,需用 Blutter 反混淆 libapp.so 才能定位真实逻辑
2. 仅 Patch 本地判断往往不够,需追踪数据来源(服务端接口)
3. 篡改型透明代理是对付服务端校验的利器:只改关键接口,其余透传,保证功能完整
4. 无 SSL Pinning 的 App 替换 baseURL + 自建 HTTPS 代理是通用且低侵入的方案


本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有账号?立即注册

x
已有2人评分好评 金币 理由
则铭 + 1 + 1 很给力!
美食家老八 + 1 + 1

查看全部评分 总评分:好评 +2  金币 +2 

回复

使用道具 举报

1

主题

3903

回帖

9451

积分

硕士生

Rank: 6Rank: 6

金币
5928
好评
0
信誉
120

MT论坛最佳新人MT论坛帅哥MT论坛新人考神

发表于 前天 10:14 来自手机  | 显示全部楼层  来自 江苏
感谢分享
回复

使用道具 举报

1

主题

3903

回帖

9451

积分

硕士生

Rank: 6Rank: 6

金币
5928
好评
0
信誉
120

MT论坛最佳新人MT论坛帅哥MT论坛新人考神

发表于 前天 10:17 来自手机  | 显示全部楼层  来自 江苏
发一下成品
回复

使用道具 举报

12

主题

148

回帖

605

积分

初中生

Rank: 3Rank: 3

金币
35
好评
4
信誉
100
QQ
发表于 前天 10:17 来自手机  | 显示全部楼层  来自 中国
744417786 发表于 2026-8-24 10:17
发一下成品

服务器配置不行 发出来 服务器带不动
回复

使用道具 举报

0

主题

422

回帖

1032

积分

高中生

Rank: 4

金币
465
好评
0
信誉
100
发表于 前天 10:25 来自手机  | 显示全部楼层  来自 河北
744417786 发表于 2026-8-24 10:17
发一下成品

这得准备一个服务器
回复

使用道具 举报

9

主题

2005

回帖

5568

积分

硕士生

Rank: 6Rank: 6

金币
4996
好评
0
信誉
70

MT论坛新人考神

发表于 前天 10:26 来自手机  | 显示全部楼层  来自 重庆
流光助手这个夸克网盘是不是转存不了了,一直提示转存失败
回复

使用道具 举报

24

主题

6958

回帖

2万

积分

博士后

⊕1921863353

Rank: 8Rank: 8

金币
2159
好评
66
信誉
135

MT论坛最佳新人考神MT论坛活跃会员

发表于 前天 10:33 来自手机  | 显示全部楼层  来自 广东
很强很强
回复

使用道具 举报

24

主题

5216

回帖

1万

积分

博士生

Rank: 7Rank: 7Rank: 7

金币
4167
好评
3
信誉
94
发表于 前天 10:35 来自手机  | 显示全部楼层  来自 广东
流光助手吃相越来越难看了,正是需要大佬们出手的时候。
回复

使用道具 举报

24

主题

6958

回帖

2万

积分

博士后

⊕1921863353

Rank: 8Rank: 8

金币
2159
好评
66
信誉
135

MT论坛最佳新人考神MT论坛活跃会员

发表于 前天 10:37 来自手机  | 显示全部楼层  来自 广东
Cynnie 发表于 2026-8-24 10:17
服务器配置不行 发出来 服务器带不动

让gitee返回数据可以的吧
回复

使用道具 举报

12

主题

148

回帖

605

积分

初中生

Rank: 3Rank: 3

金币
35
好评
4
信誉
100
QQ
发表于 前天 10:40 来自手机  | 显示全部楼层  来自 中国
北辰没有林安 发表于 2026-8-24 10:37
让gitee返回数据可以的吧

要https
回复

使用道具 举报

18

主题

2106

回帖

6639

积分

硕士生

Rank: 6Rank: 6

金币
3438
好评
9
信誉
107

MT论坛最佳新人考神

发表于 前天 10:47 来自手机  | 显示全部楼层  来自 云南
小白看不懂,但是支持
回复

使用道具 举报

4

主题

912

回帖

5106

积分

硕士生

Rank: 6Rank: 6

金币
2214
好评
0
信誉
77
发表于 前天 10:50 来自手机  | 显示全部楼层  来自 广东
看看吧
回复

使用道具 举报

10

主题

3705

回帖

1万

积分

博士生

Rank: 7Rank: 7Rank: 7

金币
5022
好评
2
信誉
112

MT论坛最佳新人考神MT论坛帅哥

发表于 前天 10:59 来自手机  | 显示全部楼层  来自 福建
盘他
回复

使用道具 举报

228

主题

9646

回帖

2万

积分

博士后

Rank: 8Rank: 8

金币
2983
好评
27
信誉
91

考神MT论坛新人MT论坛活跃会员

发表于 前天 11:20 来自手机  | 显示全部楼层  来自 广东
Cynnie 发表于 2026-8-24 10:40
要https

github 不行吗
回复

使用道具 举报

0

主题

45

回帖

155

积分

小学生

Rank: 2

金币
71
好评
0
信誉
100
发表于 前天 11:27 来自手机  | 显示全部楼层  来自 贵州
看看
回复

使用道具 举报

发表回复

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

快速回复 返回顶部 返回列表