jarjarbigs
Ein Tool zum Zusammenführen von JAR Dateien für Java Remote-Debugging Szenarien
-
-
- Name
- Hans-Martin Münch
-
Dies ist eine übersetzte Version. Das englische Original finden Sie hier.
Wenn es um die Analyse von Closed-Source-Java-Anwendungen geht, starten die meisten Forscher schnell einen Decompiler wie JD-GUI und beginnen mit der Analyse. Diese Tools sind gut, erlauben aber nur eine statische Analyse. Bei komplexem Code ist es oft sinnvoller, einen Debugger zu verwenden und die Anwendung während der Laufzeit zu analysieren.
Anders als dnspy (ein Decompiler für .NET-Anwendungen) bietet JD-GUI selbst keine Debugging-Funktionen. Es ist jedoch möglich, IDEs wie Intellij oder Eclipse mit einem Decompiler-Plugin zu erweitern.
Um eine externe Java Applikation zu debuggen, gehen Sie grundsätzlich wie folgt vor:
- Erstelle ein neues Java-Projekt, und nehme die .class- und jar-Dateien als externe Dateien in den Build-Pfad auf.
- Aktivieren der Remote-Debugging Funktionalität im Java Startaufruf der Zielapplikation.
- Konfiguration von Remote-Debugging innerhalb von Eclipse
JD-Eclipse hat seine eigenen Probleme, eines davon ist das Auffindens/Dekompilieren einer .class-Datei, die sich in einer anderen jar-Datei befindet. Wir können dieses Problem umgehen, indem wir alle .class-Dateien in einer großen jar-Datei ablegen.
jarjarbigs.py ist ein einfaches Python-Skript, das genau das tut. Es durchläuft rekursiv ein Verzeichnis, entpackt alle jar/war/ear-Dateien und fügt die Class-Dateien in eine einzelnen jar-Datei zusammen. Die so erstellte Datei kann dann als externe JAR Archiv in ein Eclipse-Projekt eingebunden werden. Das Skript basiert auf einer Idee von Matthias Kaiser, wechler rsync für diese Aufgabe verwendete.
h0ng10@rocksteady ~/w/jarjarbigs> python3 jarjarbigs.py -h
--- jarjarbigs.py 0.1 by MOGWAI LABS GmbH --------------------------------------
usage: jarjarbigs.py [-h] [-l LOGFILE] [-x XML] source destination
jarjarbigs.py - create a huge jar file from existing jar/war/ear files
positional arguments:
source source directory with jar/war/ear files
destination destination jar file
optional arguments:
-h, --help show this help message and exit
-l LOGFILE, --logfile LOGFILE
Create a log file which jar contains which classes
-x XML, --xml XML Create a second zip archive that contains all xml- and
property files
Das Verwenden von jarjarbigs.py ist recht einfach, es genügt die Angabe des Verzeichnisses mit den JAR Dateien sowie den Namen der zu generierenden JAR Datei anzugeben.
python3 jarjarbigs.py /home/h0ng10/temp/java/testclient/ /home/h0ng10/temp/merged.jar
--- jarjarbigs.py 0.1 by MOGWAI LABS GmbH --------------------------------------
[+] Processing /home/h0ng10/temp/java/testclient/applications/ScriptGridBean-v2.2.jar
[+] Processing /home/h0ng10/temp/java/testclient/applications/POVRayGridBean-v3.6.jar
[+] new archive(s) found: ['/tmp/jarjarbigsugf0yecm/png.jar']
[+] Processing /tmp/jarjarbigsugf0yecm/png.jar
[+] Processing /home/h0ng10/temp/java/testclient/applications/GenericGridBean-v2.3.jar
[+] Processing /home/h0ng10/temp/java/testclient/jre_1.8.101/lib/charsets.jar
[+] Processing /home/h0ng10/temp/java/testclient/jre_1.8.101/lib/management-agent.jar
[+] Processing /home/h0ng10/temp/java/testclient/jre_1.8.101/lib/resources.jar
[+] Processing /home/h0ng10/temp/java/testclient/jre_1.8.101/lib/jce.jar
[+] Processing /home/h0ng10/temp/java/testclient/jre_1.8.101/lib/jsse.jar
[+] Processing /home/h0ng10/temp/java/testclient/jre_1.8.101/lib/ext/nashorn.jar
[+] Processing /home/h0ng10/temp/java/testclient/jre_1.8.101/lib/ext/zipfs.jar
[+] Processing /home/h0ng10/temp/java/testclient/jre_1.8.101/lib/ext/sunec.jar
[+] Processing /home/h0ng10/temp/java/testclient/jre_1.8.101/lib/ext/cldrdata.jar
[+] Processing /home/h0ng10/temp/java/testclient/jre_1.8.101/lib/ext/sunjce_provider.jar
[+] Processing /home/h0ng10/temp/java/testclient/plugins/de.fzj.unicore.rcp.terminal_7.4.0.jar
[+] Processing /home/h0ng10/temp/java/testclient/plugins/org.eclipse.swt.gtk.linux.x86_64_3.107.0.v20180611-0422.jar
[+] Processing /home/h0ng10/temp/java/testclient/plugins/org.sat4j.pb_2.3.5.v201404071733.jar
[+] Creating jar archive /home/h0ng10/temp/merged.jar
jarjarbigs.py geht rekursiv durch alle Unterverzeichnisse und führt alle Klassendateien aus jar-, war- und ear-Archiven zusammen. Dies beinhaltet auch jar-Dateien ein, die Teil von extrahierten war/ear-Archiven sind. Das dabei erzeugte Archiv kann dann als externes JAR zum Eclipse-Projekt hinzugefügt werden.
Weitere Funktionen
Logdateien
jarjarbigs.py erlaubt das Erstellen einer Textdatei, die protokolliert welches JAR Archiv welche .class-Datei enthält. Dies kann nützlich sein, wenn beispielsweise ein kleines PoC-Tool erstellt werden muss das nur auf die notwendigen Klassen/jar-Dateien enthält. Zum Erstellen einer Logdatei verwendet das Kommandozeilenargument “-l”.
jarjarbigs.py can create a text file that logs which archive contained which .class file. This can be useful if you need to create a small PoC tool that only references the necessary classes/jar files. Use the “-l” parameter to do that.
python3 jarjarbigs.py /opt/path/to/application /home/h0ng10/work/merged.jar -l /tmp/jarjarbigs.log
Eine typische Logdatei sieht wie folgt aus:
POVRayGridBean-v3.6.jar: com/sixlegs/image/pngChunk_oFFs.class
POVRayGridBean-v3.6.jar: com/sixlegs/image/pngChunk_gIFx.class
POVRayGridBean-v3.6.jar: com/sixlegs/image/pngChunk_pHYs.class
POVRayGridBean-v3.6.jar: com/sixlegs/image/pngBitMover8RGBA.class
POVRayGridBean-v3.6.jar: com/sixlegs/image/pngChunk_iTXt.class
POVRayGridBean-v3.6.jar: com/sixlegs/image/pngBitMover4G.class
POVRayGridBean-v3.6.jar: com/sixlegs/image/pngChunk.class
POVRayGridBean-v3.6.jar: com/sixlegs/image/pngUnfilterInputStream.class
POVRayGridBean-v3.6.jar: com/sixlegs/image/pngChunk_IHDR.class
POVRayGridBean-v3.6.jar: com/sixlegs/image/pngChunk_tIME.class
POVRayGridBean-v3.6.jar: com/sixlegs/image/pngChunk_iCCP.class
POVRayGridBean-v3.6.jar: com/sixlegs/image/pngBitMover8G.class
POVRayGridBean-v3.6.jar: com/sixlegs/image/pngAbstractTextChunk.class
POVRayGridBean-v3.6.jar: com/sixlegs/image/pngBitMover16G.class
POVRayGridBean-v3.6.jar: com/sixlegs/image/pngChunk_IEND.class
POVRayGridBean-v3.6.jar: com/sixlegs/image/pngAdam7Interlacer.class
POVRayGridBean-v3.6.jar: com/sixlegs/image/pngChunk_sBIT.class
POVRayGridBean-v3.6.jar: com/sixlegs/image/pngChunk_hIST.class
POVRayGridBean-v3.6.jar: com/sixlegs/image/pngBitMover16GA.class
POVRayGridBean-v3.6.jar: com/sixlegs/image/pngBitMover.class
POVRayGridBean-v3.6.jar: com/sixlegs/image/pngTextChunk.class
POVRayGridBean-v3.6.jar: com/sixlegs/image/pngIDATInputStream.class
POVRayGridBean-v3.6.jar: com/sixlegs/image/pngPngImage$Data.class
POVRayGridBean-v3.6.jar: com/sixlegs/image/pngChunk_tRNS.class
POVRayGridBean-v3.6.jar: com/sixlegs/image/pngChunk_pCAL.class
POVRayGridBean-v3.6.jar: com/sixlegs/image/pngPngExceptionSoft.class
POVRayGridBean-v3.6.jar: com/sixlegs/image/pngChunkHandler.class
POVRayGridBean-v3.6.jar: com/sixlegs/image/pngChunk_PLTE.class
Speichern von xml-/properties Dateien
war/ear-Archive enthalten auch XML- oder .properties Dateien, die nicht in das erzeugte JAR-Archiv übernommen werden. Da diese Dateien oft nützliche Informationen für die Analyse einer Anwendung liefern, erlaubt jarjarbigs.py diese in einem separaten Zip-Archiv zu speichern.
python3 jarjarbigs.py /opt/path/to/application /home/h0ng10/work/merged.jar -x /tmp/application.xml
Ihr findet jarjarbigs auf unserem GitHub account.
Vielen Dank an Ethan Sykes bei Unsplash für das Titelbild.