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
Es gibt ziemlich gute Java-Decompiler, die sehr brauchbaren Quellcode als Ergebnis liefern. JAD wäre ein Beispiel.
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 |
2 | { |
3 | protected native Class findClass(String s) |
4 | throws ClassNotFoundException; |
5 | protected native URL findResource(String s); |
6 | protected native Enumeration findResources(String s); |
7 | } |
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.
>Aber illegal?
bist du blind?
die Anführungseichen gesehen?
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.
Bitte melde dich an um einen Beitrag zu schreiben. Anmeldung ist kostenlos und dauert nur eine Minute.
Bestehender Account
Schon ein Account bei Google/GoogleMail? Keine Anmeldung erforderlich!
Mit Google-Account einloggen
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.