
shouganaiyo-loader è uno strumento da riga di comando Node.js multipiattaforma basato su Frida che obbliga i processi Java a caricare un agente Java/JVMTI indipendentemente dal fatto che la JVM abbia disabilitato o meno l'API di attach dell'agente.
shouganaiyo-loader è uno strumento da riga di comando Node.js multipiattaforma basato su Frida che forza i processi Java a caricare un agente Java/JVMTI indipendentemente dal fatto che la JVM abbia disabilitato l'API di attach degli agenti.
$ 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 è concesso in licenza secondo la Apache License, Version 2.0.
shouganaiyo-loader è scritto per supportare Java 6-17+ su Linux, Windows e MacOS sia per le JVM HotSpot che OpenJ9.
Le modifiche introdotte in MacOS 11+ comportano che i binari con firma di codice privi dell'entitlement Get Task Allow non possano essere agganciati dai processi root. Poiché tutte le release AdoptOpenJDK/Adoptium Temurin/IBM Semeru diverse da AdoptOpenJDK JDK11+HotSpot sono firmate senza l'entitlement Get Task Allow, non è possibile eseguire l'attach per impostazione predefinita, e possono essere considerate non funzionanti.
Per correggere questo problema a breve termine:
Rimuovere la firma codesign da qualsiasi binario Java:
$ codesign --remove-signature /path/to/jdk/Contents/Home/bin/javac
Rimuovere il "mark of the web" dal binario:
$ 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 | Piattaforma | Versioni testate |
|---|
| 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 |