
shouganaiyo-loader é uma ferramenta de linha de comando Node.js multiplataforma baseada em Frida que força processos Java a carregar um agente Java/JVMTI, independentemente de a JVM ter ou não desabilitado a API de anexação de agentes.
shouganaiyo-loader é uma ferramenta de linha de comando Node.js baseada em Frida multiplataforma que força processos Java a carregar um agente Java/JVMTI independentemente de a JVM ter desabilitado ou não a API de anexação de agentes.
$ 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 é licenciado sob a Apache License, Versão 2.0.
shouganaiyo-loader foi desenvolvido para suportar Java 6-17+ em Linux, Windows e MacOS para as JVMs HotSpot e OpenJ9.
| JVM | Plataforma | Versões Testadas |
|---|---|---|
| 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 |
Alterações no MacOS 11+ fazem com que binários com assinatura de código que não possuem a permissão Get Task Allow não possam ser anexados por processos root.
Como todas as versões AdoptOpenJDK/Adoptium Temurin/IBM Semeru, exceto
AdoptOpenJDK JDK11+HotSpot, são assinadas sem a permissão Get Task Allow,
elas não podem ser anexadas por padrão e podem ser consideradas
quebradas.
Para corrigir este problema no curto prazo:
Remova a assinatura de código de quaisquer binários Java:
$ codesign --remove-signature /path/to/jdk/Contents/Home/bin/javac
Remova a "marca da web" do binário:
$ 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