You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Frida替换java.lang.String的$init方法时出现架构适配错误

替换java.lang.String的$init方法时出现架构相关错误

尝试替换java.lang.String类的$init方法实现,加载Frida脚本时触发错误:Error: Unable to make thread_from_jni_environment() helper for the current architecture

系统环境

  • 系统版本:Ubuntu 23.10
  • 环境信息:
$ java --version
openjdk 17.0.10 2024-01-16
OpenJDK Runtime Environment (build 17.0.10+7-Ubuntu-123.10.1)
OpenJDK 64-Bit Server VM (build 17.0.10+7-Ubuntu-123.10.1, mixed mode, sharing)

$ frida --version
16.2.1

使用的Frida脚本

console.log("java status:", Java.available) // 输出为True
Java.perform(() => {
    const groups = Java.enumerateMethods('*java.lang.String!*')
    console.log(JSON.stringify(groups, null, 2))
    groups[0]['classes'].forEach(element => {
        var obj = Java.use(element['name'])
        obj.$init.overload('java.lang.String').implementation = function (inp) {
            console.log(inp)
            return this.$init(arg1)
        }
    });
});

脚本执行输出

____
    / _  |   Frida 16.2.1 - A world-class dynamic instrumentation toolkit
   | (_| |
    > _  |   Commands:
   /_/ |_|       help      -> Displays the help system
   . . . .       object?   -> Display information about 'object'
   . . . .       exit/quit -> Exit
   . . . .
   . . . .   More info at https://frida.re/docs/home/
   . . . .
   . . . .   Connected to Local System (id=local)
Attaching...                                                            
java status: true
[
  {
    "loader": null,
    "classes": [
      {
        "name": "java.lang.String",
        "methods": [
          /* 省略方法列表 */
        ]
      }
    ]
  }
]
Error: Unable to make thread_from_jni_environment() helper for the current architecture
    at Object.JavaThread::thread_from_jni_environment (frida/node_modules/frida-java-bridge/lib/jvm.js:191:1)
    at frida/node_modules/frida-java-bridge/lib/jvm.js:235:1
    at c.perform (frida/node_modules/frida-java-bridge/lib/vm.js:12:1)
    at R (frida/node_modules/frida-java-bridge/lib/jvm.js:234:1)

尝试不同Java版本后的错误情况

  • Java 11:触发上述架构相关错误
  • Java 17:触发上述架构相关错误
  • Java 19:触发新的API缺失错误
  • Java 22:触发新的API缺失错误

Java 19/22的错误输出

Error: Java API only partially available; please file a bug. Missing: _ZN6Method4sizeEb, _ZN6Method19set_native_functionEPhb, _ZN6Method21clear_native_functionEv, _ZN6Method10jmethod_idEv, _ZN20ClassLoaderDataGraph10classes_doEP12KlassClosure, _ZN8VMThread7executeEP12VM_Operation, _ZN11OopMapCache22flush_obsolete_entriesEv, _ZN14NMethodSweeper16sweep_code_cacheEv, _ZTV18VM_RedefineClasses, _ZN18VM_RedefineClasses4doitEv, _ZN18VM_RedefineClasses13doit_prologueEv, _ZN18VM_RedefineClasses13doit_epilogueEv, _ZNK18VM_RedefineClasses26allow_nested_vm_operationsEv, _ZN19Abstract_VM_Version19jre_release_versionEv, _ZN14NMethodSweeper11_traversalsE, _ZN14NMethodSweeper13_should_sweepE
    at E (frida/node_modules/frida-java-bridge/lib/jvm.js:146)
    at b (frida/node_modules/frida-java-bridge/lib/jvm.js:10)
    at _tryInitialize (frida/node_modules/frida-java-bridge/index.js:29)
    at _ (frida/node_modules/frida-java-bridge/index.js:21)
    at <anonymous> (frida/node_modules/frida-java-bridge/index.js:332)
    at call (native)
    at o (/_java.js)
    at <anonymous> (/_java.js)
    at <anonymous> (frida/runtime/java.js:1)
    at call (native)
    at o (/_java.js)
    at r (/_java.js)
    at <eval> (frida/runtime/java.js:3)
    at _loadJava (native)
    at get (frida/runtime/core.js:134)

内容的提问来源于stack exchange,提问作者Nik

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.23 08:45:04