# 2026-07-03 本文档汇总 **2026 年 7 月 3 日** 在 `notiMessage` 项目上围绕 **MariBank / SeaBank PH 注册与风控绕过** 所完成的分析、实现、测试与仓库整理工作。 --- ## 1. 当日目标 在已 Root 的 Pixel 6(Magisk + Zygisk + LSPosed)上,对菲律宾 MariBank App 完成: 1. 绕过本地 Root / 设备风控,进入注册流程; 2. 输入手机号并点击 **Next**,完成 `POST /uapi/v2/register` 注册请求。 **目标 App** | 项 | 值 | | --- | ------------------------- | | 包名 | `ph.seabank.seabank` | | 显示名 | MariBank | | 版本 | 3.22.0(versionCode 32200) | --- ## 2. 核心结论(当日最终状态) | 层级 | 状态 | 说明 | | --------------- | ----------- | ------------------------------------------------------------------------------------------- | | 本地 Root 弹窗 / 自杀 | **已基本绕过** | 可进入首页与手机号输入页 | | DFP 上报 | **成功** | `POST /dfp/v1/data/report` 返回 `code=0` | | riskToken 尾部净化 | **Hook 生效** | ` | | 注册接口 | **仍失败** | `POST /uapi/v2/register` → `**4067012`**(亦见 `4067004`) | | 服务端文案 | 账户安全临时封锁 | 「For your account's security, this service has been temporarily blocked...」(+632) 8424 8050 | **判断**:本地 bypass 已推进到 DFP 层,但 **服务端仍拒绝注册**。原因可能包括:加密 DFP 载荷校验、设备指纹黑名单、号码/设备组合风控,而非单纯 riskToken 尾部字段。改 token 尾部 **不足以** 通过注册。 --- ## 3. Xposed 模块实现(`xposed-module`) ### 3.1 新增 / 主要 Hook 文件 | 文件 | 作用 | | ---------------------------------- | ------------------------------------------------------------ | | `hook/MariBankRootBypassHook.java` | SafeMode、SHPSSDK、OkHttp 出站净化、4067 错误日志、Root 自杀拦截 | | `hook/MariBankShpsNativeHook.java` | `/proc` 过滤、native-core、boot 属性伪装、`requestDefense` 等 native 层 | | `hook/MariBankRiskTokenUtil.java` | riskToken / deviceToken 尾部 ` | | `MainHook.java` | 对 `ph.seabank.seabank` 加载上述 Hook(先 early proc,再 deferred) | ### 3.2 关键逆向结论(已写入 Hook) | 能力 | 真实类 / 库 | | -------------- | ------------------------------------------------------- | | riskToken 生成链 | `vvuuuuvvv.wwvuwuwvu(Context)`(classes11.dex) | | SoUtils | `com.shopee.bke.lib.jni.utils.f`(log tag `SoUtils`) | | Native 加密包装 | `com.shopee.bke.lib.jni.utils.d` → native `uvwuvwuv` | | SHPSSDK native | `libshpssdk_bank.so`;`wvvvuwwu.vvuwuuvuu` → `wwvwvwuvv` | | 字符串解密 | `uvuwwuvwv.uvwwuuvvw.uvuwwwuwu(hex, key)` | ### 3.3 明确避免 Hook 的点(实测会崩) - `**RealInterceptorChain.proceed`**:SO 硬编码检测,Hook 后易触发风控或异常。 - `**ShpssInstall` / `vuvuwwwuw`**:干扰 `SoUtils.loadSoLibrary`,导致 `libsdkutils` 加载死循环 **白屏**。 ### 3.4 注册请求体 - register body 为 **native 加密**,Java 层 Hook 常见日志:`register request body unreadable (encrypted or one-shot)`。 - 当日 **未** 在 logcat 中抓到 register 明文 JSON。 --- ## 4. 逆向与静态分析(`reverse/`) ### 4.1 已完成 - 从设备 pull split APK / base APK,提取 `libsdkutils.so`、`libshpssdk_bank.so`、`libbkutils.so` 等至 `reverse/extracted/native/`。 - 编写并运行大量 DEX/APK 扫描脚本(scan / dump / find 系列),定位: - SHPSSDK、SafeMode、注册 API、4067 错误上下文; - JNI 目标与加密类继承关系。 - 脚本:`reverse/frida/pull_split_apk.ps1`、`reverse/scripts/extract_all_so.py` 等。 ### 4.2 主要 native / 加密链路 ``` register 请求 → NativeEncryptUtilsWrapper (utils.d) → native uvwuvwuv (libsdkutils.so / libbkutils.so) → 加密 body + riskToken / deviceToken → POST https://api.seabank.ph/uapi/v2/register ``` --- ## 5. Frida 动态分析 ### 5.1 环境 - PC:Frida **17.15.3**;手机:`/data/local/tmp/frida-server` - 脚本:`reverse/frida/trace_maribank_register.js` - 运行器:`run_frida_trace.py`(attach / spawn)、`run_spawn_trace.py`、`start-mari-trace.ps1` ### 5.2 遇到的问题 | 模式 | 现象 | | ---------- | ---------------------------------------------------------------------- | | **attach** | 长时间 `Java.available == false`,Java Hook 无法安装;进程名需用 **MariBank** 而非包名查找 | | **spawn** | native `dlopen` 可 hook,但 Java 层 `Java is not defined` / 线程相关异常 | | CLI spawn | 无 `--no-pause` 时 session 立即退出;需 Python runner 保活 | ### 5.3 当日 Frida 结论 - **未抓到** 有效的 `/register` 明文 body 或完整 HTTP 链日志。 - MariBank 对 Frida 有较强干扰;**当日有效证据主要来自 LSPosed logcat**,而非 Frida trace。 --- ## 6. Logcat 实测摘要(LSPosed 生效) **测试号码示例**:`9178854266`、`9133477799`、`9171243667` 等(均失败)。 **典型成功链路** ```text POST /dfp/v1/data/report → {"code":0,...} riskToken sanitized ... -> |00|0 ``` **典型失败链路** ```text POST /uapi/v2/register → {"code":4067012,"msg":"For your account's security, this service has been temporarily blocked..."} ``` **其他日志** - `wvvvuwwu.vuwuuwvw` native 实现未找到(可能与 LSPosed / 环境冲突有关)。 - Root 检测触发 `killProcess` 时被 `blocked finish` 拦截,表现为短暂异常后仍可继续使用。 **推荐 logcat 过滤** ```powershell powershell -File scripts\logcat-maribank.ps1 -Follow # 或 adb logcat -s notiMessageHook/MariBankRoot:V MB-TRACE:V ``` --- ## 7. 构建与安装脚本 | 脚本 | 用途 | | ------------------------------ | ------------------------------------ | | `scripts/build-debug.ps1` | 构建主 App + xposed-module debug APK | | `scripts/install-debug.ps1` | 安装双 APK | | `scripts/install-frida.ps1` | PC + 手机 frida-server | | `scripts/start-mari-trace.ps1` | 启动 Frida attach + MariBank 相关 logcat | | `scripts/logcat-maribank.ps1` | 过滤 MariBank / Hook 日志 | | `scripts/organize-reverse.ps1` | 整理 `reverse/` 目录(可重复执行) | LSPosed 作用域需勾选:**MariBank + notiMessage + xposed 模块**。 --- ## 8. 仓库整理 ### 8.1 问题 `reverse/` 根目录堆积 **70+ Python 脚本**、临时 `.dex`、解压 APK(约 **2.2 GB / 7 万+ 文件**),IDE 与 `git status` 显得极乱。 ### 8.2 新目录结构 ``` reverse/ ├── README.md ├── scripts/ # 逆向 Python 脚本(71 个,含 _paths.py) ├── frida/ # Frida 脚本与运行器 ├── apks/ # APK / zip(不入库) ├── extracted/ # 解压、dex dump、.so(不入库) ├── output/ # 分析报告 *.txt ├── logs/ # 运行日志 │ └── frida/ # trace / logcat └── tmp/ # 临时 *.dex(不入库) ``` ### 8.3 同步修改 - **44 个** 脚本内路径改为相对 `reverse/` 根(`apks/`、`extracted/`、`tmp/`、`output/`)。 - Frida 日志输出改到 `reverse/logs/frida/`。 - 更新 `.gitignore`、`docs/银行逆向.md`、`pull_split_apk.ps1`、`start-mari-trace.ps1`。 - `apk_extract/` 迁入 `extracted/apk_extract/`;`seabank.zip` 迁入 `apks/`。 --- ## 9. 后续建议(未在当日完成) | 优先级 | 方向 | | --- | -------------------------------------------------------------------- | | 1 | **对照实验**:未 Root 干净机 + 菲律宾 IP + 新号码,区分设备封禁 vs 号码封禁 | | 2 | **Native 明文**:Hook `libsdkutils` / `utils.d` 包装层,抓 register 加密前 body | | 3 | **riskToken 全链**:在 `vvuuuuvvv.wwvuwuwvu` 最早出口做更深层净化(含加密段) | | 4 | **Frida**:换未被检测环境,或仅 attach 已运行进程;当前 MariBank 上 Java 桥不稳定 | | 5 | **停试**:已失败号码/设备冷却 **24–48h**,避免加重 `4067012` | | 6 | **官方解封**:(+632) 8424 8050 | --- ## 10. 相关文档与路径索引 | 文档 / 路径 | 说明 | | ---------------------------------- | ----------------------------------- | | `docs/MariBank实现说明.md` | **MariBank 实现细节与问题记录(专文)** | | `docs/MariBank_2026-07-06_菲律宾突破.md` | PH OTP 突破 + SG 现状 | | `docs/MariBank风控与载荷说明.md` | register 字段、afExtInfo、USB 调试 | | `docs/手机操作手册.md` | Root 机部署与日常操作 | | `docs/银行逆向.md` | 澳大利亚三家银行 Hook(Up / Suncorp / ubank) | | `docs/Hook指南.md` | 通用 Hook 架构、Xposed/LSPosed、扩展 | | `docs/更新说明.md` | 主 App / TG Hook 版本历史 | | `reverse/README.md` | 逆向工作区目录说明 | | `reverse/frida/jni_targets.md` | JNI Hook 目标备忘 | | `xposed-module/.../MariBank*.java` | MariBank bypass 实现 | --- ## 11. 当日工作清单(摘要) - [x] MariBank Root / SHPSSDK / SafeMode Xposed bypass 实现与迭代 - [x] riskToken 尾部净化与 OkHttp 出站拦截 - [x] DEX / SO / JNI 静态逆向与脚本沉淀 - [x] Frida trace 脚本与 attach/spawn 运行器(受 App 反 Frida 限制) - [x] LSPosed logcat 分析,确认 **4067012** 为服务端拒绝 - [x] `reverse/` 目录整理与 `.gitignore` 更新 - [ ] 注册成功(**未完成**,阻塞于服务端风控) --- *记录日期:2026-07-03*