# MariBank 新加坡注册突破计划（2026-07-06）

> **现状**：PH ✅ OTP（`code=0`）；SG ❌ **3100012**（`api.maribank.com.sg`）  
> **关联**：[`MariBank_2026-07-06_菲律宾突破.md`](MariBank_2026-07-06_菲律宾突破.md) · [`MariBank新加坡逆向.md`](MariBank新加坡逆向.md) · [`MariBank风控与载荷说明.md`](MariBank风控与载荷说明.md)

---

## 1. 问题定位

| 层级 | SG 状态 | 说明 |
|------|---------|------|
| 本地 Root / ADB 页 | ✅ 可 bypass | 能进注册页、点 Next |
| DFP 上报 | ✅ 通常 `code=0` | 只表示收到，不等于注册过 |
| `deviceFingerprint` 尾部 | ✅ 已 `\|00\|0` | Java 层净化生效 |
| **`rdVerifyInfo.data` / `dataKey`** | ❌ 服务端拒 | **3100012 主因** |
| 干净机 `25078RA3EY` | ✅ 关 USB 调试可 OTP | 无 LSPosed |

**结论**：SG 卡在 **native attestation 密文 + 区域风控**，不是再堆本地弹窗拦截。

---

## 2. 与 PH 的差异（实测 + 逆向）

| 维度 | PH | SG |
|------|----|----|
| API | `api.seabank.ph` | `api.maribank.com.sg` |
| 错误码 | 4067012 | **3100012** |
| App 版本 | 3.22.0 | 3.2.2 |
| 国家码 `cyCode` | 63 | **65** |
| 本地 ADB 检测 | 较弱 | **RISK_USB_ADB / RISK_WIFI_ADB** |
| 服务端 strictness | 7/6 已通过 | **更严** |
| 设备黑名单 | 较少 | Pixel 6 多次测 SG 可能已标记 |

---

## 3. 本轮代码改动（2026-07-06）

| 改动 | 目的 |
|------|------|
| **`ProbeGuard`** | `ProcessBuilder` / `Runtime.exec` 返回假进程，**不再抛 SecurityException**（避免 SHPSSDK 记 tamper） |
| **`MariBankAttestationHook`** | 增加 `vvuuuuvvv`、`uvuwwuvwv.uvwwuuvvw` attestation 类 Hook |
| **`MariBankShpsNativeHook`** | native-core 增加 `vvuuuuvvv` |
| **`MariBankRegisterPayloadUtil`** | 加密前 log：`cyCode`、`dataLen`、`dataKeyLen`、`fpTail` |

---

## 4. 推荐测试流程（Root 机）

### 4.1 每次测 SG 前（降低黑名单概率）

```powershell
cd C:\Users\Administrator\Desktop\notiMessage

# 1. 编译安装最新 Hook
.\scripts\build-debug.ps1
.\scripts\install-debug.ps1

# 2. 新设备 ID（保持 USB 调试，便于继续 adb）
.\scripts\maribank-sg-register.ps1 -NewIdentity -KeepAdb

# 3. 上机测 SG 前再关 USB 调试（会断开 PC adb，属预期）
.\scripts\maribank-sg-register.ps1 -DisableUsbDebug
```

### 4.2 手机侧

> **LSPosed 里两个都叫「MariBank」**：菲律宾 `ph.seabank.seabank`（v3.22.0）与新加坡 `sg.com.maribankmobile.digitalbank`（v3.2.2）桌面名相同，从 LSPosed 作用域点开会容易进错。**请认包名**，或 PC 执行 `.\scripts\launch-maribank-sg.ps1` 直接打开新加坡版。log 里应出现 `api.maribank.com.sg`，若全是 `api.seabank.ph` 说明开的是菲律宾 App。

1. LSPosed：模块启用，作用域含 **`sg.com.maribankmobile.digitalbank`**
2. **软重启** MariBank SG（不是只杀进程）
3. Shamiko + DenyList 勾选 SG 全部进程，**Enforce=OFF**
4. （建议）**关闭 VPN**
5. Sign up → 新加坡手机号 → **Next**

### 4.3 抓 log

```powershell
.\scripts\maribank-sg-register.ps1 -CaptureLog -KeepAdb
```

> **注意**：旧版脚本默认会关 USB 调试，导致 PC 立刻 `no devices`。抓 log 必须加 **`-KeepAdb`**，或先在手机上重新打开 USB 调试。

关注：

```text
MariBankRegister: register summary cy=65 scene=REGISTRATION step=BE fpTail=00|0 dataLen=... dataKeyLen=...
MariBankRoot HTTP .../uapi/v2/register ... code=0        ← 成功
MariBankRoot HTTP .../uapi/v2/register ... code=3100012  ← 仍失败
ProbeGuard: fake probe process                           ← 探针已静默拦截
```

---

## 5. 若仍 3100012 — 按优先级排查

| 优先级 | 动作 | 原因 |
|--------|------|------|
| P0 | **换新 serial + android_id**（`-NewIdentity`） | SG 可能设备级黑名单 |
| P0 | **关 USB 调试 + 无线调试** | 干净机对照：开调试本地 ADB 页；服务端 SG 更严 |
| P0 | **关 VPN** | 截图曾见 VPN 图标，可能进 risk |
| P1 | diff PH vs SG 同机 `register summary` | 对比 `dataLen`、fingerprint 段 |
| P1 | 用 **未测过 SG 的干净机** 注册一次 | 分离「设备黑」vs「Root 载荷不可过」 |
| P2 | Play Integrity / PIF 模块是否生效 | SG 可能校验 attestation 内 integrity |
| P3 | native hook `libshpssdk_bank.so` 生成链 | Java 层改不了 `data` 密文内容 |

---

## 6. 成功标准

```json
POST https://api.maribank.com.sg/uapi/v2/register
→ {"code":0,"msg":"success","data":{"scene":"REGISTRATION","step":"BSO",...}}
```

随后 App 进入 **OTP 短信** 步骤（与 PH 相同 step 流转）。

---

## 7. 禁止操作

与 PH 相同，会导致白屏 / RN 崩溃：

- Hook `System.loadLibrary`
- Hook `RealInterceptorChain.proceed`
- 过早 Hook `ShpssInstall` / `vuvuwwwuw`

---

## 8. 相关脚本

| 脚本 | 用途 |
|------|------|
| `scripts/maribank-sg-register.ps1` | SG 测前准备 + 抓 log |
| `scripts/maribank-spoof-device.ps1 -NewIdentity` | 换 serial / android_id |
| `scripts/maribank-scheme-b-finish.ps1` | LSPosed 作用域 + pm clear |

---

*最后更新：2026-07-06*
