Forum: PC-Programmierung Java Anwendung Reverse Engineering - Wer schafft's?


von DirkUnger (Gast)


Lesenswert?

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

von Cyblord -. (cyblord)


Lesenswert?

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

von Anonymous (Gast)


Lesenswert?

sagt dir 1.232 was?

von DirkUnger (Gast)


Lesenswert?

Es gibt ziemlich gute Java-Decompiler, die sehr brauchbaren Quellcode 
als Ergebnis liefern. JAD wäre ein Beispiel.

von Läubi .. (laeubi) Benutzerseite


Lesenswert?

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?

von Andreas B. (andreasb)


Lesenswert?

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

von Läubi .. (laeubi) Benutzerseite


Lesenswert?

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.

von Andreas B. (andreasb)


Lesenswert?

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

von DirkUnger (Gast)


Lesenswert?

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!

von Läubi .. (laeubi) Benutzerseite


Lesenswert?

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.

von Robert L. (lrlr)


Lesenswert?

>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"

von DirkUnger (Gast)


Lesenswert?

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...

von .... (Gast)


Lesenswert?

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.

von Robert L. (lrlr)


Lesenswert?

>Aber illegal?

bist du blind?
die Anführungseichen gesehen?

von Andreas B. (andreasb)


Lesenswert?

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

von P. M. (o-o)


Lesenswert?

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, ...

von Andreas B. (andreasb)


Lesenswert?

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

von DirkUnger (Gast)


Lesenswert?

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.

von Andreas B. (andreasb)


Lesenswert?

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

von DirkUnger (Gast)


Lesenswert?

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?

von Läubi .. (laeubi) Benutzerseite


Lesenswert?

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...

von Proxxon (Gast)


Lesenswert?

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
Noch kein Account? Hier anmelden.