feat(maribank): PH 注册 OTP 突破、SG bypass 与中文文档
菲律宾 SeaBank 在 Root+LSPosed+Shamiko 下 register 已通过并触发 OTP;扩展 SG 包名、加密前 Hook、Magisk 设备伪装脚本,并将 docs 整理为中文操作与风控说明。
This commit is contained in:
217
docs/MariBank新加坡逆向.md
Normal file
217
docs/MariBank新加坡逆向.md
Normal 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.2(versionCode **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 突破*
|
||||
Reference in New Issue
Block a user