feat(maribank): PH 注册 OTP 突破、SG bypass 与中文文档

菲律宾 SeaBank 在 Root+LSPosed+Shamiko 下 register 已通过并触发 OTP;扩展 SG 包名、加密前 Hook、Magisk 设备伪装脚本,并将 docs 整理为中文操作与风控说明。
This commit is contained in:
mars
2026-07-06 14:01:49 +08:00
parent d488a0759f
commit 81119e0ff9
29 changed files with 2248 additions and 102 deletions

View File

@@ -0,0 +1,217 @@
# MariBank 新加坡版逆向报告
> **日期**2026-07-06
> **设备**Pixel 6已 Root + LSPosed + ADB 开启)
> **APK 来源**:从本机 pull`reverse/apks/maribank_sg_*.apk`
---
## 1. 基本信息
| 项 | 值 |
|----|-----|
| **包名** | `sg.com.maribankmobile.digitalbank` |
| **显示名** | MariBank新加坡 |
| **版本** | 3.2.2versionCode **30220** |
| **对比 PH 版** | `ph.seabank.seabank` · v3.22.0 (32200) |
| **API 域名** | `https://api.maribank.com.sg`staging: `api.staging.maribank.com.sg` |
| **Application** | `com.shopee.bke.digitalbank.BkeApplication`(与 PH **相同** |
本地 APK
```
reverse/apks/maribank_sg_base.apk
reverse/apks/maribank_sg_arm64.apk → SO 在 reverse/extracted/native/
```
---
## 2. 截图现象(你当前遇到的)
启动后出现 **两层拦截**
| 现象 | 类型 | 说明 |
|------|------|------|
| 全屏 **「ADB/Wireless ADB Detected」** | 环境检测页 | 文案 key`bke_title_adb_wirelessadb_control``bke_btn_turn_off_adb_wireless_adb` |
| Toast **「Does not support root device」** | Root 检测 | SHPSSDK / SafeMode 典型提示 |
**含义**
1. **ADB 检测****Root 检测****独立项**——新加坡版在 PH 版基础上 **明显加强了 USB/无线调试检测**
2. 状态栏 **VPN 小钥匙** 可能额外触发 `RISK_*` 或网络风控(需 logcat 确认)。
3. 当前 **PH 版 Xposed Hook 未作用到 SG 包名**(只 Hook `ph.seabank.seabank`),所以 SG 版 **完全未 bypass**
**临时验证(无 Hook**:关闭 **USB 调试 + 无线调试** 后冷启动,可确认 ADB 页是否消失Root Toast 仍会存在。
---
## 3. 技术栈对比SG vs PH
| 组件 | SG 3.2.2 | PH 3.22.0 | 结论 |
|------|----------|-----------|------|
| Shopee BKE | ✅ | ✅ | 同框架 |
| `BkeApplication` | ✅ | ✅ | Hook 时机相同(`attachBaseContext` 后) |
| SafeMode | `com.shopee.bke.lib.safemode.b` 等 | 相同 | 可复用 boolean Hook |
| `SafeModeRecoverActivity` | ✅ | ✅ | Root 弹窗/恢复页 |
| SHPSSDK Bank | `com.shopee.shpssdkbank.SHPSSDK` | 相同 | 可复用 riskToken / requestDefense 链 |
| Native SO | `libshpssdk_bank.so``libsdkutils.so``libbkutils.so` | 相同 | SG 额外有 **`libshpssdk.so`** |
| 字符串解密 | `uvuwwuvwv.uvwwuuvvw` | 相同 | 混淆包名可能不同 |
**结论**SG 与 PH 是 **同一套 Shopee 银行 SDK**PH 上已写的 Hook **大部分可迁移**,需改 **包名****补充 ADB 风控**
---
## 4. 新加坡版新增ADB / 无线调试检测
### 4.1 SHPSSDK 风险常量DEX 内)
```
RISK_USB_ADB ← USB 调试
RISK_WIFI_ADB ← 无线调试
RISK_ADB
RISK_ROOT
RISK_HOOK
RISK_DEBUG
RISK_DEVELOPER_MODE
RISK_EMULATOR
...
```
与截图中 **ADB 拦截页 + Root Toast** 对应。
### 4.2 UI 字符串(资源 key
| Key | 用途 |
|-----|------|
| `bke_title_adb_wirelessadb_control` | 标题「ADB/Wireless ADB Detected」 |
| `bke_btn_turn_off_adb_wireless_adb` | 按钮「Turn Off ADB/Wireless ADB」 |
| `bke_desc_explain_detect_adb_1/2` | 说明文案 |
| `bke_desc_safeguard_bank_app_from_adb_wirelessadb_1/2` | 安全说明 |
| `AdbDetected` / `WifiAdbDetected` | RN / 业务路由标识 |
### 4.3 检测思路(推断)
1. **Settings.Global** / `adb_enabled`、无线调试相关属性
2. SHPSSDK `getRiskSync` → 命中 `RISK_USB_ADB` / `RISK_WIFI_ADB`
3. 进入 **ADB 专用拦截 UI**(非仅 SafeModeRecoverActivity
4. Root 仍走 `RISK_ROOT` → Toast「Does not support root device」
---
## 5. API 与登录SG
PH 实测重点为 `POST /uapi/v2/register`SG DEX 内可见:
| 类型 | 路径示例 |
|------|----------|
| 登录 | `/v3/login``/v4/login``/v2/login/bke/linkage` |
| 注册 | `/v2/register` |
| 登录前 | `/v1/list/latest-notice/pre-login` |
| 人脸 | `/v3/login/facial/verification` |
| DFP | `/dfp/`(与 PH 同类) |
| 通用 uapi | `/uapi/`47 处引用) |
**Host**`https://api.maribank.com.sg`(非 PH 的 `api.seabank.ph`)。
---
## 6. Native 库arm64 split
已从 `maribank_sg_arm64.apk` 解出至 `reverse/extracted/native/`,与风控相关:
| SO | 大小(约) | 作用 |
|----|-----------|------|
| `libshpssdk_bank.so` | 8.5 MB | SHPSSDK 银行风控、riskToken |
| `libshpssdk.so` | 6.3 MB | **SG 额外**PH 侧以 bank 为主) |
| `libsdkutils.so` | 789 KB | 注册/body 加密 |
| `libbkutils.so` | 102 KB | JNI 工具 |
| `libmemory_security.so` | 3.8 MB | 内存/安全相关 |
---
## 7. 与现有 Xposed 模块的关系
当前 `MariBankRootBypassHook` / `MariBankShpsNativeHook` **仅绑定**
```java
public static final String PACKAGE = "ph.seabank.seabank";
```
**SG 包名未纳入**,因此截图中的拦截 **预期行为**
### 7.1 可复用(改包名即可试)
- SafeMode boolean Hook`safemode.b` 等)
- `Process.killProcess` / `finishAffinity` 反自杀
- `/proc/self/maps` 过滤、`SystemProperties` 伪装
- SHPSSDK `getRiskSync` 清空、`getRiskToken` 净化
- OkHttp 出站 riskToken 净化
**已实现2026-07-06**`MariBankRootBypassHook` 已支持 `sg.com.maribankmobile.digitalbank`,含 ADB Settings 伪装、ADB 全屏页 finish、Root/ADB Toast 拦截。
### 7.2 SG 专用(已部分实现)
| 项 | 状态 |
|----|------|
| **包名** | ✅ `MainHook` + `arrays.xml` |
| **ADB 风险** | ✅ `Settings.Global/Secure` adb 键 → 0`init.svc.adbd` → stopped |
| **ADB 拦截页** | ✅ `Activity.onResume` 检测 ADB 文案后 `finish()` |
| **Root Toast** | ✅ 「Does not support root device」 |
### 7.3 不建议照搬 PH 服务端结论
PH 的 **4067012****菲律宾服务端** 结论SG 需单独测 `api.maribank.com.sg`
---
## 8. 逆向脚本
```powershell
# 已从手机 pull APK 后可本地扫描
python reverse/scripts/scan_maribank_sg.py
python reverse/scripts/find_sg_adb_strings.py
python reverse/scripts/find_sg_adb_classes.py
python reverse/scripts/list_safemode.py reverse/apks/maribank_sg_base.apk
```
从手机 pull已执行过
```powershell
adb shell pm path sg.com.maribankmobile.digitalbank
adb pull <base.apk> reverse/apks/maribank_sg_base.apk
```
---
## 9. 建议下一步2026-07-06 更新)
1. ~~LSPosed 增加 SG 包名~~ ✅ 已完成
2. ~~扩展 ADB bypass~~ ✅ 已完成
3. **SG**diff PH/SG register 明文;修复 ProcessBuilder 异常;仍 3100012 则试干净机
4. **PH**:走完 OTP → 开户全流程,确认稳定性
5. logcat`MariBankEncrypt in0 byte``3100012``OTP_SMS`
---
## 10. 实测状态2026-07-06
| 包 | 注册 API | 结果 |
|----|----------|------|
| `ph.seabank.seabank` | `api.seabank.ph/uapi/v2/register` | ✅ **code=0 → OTP** |
| `sg.com.maribankmobile.digitalbank` | `api.maribank.com.sg/uapi/v2/register` | ❌ **3100012** |
完整说明:[`MariBank_2026-07-06_菲律宾突破.md`](MariBank_2026-07-06_菲律宾突破.md)
---
## 11. 相关文档
| 文档 | 说明 |
|------|------|
| [`MariBank_2026-07-06_菲律宾突破.md`](MariBank_2026-07-06_菲律宾突破.md) | **PH OTP 突破 + SG 现状 + 方案 B** |
| [`MariBank实现说明.md`](MariBank实现说明.md) | PH Hook 实现与问题清单 |
| [`工作日志_2026-07-03.md`](工作日志_2026-07-03.md) | PH 版 7/3 工作记录 |
---
*记录日期2026-07-06 · 最后更新:菲律宾 OTP 突破*