# 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 6(oriole) | | 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 第一次 register(step=BE) ```text POST https://api.seabank.ph/uapi/v2/register ``` 加密前明文(`MariBankEncrypt in0 byte[1180]`)核心字段: ```json { "cyCode": "63", "phone": "", "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 第二次 register(OTP 触发,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 方案 B:Magisk 设备 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 · 最后更新:文档体系整理(操作手册 + 风控载荷说明)*