
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 ist ein plattformübergreifendes, auf Frida basierendes Node.js-Kommandozeilentool, das Java-Prozesse dazu zwingt, einen Java/JVMTI-Agenten zu laden, unabhängig davon, ob die JVM die Agent-Attach-API deaktiviert hat.
$ 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 ist unter der Apache License, Version 2.0 lizenziert.
shouganaiyo-loader wurde entwickelt, um Java 6-17+ auf Linux, Windows und MacOS sowohl für HotSpot- als auch für OpenJ9-JVMs zu unterstützen.
Änderungen in MacOS 11+ führen dazu, dass codesignierte Binärdateien, denen die Get Task Allow-Berechtigung fehlt, nicht von Root-Prozessen angehängt werden können. Da alle AdoptOpenJDK/Adoptium-Temurin/IBM-Semeru-Releases außer AdoptOpenJDK JDK11+HotSpot ohne die Get Task Allow-Berechtigung codesigniert sind, können sie standardmäßig nicht angehängt werden und gelten als fehlerhaft.
Um dieses Problem kurzfristig zu beheben:
Entfernen Sie die Codesign-Signatur aller Java-Binärdateien:
$ codesign --remove-signature /path/to/jdk/Contents/Home/bin/javac
Entfernen Sie die Markierung „Mark of the Web“ aus der Binärdatei:
$ 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 | Plattform | Getestete Versionen |
|---|
| 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 |