
shouganaiyo-loader is a cross-platform Frida-based Node.js command-line tool that forces Java processes to load a Java/JVMTI agent regardless of whether or not the JVM has disabled the agent attach API.
shouganaiyo-loader 是一个基于 Frida 的跨平台 Node.js 命令行工具,它强制 Java 进程加载 Java/JVMTI agent,无论 JVM 是否已禁用 agent attach API。
$ sudo npm install -g shouganaiyo-loader
$ git clone https://github.com/nccgroup/shouganaiyo-loader
$ cd shouganaiyo-loader
$ npm install
$ sudo npm install -g
# shouganaiyo-loader --pid <pid> -t <hotspot|openj9> -a /path/to/agent.jar "args..."
# shouganaiyo-loader --pid <pid> -t <hotspot|openj9> -j instrument "/path/to/agent.jar=args..."
# shouganaiyo-loader --pid <pid> -t <hotspot|openj9> -j "/path/to/(lib)?instrument.(so|dylib|dll)" "/path/to/agent.jar=args..."
# shouganaiyo-loader --pid <pid> -t <hotspot|openj9> -j /path/to/agent.so 'jvmti agent args...'
shouganaiyo-loader 在 Apache License, Version 2.0 下授权。
shouganaiyo-loader 旨在支持 Linux、Windows 和 MacOS 上的 Java 6-17+,适用于 HotSpot 和 OpenJ9 JVM。
MacOS 11+ 的变化导致缺少 Get Task Allow 权限的已签名二进制文件无法被 root 进程附加。除 AdoptOpenJDK JDK11+HotSpot 外,所有 AdoptOpenJDK/Adoptium Temurin/IBM Semeru 版本在签名时均未包含 Get Task Allow 权限,因此默认情况下无法附加到这些 JVM,可视为已损坏。
要在短期内解决此问题:
移除任何 Java 二进制文件的代码签名:
$ codesign --remove-signature /path/to/jdk/Contents/Home/bin/javac
从二进制文件中移除“来自 Web 的标记”:
$ cp /path/to/jdk/Contents/Home/bin/java /path/to/jdk/Contents/Home/bin/java.bak
$ curl -o /path/to/jdk/Contents/Home/bin/java.clean file:///path/to/jdk/Contents/Home/bin/java
$ mv /path/to/jdk/Contents/Home/bin/java.clean /path/to/jdk/Contents/Home/bin/java
| JVM | 平台 | 测试版本 |
|---|
| HotSpot | Linux | 6,8,11,17 |
| HotSpot | MacOS | 8,11,17 |
| HotSpot | Windows | 8,11,17 |
| OpenJ9 (0.29.1) | Linux | 8,11,17 |
| OpenJ9 (0.29.1) | MacOS | 17 |
| OpenJ9 (0.29.1) | Windows | 17 |
| OpenJ9 (0.29.0) | Windows | 8,11 |
| OpenJ9 (0.27.0) | Linux | 8,11 |
| OpenJ9 (0.25.0) | Linux | 16 |
| OpenJ9 (0.24.0) | Linux | 8,11 |