
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 명령줄 도구로, JVM이 에이전트 연결(attach) API를 비활성화했는지 여부와 관계없이 Java 프로세스가 Java/JVMTI 에이전트를 로드하도록 강제합니다.
$ 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는 HotSpot 및 OpenJ9 JVM 모두에서 Linux, Windows, MacOS의 Java 6-17+를 지원하도록 작성되었습니다.
MacOS 11+의 변경 사항으로 인해 Get Task Allow 자격이 없는 코드서명된 바이너리는 루트 프로세스가 연결(attach)할 수 없게 됩니다.
AdoptOpenJDK JDK11+HotSpot을 제외한 모든 AdoptOpenJDK/Adoptium Temurin/IBM Semeru 릴리스는 Get Task Allow 자격 없이 코드서명되어 있으므로 기본적으로 연결할 수 없으며, 손상된 것으로 간주할 수 있습니다.
이 문제를 단기적으로 해결하려면 다음을 수행하세요:
Java 바이너리에서 코드서명 서명을 제거합니다:
$ codesign --remove-signature /path/to/jdk/Contents/Home/bin/javac
바이너리에서 '웹 표시(mark of the 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 |