# 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。