Files
notiMessage/docs/MariBank_2026-07-06_菲律宾突破.md
mars 609635aba1 chore: 备份 TNG 注册/captcha 逆向与 MariBank SG bypass 进展
TngRootBypassHook 增强 captcha 诊断、TigerTally/JNIC 分层与 HWUI 策略;新增逆向脚本、Frida 工具与 UI dump;同步 MariBank SG hook 与 tng_exit_guard 更新。
2026-08-03 15:23:02 +08:00

257 lines
9.5 KiB
Markdown
Raw Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
# MariBank 菲律宾注册突破 & 新加坡现状2026-07-06
> **设备**Pixel 6`1C081FDF600K5Q`)· Magisk 30.7 + Zygisk + LSPosed
> **结论****菲律宾 SeaBank 已能发 OTP****新加坡 MariBank 仍 3100012**
> **关联**[`MariBank实现说明.md`](MariBank实现说明.md) · [`MariBank新加坡逆向.md`](MariBank新加坡逆向.md)
---
## 1. 结果一览
| 地区 | 包名 | API | 注册结果 | 错误码 |
|------|------|-----|----------|--------|
| **菲律宾** | `ph.seabank.seabank` | `https://api.seabank.ph` | ✅ **成功 → OTP 短信** | `code=0` |
| **新加坡** | `sg.com.maribankmobile.digitalbank` | `https://api.maribank.com.sg` | ❌ 仍失败 | **3100012** |
**关键意义**:同一台 Root 机、同一套 Xposed + Magisk 伪装下,**PH 服务端已放行注册**,说明 Hook 链与 attestation 载荷 **对 PH 有效**SG 失败更可能是 **区域风控策略差异****SG 侧设备黑名单**而非「Root bypass 完全无效」。
---
## 2. 测试环境
| 项 | 值 |
|----|-----|
| 手机 | Google Pixel 6oriole |
| Root | Magisk **30.7**`MAGISK:R` |
| Magisk 模块 | `maribank_device_spoof``zygisk_shamiko``playintegrityfix``zygisk_vector` |
| DenyList | MariBank PH/SG 均已加入;**Enforce DenyList = OFF**Shamiko 要求) |
| LSPosed 模块 | `com.miraclegarden.smsmessage.xposed` |
| LSPosed 作用域 | `ph.seabank.seabank``sg.com.maribankmobile.digitalbank` 等 |
| 伪装 serial | `Y1Rr2fxhOI0ZCQSb`resetprop + Magisk 模块) |
| 伪装 android_id | `87ec910ab5d6f423` |
| 对照干净机 | `25078RA3EY`:关 USB 调试可进 SG OTP无 LSPosed |
---
## 3. 菲律宾突破 — log 证据2026-07-06 13:40
### 3.1 第一次 registerstep=BE
```text
POST https://api.seabank.ph/uapi/v2/register
```
加密前明文(`MariBankEncrypt in0 byte[1180]`)核心字段:
```json
{
"cyCode": "63",
"phone": "<RSA 加密>",
"rdVerifyInfo": {
"bioStatus": 0,
"data": "tPNHr/0eZzaPXs9oimvMNVWI/...",
"dataKey": "H/A6AqA8NhXZoaL0alG5VGRovcfuJykY92U...",
"deviceFingerprint": "jrKyNF/Fx4gcnzVpf1u9bw==|WJMksio9SaKKuyk1KMSilUGivdF+SHbqjB+aL65fucQcOCdojhBN3GKoY58sxVomiCfi5w==|TXeh8FyEf/8qHdAS|00|0",
"afExtInfo": { "modeInCall": "N", "modeInCommunication": "N", "modeCallScreening": "N" }
},
"scene": "REGISTRATION",
"step": "BE",
"source": "app"
}
```
服务端响应:
```json
{"code":0,"msg":"success","data":{"scene":"REGISTRATION","step":"BSO","tranId":"7f21098a-2113-40fb-bb6a-e2e651460f53",...}}
```
### 3.2 第二次 registerOTP 触发step=BSO
```json
{
"cyCode": "63",
"rdVerifyInfo": {
"action": "OTP_SMS_TRIGGER",
"deviceFingerprint": "jrKyNF/...|00|0",
"operationId": "61f9bcc6-dc0c-4f3d-8566-e1d3dc02653f1783316458430"
},
"scene": "REGISTRATION",
"step": "BSO",
"tranId": "7f21098a-2113-40fb-bb6a-e2e651460f53"
}
```
响应仍为 **`code=0`** → **App 可发验证码**
### 3.3 与 7 月 3 日对比
| 日期 | PH register | 说明 |
|------|-------------|------|
| 2026-07-03 | ❌ 4067012 | 仅 riskToken 尾部净化,无加密前 Hook |
| 2026-07-06 | ✅ code=0 → OTP | 加密前 Hook + Attestation Hook + 方案 B 换 ID + Shamiko |
---
## 4. 新加坡仍失败 — log 证据
### 4.1 典型失败11:50换 ID 前)
```text
POST https://api.maribank.com.sg/uapi/v2/register
→ {"code":3100012,"msg":"Unexpected error occurred. Please try again later. "}
```
加密前 `deviceFingerprint` 示例:
```text
X4Ln9cRV1v6aabPt4Ymnqw==|RmdlV34wu8nk8n9nj9A+32Z0BjF/29py3UVnqGWHBJRj5HuTmmOPX+pfJWkZBOn/n41pYw==|3ailMzmgCFzRDFGv|00|0
```
尾部 `\|00\|0` 已净化,**仍 3100012**。
### 4.2 SG 错误码含义(推断)
| 码 | 地区 | 文案 |
|----|------|------|
| 4067012 | PH | For your account's security, temporarily blocked... |
| 3100012 | SG | Unexpected error occurred. Please try again later. |
同属 **服务端风控拒绝**,非本地 Root 弹窗。
---
## 5. 已实现的 bypass 架构
### 5.1 分层模型
```
客户端本地层 服务端层
───────────────── ─────────────────
SafeMode Root 弹窗/自杀 → (不决定 OTP只决定能否进 App
SG ADB 全屏拦截页 →
SHPSSDK assessRisk → 解密 rdVerifyInfo.data/dataKey
riskToken / deviceFingerprint → 查 deviceHash 黑名单
Magisk resetprop 换 serial → 区域策略PH 松 / SG 严)
```
### 5.2 Xposed 模块文件
| 文件 | 作用 |
|------|------|
| `MariBankRootBypassHook.java` | SafeMode、SHPSSDK、ADB Settings、OkHttp 日志、4067/3100012 记录 |
| `MariBankShpsNativeHook.java` | `/proc` 过滤、SystemProperties、requestDefense 净化(不再 block |
| `MariBankSdkUtilsHook.java` | 加密前 Hook `utils.d` / `uvwuvwuv` / Gson |
| `MariBankRegisterPayloadUtil.java` | `scene=REGISTRATION` JSON 净化 |
| `MariBankAttestationHook.java` | native 桥 attestation 链 + 环境探测拦截 |
| `MariBankRiskTokenUtil.java` | riskToken 尾部 `\|09\|1``\|00\|0` |
### 5.3 方案 BMagisk 设备 ID 伪装
路径:`scripts/magisk/maribank-device-spoof/`
| 脚本 | 时机 | 内容 |
|------|------|------|
| `post-fs-data.sh` | 早期启动 | `resetprop` serial、boot 属性、关 adb 属性 |
| `service.sh` | 开机完成后 | 写入新 `Settings.Secure.android_id` |
PC 一键:
```powershell
.\scripts\maribank-spoof-device.ps1 # 一次性 resetprop
.\scripts\maribank-spoof-device.ps1 -InstallModule # 安装持久模块
.\scripts\maribank-scheme-b-finish.ps1 # LSPosed 作用域 + pm clear
```
### 5.4 Shamiko 配置要点
1. Magisk → 开启 **Zygisk**
2. **Configure DenyList** 开启 → 勾选 MariBank PH/SG 全部进程
3. **Enforce DenyList 必须关闭**(否则 Shamiko 不生效)
4. 安装 **Shamiko** 模块并重启
---
## 6. 为何 PH 能过、SG 不过(推断)
> **详细展开**(菲律宾真实原因、`afExtInfo`、USB 调试与 Hook见 [`MariBank风控与载荷说明.md`](MariBank风控与载荷说明.md) §4§5。
| 维度 | PH ✅ | SG ❌ |
|------|-------|-------|
| 同一 deviceFingerprint 结构 | 有,尾部 `\|00\|0` | 有,尾部 `\|00\|0` |
| `data`/`dataKey` attestation | 服务端接受 | 服务端拒绝3100012 |
| 测试次数 / 黑名单 | 较少失败记录 | Pixel 6 多次测 SG 注册 |
| API 风控强度 | 当日实测 **通过** | 当日实测 **拒绝** |
| 干净机对照 | 未详测 PH | 25078RA3EY 关 ADB 可 OTP |
**结论**
1. **改 riskToken 尾部 alone 不够**,但加上 **加密前 Hook + Shamiko + 换 ID****PH 足够**
2. SG 可能在 attestation 解密后仍有 **更严规则**Play Integrity、设备信誉、区域黑名单
3. PH 成功 **不能** 直接类推 SG**diff 两次 register 明文****换未测过 SG 的环境** 再试。
---
## 7. 已知问题与踩坑
| 问题 | 现象 | 处理 |
|------|------|------|
| Gson Hook 误报 | i18n 文案含 "register" 刷屏 | 已改为只匹配 `scene=REGISTRATION` |
| `requestDefense` 被 block | 缺 `x-sap-fixme` | 已改为执行后净化,不 block |
| ProcessBuilder 抛异常 | `which su` → SecurityException | **待修**:应返回空进程而非抛异常 |
| Magisk zip 在 Windows 打包 | 只解压 module.prop | 用 `tar -a -cf` 或 adb 手动 push sh |
| 关 USB 调试后 adb 断开 | 收尾脚本卡住 | `maribank-scheme-b-finish.ps1` 已加 60s 超时 |
| Attest native Hook 命中少 | 仅 8 个 hook | `data`/`dataKey` 仍未在 native 层改写 |
### 禁止操作(会导致白屏/崩溃)
- Hook `System.loadLibrary`SG RN 崩溃)
- Hook `RealInterceptorChain.proceed`
- 过早 Hook `ShpssInstall` / `vuvuwwwuw`
---
## 8. 常用命令
```powershell
$adb = "C:\Users\Administrator\AppData\Local\Android\Sdk\platform-tools\adb.exe"
# 构建安装
.\scripts\build-debug.ps1
.\scripts\install-debug.ps1
# 抓注册 log先 logcat -c再点 Next
& $adb logcat -d | Select-String "MariBankEncrypt in0 byte\[1|MariBankRoot HTTP.*register|3100012|4067012|OTP_SMS"
# 验证伪装 ID
& $adb shell su -c "getprop ro.serialno; settings get secure android_id"
```
---
## 9. 新加坡后续建议
1. **用 PH 成功时的同一环境** 测 SG关 USB 调试、`pm clear` SG 包、冷启动
2. **diff PH vs SG** 加密前 register JSON`deviceFingerprint` 段、`data` 长度与字段)
3. 修复 **ProcessBuilder** 不抛异常,避免 SHPSSDK 检测 tamper
4. 若仍 3100012考虑 **未测过 SG 的干净机****native hook `libshpssdk_bank.so`**
5. 菲律宾侧:继续走完 **OTP → 开户** 验证全流程稳定性
---
## 10. 相关文档
| 文档 | 说明 |
|------|------|
| [`MariBank风控与载荷说明.md`](MariBank风控与载荷说明.md) | **register 字段、afExtInfo、USB 调试、PH 真实原因、Xposed/LSPosed** |
| [`手机操作手册.md`](手机操作手册.md) | **Root 机部署、LSPosed、日常操作、抓 log** |
| [`Hook指南.md`](Hook指南.md) | Xposed/LSPosed 概念、Telegram Hook、扩展 App |
| [`MariBank实现说明.md`](MariBank实现说明.md) | PH Hook 实现细节(含 7/3 失败记录,已追加 7/6 突破) |
| [`MariBank新加坡逆向.md`](MariBank新加坡逆向.md) | SG 逆向与 ADB 检测 |
| [`MariBank新加坡突破.md`](MariBank新加坡突破.md) | **SG 3100012 突破计划与测试流程** |
| [`工作日志_2026-07-03.md`](工作日志_2026-07-03.md) | 7/3 工作记录 |
---
*记录日期2026-07-06 · 最后更新:文档体系整理(操作手册 + 风控载荷说明)*