Ist es möglich, Quelldateien von einem Exe abzurufen?

39427
Pavitar

Ich habe gesehen, wie mein Freund die Quellcode-Datei aus einer Java- Klasse ( * .class) abruft. Er verwendete dafür eine Art Software.

Kann man dasselbe mit einer * .exe machen ? Wenn ja, wie kann ich das machen? Ist es auch ethisch so etwas zu tun, wenn man bedenkt, dass es sich bei der ausführbaren Datei nur um eine kleine Datei handelt, die nicht kopiergeschützt ist?

5
Zur letzten Frage gab es in der Vergangenheit viele Rechtsstreitigkeiten rund um dieses Problem, aber meistens unter Umständen, in denen eine ausführbare Datei mit dem alleinigen Zweck der Herstellung eines Konkurrenzprodukts entwickelt wurde. Wenn Ihr Interesse rein akademisch ist, kann der Entwickler normalerweise nicht darauf zurückgreifen. Blomkvist vor 12 Jahren 2
Where did you get the idea that executables are not subject to copyright? Or did you just mean that you're concerned with one specific executable which happens to have been placed into the public domain? Dave Sherohman vor 12 Jahren 0
Ja, ich meinte, dass die, die ich bei mir habe, keine Rechte hat Pavitar vor 12 Jahren 0

6 Antworten auf die Frage

8
Alan Barber

Es hängt von der zugrunde liegenden Sprache ab, die die Entwickler verwendet haben.

Bei Java- und .NET-Sprachen ist es meistens möglich, den Quellcode zu "dekompilieren". Es wird nicht der echte Originalcode sein (Variablennamen werden unterschiedlich sein, Optimierungen durch den Compiler haben neu geordneten Code usw.), aber es wird geschlossen.

Andere Sprachen wie C / C ++ sind nicht so einfach.

Was die Ethik angeht, ist es in Ordnung, wenn Sie nur ein Hobbycoder sind, der daran interessiert ist, herumzuspielen. Wenn Sie jedoch professionell arbeiten und versuchen, Quellcode zum Kopieren einer App zu erhalten, ist das sehr unethisch und ein großes Nein.

4
Bob G

Wenn die Anwendung in einer der .NET-Sprachen (VB / C #) geschrieben ist, können Sie den Reflector reflector.red-gate.com von Red Gate verwenden, um die Anwendung in entsprechende Quelldateien zu zerlegen. Allerdings ist nicht jede Anwendung in verwalteten Sprachen wie diesem geschrieben, und die Dekompilierung einer C ++ - Anwendung oder einer in Delphi oder einer anderen nicht verwalteten Sprache geschriebenen Anwendung ist bei weitem nicht so einfach, und alles, was Sie wirklich können, sind Hex-Dumps, die sehr schwierig sind dann in eine tatsächliche Anwendung rekonstruieren.

Reflector ist nicht mehr kostenlos, [ILSpy] (http://ilspy.net/) wird dasselbe tun und ist kostenlos (sowohl in libre als auch im Preis) zu verwenden. Scott Chamberlain vor 11 Jahren 0
2
Diogo

Sie können dies nicht tun, wenn sich Ihr .exeCode in C / C ++ befindet, aber in C # ist dies möglich. Ich kenne kein gutes Werkzeug dafür, aber eine Möglichkeit ist die Verwendung von ANTS Profiler. Es zeigt Ihnen alle Objekte, Methoden und Argumente aus einer C # - Binärdatei.

1
Stuart Woodward

Ja, es ist möglich, .exes mit Tools wie dem dcc-Decompiler zu dekompilieren . Dies führt zu guten Ergebnissen, wenn das ursprüngliche Programm in C geschrieben wurde. Wenn es in einer anderen Sprache geschrieben wurde, müssen Sie möglicherweise ein anderes Werkzeug ausprobieren, das für diese Sprache geeignet ist.

Bei der Dekompilierung von Software gilt: Je mehr Assembler-Sprache Sie kennen, desto besser müssen Sie möglicherweise den übergeordneten Code der untergeordneten Assembly prüfen, wenn der Decompiler verwirrt wird oder wenn ein Teil des Codes tatsächlich in der Assembly-Sprache geschrieben wurde.

Decompiling ist eine hervorragende Möglichkeit, die Funktionsweise von Programmen auf unterster Ebene zu untersuchen. Sie werden auch feststellen, dass das dekompilierte Programm in vielen Fällen in das Exe zurückkompiliert wird, die zur Beschreibung der Variablen verwendeten Symbole jedoch völlig bedeutungslos sind. Sie müssen möglicherweise Detektivarbeit verrichten, um wirklich zu verstehen, was der Code bedeutet und tut.

Ich sehe nichts ethisch falsch, wenn Sie den Code für Ihre eigene Unterhaltung oder Schulung dekompilieren. Wenn Sie jedoch böswillige Absichten haben, kommerzielle Software zu dekompilieren, um die Copyright-Meldung in Ihre eigene zu ändern oder nach einer Sicherheitsanfälligkeit für bösartige Ausnutzung zu suchen, kann dies die Folge sein als unethisch betrachtet.

Möglicherweise bemüht sich der Entwickler, die Dekompilierung zu verhindern, indem er einen Loader erstellt, der die Software in den Speicher entpackt oder explizit Code enthält, um Dekompilierer zu verwirren. Das ist alles Teil des Spaßes.

1
Dave Sherohman

Die technische Seite: Ja, es ist möglich, den Code zu dekompilieren ... irgendwie. Was Sie zurückbekommen, ist nicht der ursprüngliche Quellcode, und es ähnelt möglicherweise auch nicht dem ursprünglichen Quellcode, wenn die ausführbare Datei mit vollständigen Debugging-Symbolen kompiliert wurde. In endgültigen Produktions-Builds sind Debugging-Symbole jedoch häufig deaktiviert, um die ausführbare Datei so klein wie möglich zu halten und um zu vermeiden, dass jeder, der die ausführbare Datei untersucht, mehr als das absolute Minimum an Informationen erhält.

Die rechtliche Seite: Nach dem Digital Millennium Copyright Act wird versucht, Software zu dekompilieren oder zu rekonstruieren, gegen die der Copyright-Inhaber versucht hat. So wie es bisher von den Gerichten interpretiert wurde, spielt es keine Rolle, wie lächerlich schwach der Versuch sein mag, er ist immer noch illegal. Selbst wenn keine technologischen Maßnahmen zum Schutz des Codes vorhanden sind, besteht wahrscheinlich eine Lizenzvereinbarung, die besagt, dass Sie die ausführbare Datei nicht dekompilieren oder zurückentwickeln dürfen.

In der Regel neige ich dazu, diese Dinge als völlig ethisch zu betrachten, solange Sie sie nicht mit der Absicht tun, jemand anderem zu schaden, aber das Gesetz neigt dazu, nicht zuzustimmen.

0
rakesh

Quellcode aus .class-Dateien abrufen java ist einfach, es ist jedoch schwierig, Code aus .exe-Dateien zu erhalten. Verwenden Sie diese http://www.hiew.ru/, um die .exe-Dateien zu disassemblieren. Dieser generierte Code ist jedoch nicht mit dem Original identisch Es fehlen viele Zeilen, die vom Compiler ignoriert werden, was das Lesen erschwert.