10 KiB
10 KiB
2026-07-03
本文档汇总 2026 年 7 月 3 日 在 notiMessage 项目上围绕 MariBank / SeaBank PH 注册与风控绕过 所完成的分析、实现、测试与仓库整理工作。
1. 当日目标
在已 Root 的 Pixel 6(Magisk + Zygisk + LSPosed)上,对菲律宾 MariBank App 完成:
- 绕过本地 Root / 设备风控,进入注册流程;
- 输入手机号并点击 Next,完成
POST /uapi/v2/register注册请求。
目标 App
| 项 | 值 |
|---|---|
| 包名 | ph.seabank.seabank |
| 显示名 | MariBank |
| 版本 | 3.22.0(versionCode 32200) |
2. 核心结论(当日最终状态)
| 层级 | 状态 | 说明 |
|---|---|---|
| 本地 Root 弹窗 / 自杀 | 已基本绕过 | 可进入首页与手机号输入页 |
| DFP 上报 | 成功 | POST /dfp/v1/data/report 返回 code=0 |
| riskToken 尾部净化 | Hook 生效 | ` |
| 注册接口 | 仍失败 | POST /uapi/v2/register → **4067012**(亦见 4067004) |
| 服务端文案 | 账户安全临时封锁 | 「For your account's security, this service has been temporarily blocked...」(+632) 8424 8050 |
判断:本地 bypass 已推进到 DFP 层,但 服务端仍拒绝注册。原因可能包括:加密 DFP 载荷校验、设备指纹黑名单、号码/设备组合风控,而非单纯 riskToken 尾部字段。改 token 尾部 不足以 通过注册。
3. Xposed 模块实现(xposed-module)
3.1 新增 / 主要 Hook 文件
| 文件 | 作用 |
|---|---|
hook/MariBankRootBypassHook.java |
SafeMode、SHPSSDK、OkHttp 出站净化、4067 错误日志、Root 自杀拦截 |
hook/MariBankShpsNativeHook.java |
/proc 过滤、native-core、boot 属性伪装、requestDefense 等 native 层 |
hook/MariBankRiskTokenUtil.java |
riskToken / deviceToken 尾部 ` |
MainHook.java |
对 ph.seabank.seabank 加载上述 Hook(先 early proc,再 deferred) |
3.2 关键逆向结论(已写入 Hook)
| 能力 | 真实类 / 库 |
|---|---|
| riskToken 生成链 | vvuuuuvvv.wwvuwuwvu(Context)(classes11.dex) |
| SoUtils | com.shopee.bke.lib.jni.utils.f(log tag SoUtils) |
| Native 加密包装 | com.shopee.bke.lib.jni.utils.d → native uvwuvwuv |
| SHPSSDK native | libshpssdk_bank.so;wvvvuwwu.vvuwuuvuu → wwvwvwuvv |
| 字符串解密 | uvuwwuvwv.uvwwuuvvw.uvuwwwuwu(hex, key) |
3.3 明确避免 Hook 的点(实测会崩)
**RealInterceptorChain.proceed**:SO 硬编码检测,Hook 后易触发风控或异常。**ShpssInstall/vuvuwwwuw**:干扰SoUtils.loadSoLibrary,导致libsdkutils加载死循环 白屏。
3.4 注册请求体
- register body 为 native 加密,Java 层 Hook 常见日志:
register request body unreadable (encrypted or one-shot)。 - 当日 未 在 logcat 中抓到 register 明文 JSON。
4. 逆向与静态分析(reverse/)
4.1 已完成
- 从设备 pull split APK / base APK,提取
libsdkutils.so、libshpssdk_bank.so、libbkutils.so等至reverse/extracted/native/。 - 编写并运行大量 DEX/APK 扫描脚本(scan / dump / find 系列),定位:
- SHPSSDK、SafeMode、注册 API、4067 错误上下文;
- JNI 目标与加密类继承关系。
- 脚本:
reverse/frida/pull_split_apk.ps1、reverse/scripts/extract_all_so.py等。
4.2 主要 native / 加密链路
register 请求
→ NativeEncryptUtilsWrapper (utils.d)
→ native uvwuvwuv (libsdkutils.so / libbkutils.so)
→ 加密 body + riskToken / deviceToken
→ POST https://api.seabank.ph/uapi/v2/register
5. Frida 动态分析
5.1 环境
- PC:Frida 17.15.3;手机:
/data/local/tmp/frida-server - 脚本:
reverse/frida/trace_maribank_register.js - 运行器:
run_frida_trace.py(attach / spawn)、run_spawn_trace.py、start-mari-trace.ps1
5.2 遇到的问题
| 模式 | 现象 |
|---|---|
| attach | 长时间 Java.available == false,Java Hook 无法安装;进程名需用 MariBank 而非包名查找 |
| spawn | native dlopen 可 hook,但 Java 层 Java is not defined / 线程相关异常 |
| CLI spawn | 无 --no-pause 时 session 立即退出;需 Python runner 保活 |
5.3 当日 Frida 结论
- 未抓到 有效的
/register明文 body 或完整 HTTP 链日志。 - MariBank 对 Frida 有较强干扰;当日有效证据主要来自 LSPosed logcat,而非 Frida trace。
6. Logcat 实测摘要(LSPosed 生效)
测试号码示例:9178854266、9133477799、9171243667 等(均失败)。
典型成功链路
POST /dfp/v1/data/report → {"code":0,...}
riskToken sanitized ... -> |00|0
典型失败链路
POST /uapi/v2/register
→ {"code":4067012,"msg":"For your account's security, this service has been temporarily blocked..."}
其他日志
wvvvuwwu.vuwuuwvwnative 实现未找到(可能与 LSPosed / 环境冲突有关)。- Root 检测触发
killProcess时被blocked finish拦截,表现为短暂异常后仍可继续使用。
推荐 logcat 过滤
powershell -File scripts\logcat-maribank.ps1 -Follow
# 或
adb logcat -s notiMessageHook/MariBankRoot:V MB-TRACE:V
7. 构建与安装脚本
| 脚本 | 用途 |
|---|---|
scripts/build-debug.ps1 |
构建主 App + xposed-module debug APK |
scripts/install-debug.ps1 |
安装双 APK |
scripts/install-frida.ps1 |
PC + 手机 frida-server |
scripts/start-mari-trace.ps1 |
启动 Frida attach + MariBank 相关 logcat |
scripts/logcat-maribank.ps1 |
过滤 MariBank / Hook 日志 |
scripts/organize-reverse.ps1 |
整理 reverse/ 目录(可重复执行) |
LSPosed 作用域需勾选:MariBank + notiMessage + xposed 模块。
8. 仓库整理
8.1 问题
reverse/ 根目录堆积 70+ Python 脚本、临时 .dex、解压 APK(约 2.2 GB / 7 万+ 文件),IDE 与 git status 显得极乱。
8.2 新目录结构
reverse/
├── README.md
├── scripts/ # 逆向 Python 脚本(71 个,含 _paths.py)
├── frida/ # Frida 脚本与运行器
├── apks/ # APK / zip(不入库)
├── extracted/ # 解压、dex dump、.so(不入库)
├── output/ # 分析报告 *.txt
├── logs/ # 运行日志
│ └── frida/ # trace / logcat
└── tmp/ # 临时 *.dex(不入库)
8.3 同步修改
- 44 个 脚本内路径改为相对
reverse/根(apks/、extracted/、tmp/、output/)。 - Frida 日志输出改到
reverse/logs/frida/。 - 更新
.gitignore、docs/BANK_REVERSE.md、pull_split_apk.ps1、start-mari-trace.ps1。 apk_extract/迁入extracted/apk_extract/;seabank.zip迁入apks/。
9. 后续建议(未在当日完成)
| 优先级 | 方向 |
|---|---|
| 1 | 对照实验:未 Root 干净机 + 菲律宾 IP + 新号码,区分设备封禁 vs 号码封禁 |
| 2 | Native 明文:Hook libsdkutils / utils.d 包装层,抓 register 加密前 body |
| 3 | riskToken 全链:在 vvuuuuvvv.wwvuwuwvu 最早出口做更深层净化(含加密段) |
| 4 | Frida:换未被检测环境,或仅 attach 已运行进程;当前 MariBank 上 Java 桥不稳定 |
| 5 | 停试:已失败号码/设备冷却 24–48h,避免加重 4067012 |
| 6 | 官方解封:(+632) 8424 8050 |
10. 相关文档与路径索引
| 文档 / 路径 | 说明 |
|---|---|
docs/MARIBANK_IMPLEMENTATION.md |
MariBank 实现细节与问题记录(专文) |
docs/BANK_REVERSE.md |
澳大利亚三家银行 Hook(Up / Suncorp / ubank) |
docs/HOOK_GUIDE.md |
通用 Hook 架构与扩展 |
docs/CHANGELOG.md |
主 App / TG Hook 版本历史 |
reverse/README.md |
逆向工作区目录说明 |
reverse/frida/jni_targets.md |
JNI Hook 目标备忘 |
xposed-module/.../MariBank*.java |
MariBank bypass 实现 |
11. 当日工作清单(摘要)
- MariBank Root / SHPSSDK / SafeMode Xposed bypass 实现与迭代
- riskToken 尾部净化与 OkHttp 出站拦截
- DEX / SO / JNI 静态逆向与脚本沉淀
- Frida trace 脚本与 attach/spawn 运行器(受 App 反 Frida 限制)
- LSPosed logcat 分析,确认 4067012 为服务端拒绝
reverse/目录整理与.gitignore更新- 注册成功(未完成,阻塞于服务端风控)
记录日期:2026-07-03