Hallo zusammen!
Ich habe eine Java-Anwendung vorliegen, bei der ich gerne mal einen
Blick in den Quellcode werfen würde. Das übliche Vorgehen wäre ja:
Jar-Archiv herausholen, Class-Files extrahieren, diese Decompileren und
so den Sourcecode erhalten.
Leider scheitere ich schon beim ersten Schritt. Die Anwendung wurde
irgendwie als .exe verpackt (mit sowas wie launch4j). Nun will es mir
nicht gelingen die Jar-Archive da heraus zu holen.
Hat Jemand sowas schonmal gemacht? Kann mir jemand weiterhelfen?
Danke!
PS:
Warum will ich die Anwendung Reverse-Engineeren? Ich bin einfach nur
neugierig, wie diese implementiert ist. Da würde ich gerne ein bisschen
was draus lernen ;-)
Wer sich mal an der .exe versuchen will kann sie hier herunterladen:
http://www.vankurt.de/share/MyFreeFarmBot.exe
Was denkst du was du da als Ergebnis bekommst? Auch Java-Bytecode ist im
Prinzip Maschinencode und kann damit höchstens disassembliert werden.
Ein komplette Rückführung in Java-Quellcode ist IMO gar nicht möglich
und beschehert dir höchstens völlig unnütz benannte Variablen, Klassen
und Methoden. Wenn der Zweck darin besteht an eine bestimmte Information
zu kommen dann geht das, will man sich aber einfach mal den Code
anschauen so wird ein dekompilierter Code nichts bringen.
gruß cyblord
cyblord ---- schrieb:> unnütz benannte Variablen, Klassen> und Methoden
Ohne besondere Vorkehrungen sind Klassennamen, Methodennamen und
Membervariablen im "Klartext" in einem Classfile enthalten und können
z.B. sogar zur Laufzeit mittels "Reflection-Decompiler" ausgelesen
werden, einzig Lokale Variablen sind ggf. nicht mehr 100% zu
rekonstruieren.
Das ganze scheint mit Jar2Exe verpackt zu sein siehe:
http://www.jar2exe.com/http://www.netzwelt.de/download/12735-jar2exe-free-edition.html
Das einfachste wird wohl sein das Programm zu starten und dann mit einem
Remotedebugger draufzuschauen.
Hast du den den Autor schon einmal gefragt ob er den "Interesse" stillen
kann?
Ich habe mir vorhin die .exe heruntergeladen und angeschaut.
Die .exe enthält tatsächlich ein .jar File, welches unter Ubuntu mit dem
"Archivmanager" entpackt werden kann.
Dieses jar enthält jedoch kaum Code.
Eine Klasse (ich erlaube mir mal etwas zu zitieren, da kein Code
enthalten ist):
1
public class Jar2ExeClassLoader extends ClassLoader
Ich sehe hier das es einen eigenen, native implementierten (also nicht
in Java sondern in C / C++ implementiert) Klassloader handelt.
Weiter hab ichs mir nicht angeschaut, es kann sein das die Java Klassen
einfach ins Binary als "const char *" gepackt sind, es kann jedoch auch
sein das die Klassen verschlüsselt sind. Dann wird es komplizierter.
Egal, es ist trotzdem möglich an die Klassen zu kommen, aber sicher
nicht legal.
Stell doch einfach deine Frage, was du wissen möchtest. Ggf. kann ich
dir auch einfach eine Antwort geben...
(Ggf. kann ich dir auch ein Beispiel geben wenn du etwas spezielles
anschauen willst, dann natürlich legal;-))
mfg Andreas
Andreas B. schrieb:> Die .exe enthält tatsächlich ein .jar File, welches unter Ubuntu> mit dem "Archivmanager" entpackt werden kann.
Wie ich oben schrieb ist das nur die "äußere Hülle" des Jar2Exe Tools,
die Daten sind (eventuell verschlüsselt) als Binrärklumpatsch "innen
drinnen", kann man sicher mit etwas Aufwand auch ran (wie gesagt
spätestens wenn man mit Debugger auf der JVM hängt), aber zum "gucken"
und "lernen" sicher nicht das geeignete Projekt.
Läubi .. schrieb:> Andreas B. schrieb:>> Die .exe enthält tatsächlich ein .jar File, welches unter Ubuntu>> mit dem "Archivmanager" entpackt werden kann.> Wie ich oben schrieb ist das nur die "äußere Hülle" des Jar2Exe Tools,
Genau
> die Daten sind (eventuell verschlüsselt) als Binrärklumpatsch "innen> drinnen", kann man sicher mit etwas Aufwand auch ran (wie gesagt> spätestens wenn man mit Debugger auf der JVM hängt),
Geht auch einfacher, ich sag nur mal ClassLoader/rt.jar;-)
> aber zum "gucken"> und "lernen" sicher nicht das geeignete Projekt.
Nein, war mir noch eingefallen ist (darum eigentlich der Post): Die
Klassen können auch durch einen http://de.wikipedia.org/wiki/Obfuscator
gejagt werden.
Würde ich machen wenn ich den Code verstecken will. Spätestens dann ist
nichts mehr zu machen...
@DirkUnger
Sag was dich interessiert, es gibt sicher ein Beispiel dafür...
mfg Andreas
Andreas B. schrieb:> Egal, es ist trotzdem möglich an die Klassen zu kommen, aber sicher> nicht legal.
Oha, das war mir nicht bewusst! Ich hätte gedacht das ist wie mit nem
Toaster. Den darf ich doch auch auseinander schrauben und reinschauen,
wenn ich das will ;-)
Was mich interessiert hat, ist wie das "Scrapen" von Webseiten
funktioniert. Bei der Exe handelt es sich um einen Bot für ein
Browsergame. Ich habe bisher überhaupt keine Vorstellung davon, wie
sowas funktionieren könnte. Da ich gerade erst das Programmieren lerne,
hat mich da die Neugier gepackt...
Danke soweit für eure Mühe!
WIe soll das chon funktionieren? Request auf die Website, Daten parsen
und aktionen starten.
Oder halt ein entsprechendes Framework nutzen, HTMLUnit müsste sich für
sowas eigentlich auch zweckentfremnden lassen (ich vermute mal es geht
um ein Browsergame).
DirkUnger schrieb:> Ich hätte gedacht das ist wie mit nem> Toaster. Den darf ich doch auch auseinander schrauben> und reinschauen, wenn ich das will ;-)
"Nein nein ich will den nicht kaufen, ich wollt nur mal reinschauen" ;-)
Klar "darf" man bei eigenen Sachen machen was man möchte, hier geht es
aber um fremdes "Eigentum" was dir freundlicherweise kostenlos zur
Nutzung überlassen wird.
>WIe soll das chon funktionieren? Request auf die Website, Daten parsen>und aktionen starten.
sicher?
sind Browser Games nicht (meist) Flash?
ob das da so einfach ist?
eher werden wohl mouseclicks usw. simuliert.?!
dass man das programm nicht decompilieren darf, halte ich auch für eher
unwahrscheinlich
(solange man das ergebnis nicht veröffentlich, verkauft, andere
programme schreibt usw. )
der BOT selber ist sicher "illegal"
Robert L. schrieb:> der BOT selber ist sicher "illegal"
Das denke ich nicht. Natürlich verstößt sowas gegen die
Nutzungsrichtlinien eines Browsergames. Wenn sowas entdeckt wird, wird
mit Sicherheit auch der Account gesperrt. Aber illegal?
Gibt es wirklich ein Gesetzt, das verbietet die Eingaben auf einer
Webseite zu automatisieren? Das wäre schon sehr seltsam...
Andreas B. schrieb:> Egal, es ist trotzdem möglich an die Klassen zu kommen, aber sicher> nicht legal.
Quatsch. Natürlich darfst du das Programm analysieren. Deine JVM macht
das ja auch, wenn sie das Programm lädt. Das ist ungefähr wie wenn man
sagt, ein Bild auf einer Webseite dürfe nicht heruntergeladen werden -
und dabei vergisst, dass es zu diesem Zeitpunkt schon heruntergeladen
wurde. Halt nicht explizit durch den Benutzer, sondern automatisch durch
den Browser.
Robert L. schrieb:>>WIe soll das chon funktionieren? Request auf die Website, Daten parsen>>und aktionen starten.>> sicher?>> sind Browser Games nicht (meist) Flash?>> ob das da so einfach ist?>> eher werden wohl mouseclicks usw. simuliert.?!
Das kannst du selbst feststellen, wenn sich die Maus bewegt: Ja;-)
Ist aber eher schwer so etwas funktionierend umzusetzen, und dann hätte
ich bestimmt nicht Java dafür genommen.
Ich glaube auch eher das Requests an den Server abgesendet werden. Du
kannst das ganz einfach herausfinden, installiere dir
http://www.wireshark.org/
Ziemlich sicher siehst du dann was die Applikation für Requests sendet.
>> dass man das programm nicht decompilieren darf, halte ich auch für eher> unwahrscheinlich> (solange man das ergebnis nicht veröffentlich, verkauft, andere> programme schreibt usw. )
Ich bin kein Jurist, und will ich auch definitiv nicht sein. Aber das
Disassemblieren (was dein "Anschauen" / Decompilieren meint) ist im
allgemeinen verboten.
Ich sehe das nicht ganz so streng... (habe bisher alle meine als Hobby
entwickelte Software unter freie Lizenzen gestellt).
Microsoft ist ein gutes Beispiel: Deren EULA ist so formuliert das du
grundsätzlich bereits beim Betrachten der Binaries im Hexeditor
angeklagt werden könntest. (OK, der Beweis wird schwer;-))
>> der BOT selber ist sicher "illegal"
Klar, aber für beides gilt: Solange du nicht erwischt wirst passiert
auch nichts...
Versuch mal ob du mit Wireshark herauskriegst was du willst.
mfg Andreas
Andreas B. schrieb:> Ich glaube auch eher das Requests an den Server abgesendet werden. Du> kannst das ganz einfach herausfinden, installiere dir> http://www.wireshark.org/
Chrome kann den HTTP-Verkehr übrigens auch anzeigen, für diesen Zweck
sogar komfortabler als Wireshark.
Andreas B. schrieb:> Ich bin kein Jurist, und will ich auch definitiv nicht sein. Aber das> Disassemblieren (was dein "Anschauen" / Decompilieren meint) ist im> allgemeinen verboten.
Könntest du da mal bitte Quellen für solche Behauptungen liefern? Würde
mich wirklich interessieren, gegen welches Gesetz man verstösst, wenn
man Daten auf seinem PC genauer anschauen will. Urheberrecht nicht,
Patentrecht nicht, Eigentum wird auch keines verletzt, ...
P. M. schrieb:> Andreas B. schrieb:>> Ich glaube auch eher das Requests an den Server abgesendet werden. Du>> kannst das ganz einfach herausfinden, installiere dir>> http://www.wireshark.org/>> Chrome kann den HTTP-Verkehr übrigens auch anzeigen, für diesen Zweck> sogar komfortabler als Wireshark.
Aber nur den internen von Chrome, es geht hier ja um eine Java
Applikation.
Diese Kommunikation wird vom Chrome NICHT dargestellt.
>> Andreas B. schrieb:>> Ich bin kein Jurist, und will ich auch definitiv nicht sein. Aber das>> Disassemblieren (was dein "Anschauen" / Decompilieren meint) ist im>> allgemeinen verboten.>> Könntest du da mal bitte Quellen für solche Behauptungen liefern? Würde> mich wirklich interessieren, gegen welches Gesetz man verstösst, wenn> man Daten auf seinem PC genauer anschauen will. Urheberrecht nicht,> Patentrecht nicht, Eigentum wird auch keines verletzt, ...
Urheberrecht ist das Stichwort.
Wie gesagt, ich bin kein Jurist, ich bin Informatiker. Aber Urheberrecht
gehört zur Informatikausbildung dazu.
Ein Auszug aus der MS EULA:
>Limitation On Reverse Engineering, Decompilation, and Disassembly. You>may not reverse engineer, decompile, or disassemble the Product, except>and only to the extent that it is expressly permitted by applicable law>notwithstanding this limitation.
Und wenn du eine .exe im Hex Editor anschaust machst du was? Genau...
"Reverse Engineering"...
Ansonsten steht hier:
http://openbook.galileodesign.de/javainsel5/javainsel26_005.htm#Rxx747java2600504000A061F045100>Ist das Decompilieren legal?>>Wenn der Decompiler auf den eigenen Programmcode losgelassen wird, weil>etwa der Quellcode verschwunden ist, dann ist die Anwendung kein Problem.>Das Reverse Engineering von vollständigen Anwendungen, die unter>Urheberschutz stehen, ist dabei auch nicht unbedingt das Problem.>Vielmehr beginnt die Straftat, wenn dieser Quelltext verändert und als>Eigenleistung verkauft wird.nicht unbedingt das Problem => Naja;-)
Sorry, hab gerade nichts besseres gefunden.
Wie gesagt, es muss erst einer klagen damit etwas passiert;-)
Edit: Hier sollte die Antwort drinstehen...
http://dejure.org/gesetze/UrhG/69e.html (Ist Juristendeutsch, und für
mich nur schwer verständlich;-))
mfg Andreas
Andreas B. schrieb:> Urheberrecht ist das Stichwort.
Moooooment ^^
Was du da zitierst ist eine Lizenzvereinbarung. Wenn du der nicht
zugestimmt hast, musst du dich auch nicht dran halten. Daher sollte das
reverse-engineeren harmlos sein.
DirkUnger schrieb:> Andreas B. schrieb:>> Urheberrecht ist das Stichwort.>> Moooooment ^^>> Was du da zitierst ist eine Lizenzvereinbarung. Wenn du der nicht> zugestimmt hast, musst du dich auch nicht dran halten. Daher sollte das> reverse-engineeren harmlos sein.
Lies bitte alle meine Posts in chronologischer Reihenfolge und komplett.
Und lies: http://dejure.org/gesetze/UrhG/69e.html
mfg Andreas
Hallo Andreas,
das habe ich bereits getan. So wie ich das verstehe greift der von dir
genannte Gesetzestext in diesem Fall nicht, da ich ja z.B. die
Notwendigkeit zur Herstellung von Interoperabilität vorschieben kann
(z.B. möchte ich die Anwendung, welche ja auf Java basiert, gerne auf
einem Raspberry Pi ausführen. Dazu muss ich die Anwendung
dekompilieren.).
Eine EULA (Lizenzvereinbarung) liegt ja auch nicht vor.
Daher sehe ich rein rechtlich kein Problem.
Oder habe ich dich missverstanden?
Robert L. schrieb:> sicher?> sind Browser Games nicht (meist) Flash?> ob das da so einfach ist?
Es gibt solche und solche. Egal welche Technologie, es findet trotzdem
eine Kommunikation zwischen Server und Client statt welche meist über
die gängigen Tools beobachtet werden kann. Alles nur eine Frage des
Aufwandes das sich anzueignen und im Prinzip auch eine Frage wie gut das
Programm gegen Automatische Eingaben geschützt ist, bei vielen kleineren
Onlinegames ist das wenig bis gar nicht geschützt...
Andreas B. (andreasb)
DirkUnger schrieb:
>> Was du da zitierst ist eine Lizenzvereinbarung. Wenn du der nicht>> zugestimmt hast, musst du dich auch nicht dran halten. Daher sollte das>> reverse-engineeren harmlos sein.> Lies bitte alle meine Posts in chronologischer Reihenfolge und komplett.> Und lies: http://dejure.org/gesetze/UrhG/69e.html
Ne, besser mal hier lesen ab "Rechtliche Aspekte"
http://de.wikipedia.org/wiki/Reverse_Engineering
Und dann die Panikmache einstellen. Solange das RE nicht in gewerblicher
Absicht erfolgt interessiert das kein Schwein.