Skip to content

[Bug] 啟動時因 SigBypass.setModuleNativeLibraryRoots JNI 錯誤導致 App 必定閃退(SIGABRT) #139

Description

@MinecraftSky

Steps to reproduce/复现步骤

  1. 使用 NPatch 修補 Via Browser 7.2.1 APK(newPackage: mark.via.gp
  2. 安裝修補後的 APK
  3. 開啟 App
  4. App 啟動後立即閃退(無法進入任何 Activity 或 Application 生命週期回呼)

Expected behaviour/预期行为

不應崩潰:SigBypass.setModuleNativeLibraryRoots(String[]) 在處理任意長度(包含空陣列)的模組 library root 列表時,App 應能正常完成啟動,不應觸發 SIGABRT

Actual behaviour/实际行为

App 安裝後每次啟動皆會在極短時間內(約 1~2 秒內)閃退,無法進入任何畫面,系統彈出「應用程式已停止運作」。透過 adb logcat 抓取的完整堆疊顯示,App 進程並非一般 Java FATAL EXCEPTION(未曾出現該關鍵字),而是被 ART CheckJNI 判定為原生層程式錯誤後主動 abort(),訊息如下:

JNI DETECTED ERROR IN APPLICATION: JNI ERROR (app bug): jstring is an invalid local reference: 0x7c51e9d0fd (popped reference at index 63 in a table of size 60)
    in call to ReleaseStringUTFChars
    from void org.lsposed.lspd.nativebridge.SigBypass.setModuleNativeLibraryRoots(java.lang.String[])

進程隨即收到 Fatal signal 6 (SIGABRT) 而終止。系統 ActivityManager 記錄該進程「crashed too many times, killing! Reason: crashed quickly」。

此行為在兩次獨立測試中重現且完全一致(僅 local reference table 的越界 index 從 61 變為 63,其餘堆疊、崩潰位置、觸發函式皆相同):

  • 第一次:修補時 sigBypassLevel=2
  • 第二次:修補時 sigBypassLevel=0(關閉簽名繞過功能,作為排除變因用)

即關閉 sigBypassLevel 並未能避免崩潰,證明此問題並非該功能開關本身導致,而是 SigBypass.setModuleNativeLibraryRoots 這條 native 路徑在 LSPApplication.onLoad 啟動流程中無條件執行、且其內部邏輯本身存在 bug。

崩潰堆疊

F mark.via.gp: java_vm_ext.cc:625] JNI DETECTED ERROR IN APPLICATION: JNI ERROR (app bug): jstring is an invalid local reference: 0x7c51e9d0fd (popped reference at index 63 in a table of size 60)
F mark.via.gp: java_vm_ext.cc:625]     in call to ReleaseStringUTFChars
F mark.via.gp: java_vm_ext.cc:625]     from void org.lsposed.lspd.nativebridge.SigBypass.setModuleNativeLibraryRoots(java.lang.String[])
...
F mark.via.gp: runtime.cc:805]   native: #14 pc 00044320  /data/data/mark.via.gp/cache/npatch/libnpatch-808781314454323767.so (deleted) (???)
F mark.via.gp: runtime.cc:805]   at org.lsposed.lspd.nativebridge.SigBypass.setModuleNativeLibraryRoots(Native method)
F mark.via.gp: runtime.cc:805]   at top.nkbe.npatch.loader.LSPApplication.onLoad(...)
F mark.via.gp: runtime.cc:805]   at java.lang.Runtime.nativeLoad(Native method)
F mark.via.gp: runtime.cc:805]   at java.lang.Runtime.load0(Runtime.java:939)
F mark.via.gp: runtime.cc:805]   at java.lang.System.load(System.java:1729)
F mark.via.gp: runtime.cc:805]   at top.nkbe.npatch.metaloader.LSPAppComponentFactoryStub.a(...)
F mark.via.gp: runtime.cc:805]   at top.nkbe.npatch.metaloader.LSPAppComponentFactoryStub.b(...)
F mark.via.gp: runtime.cc:805]   at top.nkbe.npatch.metaloader.LSPAppComponentFactoryStub.instantiateClassLoader(...)

呼叫鏈:

ActivityThread.handleBindApplication
→ LoadedApk.getClassLoader → createOrUpdateClassLoaderLocked
→ LSPAppComponentFactoryStub.instantiateClassLoader
→ LSPAppComponentFactoryStub.b / a
→ System.load(libnpatch.so)
→ LSPApplication.onLoad
→ SigBypass.setModuleNativeLibraryRoots(String[])   ← 崩潰點

Xposed Module List/Xposed 模块列表

BetterVia(com.jiguro.bettervia)

NPatch version/NPatch 版本

v1.0.7(741)

Android version/Android 版本

Android 16

Shizuku version/Shizuku 版本

13.6.0.r1086.26508300

Version requirement/版本要求

  • I am using latest debug CI version of NPatch and enable verbose log/我正在使用最新 CI 调试版本且启用详细日志

Apk file/Apk 文件

Via_7.2.1.zip

Logs/日志

Details

20260814.log

crash.txt

crash2.txt

Metadata

Metadata

Assignees

No one assigned

    Labels

    bugSomething isn't working

    Type

    No type

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions