feat(tng): TNG eWallet Promon bypass、Zygisk 信号守卫与注册链保护
新增 TngRootBypassHook 与 tng_exit_guard 模块,修复 BAL 强拉、SIGABRT/pc==lr SEGV 崩溃,验证可进入注册页。
This commit is contained in:
85
docs/TNG_自杀链逆向笔记.md
Normal file
85
docs/TNG_自杀链逆向笔记.md
Normal file
@@ -0,0 +1,85 @@
|
||||
# TNG eWallet 逆向笔记 — 自杀链(2026-07-31)
|
||||
|
||||
## 运行时铁证
|
||||
|
||||
| 现象 | 含义 |
|
||||
|------|------|
|
||||
| `Fatal signal 6 (SIGABRT), code 0 (SI_USER)` | 用户态 `kill(pid, SIGABRT)`,**不是** `exit_group`,也不是 `abort()` 的 `SI_TKILL` |
|
||||
| PLT hook `kill/raise` **从不打日志** | Promon 走 **内联 SVC**,不经 PLT |
|
||||
| `E Report : Exiting:` + `xwwqazamx.W: 16` + `bl.a` | Java 层检测入口仍是 `xwwqazamx.bl#a/#b` |
|
||||
| `Displayed ...UserLoginActivity` | UI 能到登录页;随后数秒内被杀 |
|
||||
| `Lcom/aliyun/TigerTally/t/B` 反射 `Thread.dispatchUncaughtException` | 另有一套阿里 TigerTally SDK |
|
||||
|
||||
## 自杀阶梯(当前理解)
|
||||
|
||||
```
|
||||
Promon native 检测 (Thread-N 扫 /proc、selinux、wifi prop…)
|
||||
→ xwwqazamx.bl#a / #b
|
||||
→ 抛 W:16(Report 打 Exiting)
|
||||
→ 同时/随后 inline kill(SIGABRT, SI_USER)
|
||||
→ KillApplicationHandler(Xposed 可拦)
|
||||
→ 若 ABRT 被 ignore:可能改 SIGKILL / BRK(待证)
|
||||
```
|
||||
|
||||
并行:
|
||||
|
||||
- `AppSecurityManager.handle*Callback`(Xposed 已拦)
|
||||
- `openSecurityUrl` Root FAQ(已拦)
|
||||
- `UnhandledEvent` → `finishAllActivityAndKillApp`(已 hook)
|
||||
- ForceExitCountdown(已 hook)
|
||||
- TigerTally / SecurityGuard `JNICLibrary.doCommand`(当前 stub,可能过度)
|
||||
|
||||
## 静态 SO
|
||||
|
||||
`libtngdigital_ewallet.so`(~7.7MB,打包态):
|
||||
|
||||
- `brk` 假阳性/加密指令很多(imm 离散)
|
||||
- 真实 `svc #0` 极少;运行时解密后才出现 exit 序列
|
||||
- **禁止**在 `JNI_OnLoad` 前/中 patch SO(会 Bad JNI / SIGILL)
|
||||
|
||||
## 已验证无效/有害手段
|
||||
|
||||
- seccomp 拦 `exit_group` → Promon 改 UDF/SIGILL
|
||||
- 改 libc exit SVC→RET → 同上
|
||||
- 改 Promon SO 字节 → Bad JNI / SIGILL
|
||||
- 高频 `sigaction` 重装 → 易被当成 hook 指纹
|
||||
|
||||
## 较有效手段
|
||||
|
||||
- Xposed:拦 FAQ / KillApplicationHandler / handle*Callback / ForceExit / UnhandledEvent
|
||||
- Xposed:`bl#a/#b` **beforeHook short-circuit**(避免跑进 native 杀进程)
|
||||
- Zygisk:PLT 观察 + `SIGABRT` ignore(对 SI_USER 理论有效;Promon 可能复位 handler)
|
||||
|
||||
## 新发现(2026-07-31 续)
|
||||
|
||||
### `libtiger_tally.so`(~4.6MB)
|
||||
- 与 Promon `libtngdigital_ewallet.so` **并行加载**
|
||||
- 动态依赖:`abort@LIBC`、`signal@LIBC`(**走 PLT**,可被 Zygisk PLT hook)
|
||||
- 内嵌少量 syscall stub(openat/read/faccessat…),**无** kill/exit stub
|
||||
- `BIND_NOW`
|
||||
|
||||
### 打包态 SO
|
||||
- `libtngdigital_ewallet.so` / `libtiger_tally.so` 静态 **0** 处 `movz x8,#129 + svc`
|
||||
- 自杀用的 inline `kill` 仍可能在 **运行时解密** 后出现 → Zygisk **延迟 2s** 扫描 patch
|
||||
|
||||
### 日志结论(2026-07-31 11:37–11:47)
|
||||
|
||||
| 现象 | 含义 |
|
||||
|------|------|
|
||||
| `exited cleanly (1)` | inline `exit_group(1)`(PLT 拦不住) |
|
||||
| kill SVC→RET 后 `signal 9` | SO 完整性/备用路径 → **SIGKILL** |
|
||||
| 过早 patch exit_group | 启动即崩(CEM) |
|
||||
| seccomp 拦 `exit`+`exit_group` | ~1s 死(误伤线程 exit) |
|
||||
| seccomp **只拦 exit_group** | 存活 **~16s**,随后 **SIGILL 风暴**(count 7000+) |
|
||||
| `caught sig=4 si_code=1` | Promon UDF 兜底;+4 skip 无效 |
|
||||
|
||||
### Rest 配置(2026-07-31 12:55,已装机)
|
||||
|
||||
| 层 | 策略 |
|
||||
|----|------|
|
||||
| Zygisk | PLT 拦 exit/abort/kill;**exit_group-only seccomp @2s**;**禁止**改 SO(会 SIGKILL) |
|
||||
| 信号 | ABRT ignore;SEGV/ILL **+4 skip**;**不** freeze 线程(freeze 会 ANR) |
|
||||
| Xposed | Splash `reportFullyDrawn` + **2.5s 强拉 UserLogin** + finish Splash;bl SC / 自杀 Java / JNIC stub |
|
||||
|
||||
实测:进程 **≥40s** 存活,焦点 `UserLoginActivity`;`phase done seccomp=1 caught=0`。
|
||||
注意:点亮屏幕后再开 App(`svc power stayon true`);勿把 TNG 放进 Magisk DenyList。
|
||||
Reference in New Issue
Block a user