# 2026-07-03

本文档汇总 **2026 年 7 月 3 日** 在 `notiMessage` 项目上围绕 **MariBank / SeaBank PH 注册与风控绕过** 所完成的分析、实现、测试与仓库整理工作。

---

## 1. 当日目标

在已 Root 的 Pixel 6（Magisk + Zygisk + LSPosed）上，对菲律宾 MariBank App 完成：

1. 绕过本地 Root / 设备风控，进入注册流程；
2. 输入手机号并点击 **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` 等（均失败）。

**典型成功链路**

```text
POST /dfp/v1/data/report → {"code":0,...}
riskToken sanitized ... -> |00|0
```

**典型失败链路**

```text
POST /uapi/v2/register
→ {"code":4067012,"msg":"For your account's security, this service has been temporarily blocked..."}
```

**其他日志**

- `wvvvuwwu.vuwuuwvw` native 实现未找到（可能与 LSPosed / 环境冲突有关）。
- Root 检测触发 `killProcess` 时被 `blocked finish` 拦截，表现为短暂异常后仍可继续使用。

**推荐 logcat 过滤**

```powershell
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/银行逆向.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实现说明.md`  | **MariBank 实现细节与问题记录（专文）**          |
| `docs/MariBank_2026-07-06_菲律宾突破.md` | PH OTP 突破 + SG 现状 |
| `docs/MariBank风控与载荷说明.md` | register 字段、afExtInfo、USB 调试 |
| `docs/手机操作手册.md` | Root 机部署与日常操作 |
| `docs/银行逆向.md`             | 澳大利亚三家银行 Hook（Up / Suncorp / ubank） |
| `docs/Hook指南.md`               | 通用 Hook 架构、Xposed/LSPosed、扩展   |
| `docs/更新说明.md`                | 主 App / TG Hook 版本历史                |
| `reverse/README.md`                | 逆向工作区目录说明                           |
| `reverse/frida/jni_targets.md`     | JNI Hook 目标备忘                       |
| `xposed-module/.../MariBank*.java` | MariBank bypass 实现                  |


---

## 11. 当日工作清单（摘要）

- [x] MariBank Root / SHPSSDK / SafeMode Xposed bypass 实现与迭代
- [x] riskToken 尾部净化与 OkHttp 出站拦截
- [x] DEX / SO / JNI 静态逆向与脚本沉淀
- [x] Frida trace 脚本与 attach/spawn 运行器（受 App 反 Frida 限制）
- [x] LSPosed logcat 分析，确认 **4067012** 为服务端拒绝
- [x] `reverse/` 目录整理与 `.gitignore` 更新
- [ ] 注册成功（**未完成**，阻塞于服务端风控）

---

*记录日期：2026-07-03*