Programme in Programmiersprache umwandeln?

4 Antworten

Das geht nur bei Programmen, welche in Sprachen, wie in VB.net vorliegen. Dafür braucht man dann einen .NET Reflector. Bei Java ist das ähnlich. Die meisten IDE's können aus .jar Dateien den Codee auslesen. Bei den meisten anderen Sprachen jedoch liegt nur noch ein unleserlicher Code vor, welcher nicht umgewandelt werden kann. Allerdings sind die meisten Professionellen Programme vor solchen Umwandlungen geschützt und lassen sich nicht mehr auslesen.

Mit einem Decompiler.

Allerdings musst du dabei beachten:

  • Kommentare und einige andere Dinge (wie Debug-Symbole) werden nicht wiederhergestellt, da sie beim kompilieren aus dem Code entfernt wurden
  • Decompilen ist bei sehr vielen kommerziellen Programmen verboten
  • Programmcode der beim kompilieren durch einen Obfuscator geschickt wurde ist praktisch unlesbar (ein Obfuscator ist eine Schutzmaßnahme, um demjenigen das Leben zu erschweren, der das Programm dekompiliert. Die Ausgabe enthält dann z.B. nicht die Variablennamen die verwendet wurden, sondern kryptische Buchstaben oder gar irgendwelche unlesbaren Zeichen
  • OpenSource-Programme musst du nicht dekompilieren, da der Code ja per Definition frei zugänglich ist
  • .NET-Programme (C#, VB.NET, F# und co) muss man i.d.R. nicht decompilieren, da der Quelltext (in einem sehr hohen Maße) sichtbar ist. Du musst nur mit einem Tool wie ILSpy in die exe hineinschauen (sofern kein Obfuscator benutzt wurde). Das geht aber nur bei Programmiersprachen die managed sind. Bei Java müsste es eigentlich auch gehen, aber da hab ich keine Praxiserfahrung.
Commodore64  19.01.2014, 20:00

Korrekt, nur Variablennamen sind immer weg, der Computer kann mit Namen nichts anfangen, die werden vom Compiler in Nummern bzw. Adresszahlen umgewandelt. Und die werden vom Compiler einfach nur durchnummeriert

Ein Obfuscator macht mehrere Dinge. Ein Compiter übersetzt gängige Befehle immer durch einen gleich funktionierenden Code. Das erkennt der Decompiler und ersetzt diese Codefolge dann durch den Befehl der da hinter steckt. Der Obfuscator verwürfelt die Reihenfolge der Codezeilen wo die Reihenfolge der Befehle egal ist. Der Decompilierer kann dann den Befehl nicht mehr erkennen und so wird z.B. aus einem "printf" Befehl eine Ellenlange Abfolge von "If/else", "switch/case" und anderer Befehle die den Computer dazu bringen genau das zu machen wofür der abstrakte Begriff "Printf" steht.

Und dann verwürfelt der Obfuscator den Programmablauf. Programmteile werden mit Sprungbefehlen verbunden gehalten aber in eine bunte Reihenfolge gebracht. So kann man die Unterprogramme nicht mehr unterscheiden und auch nicht mehr wirklich sehen in welcher Reihenfolge Programmfunktionen ablaufen.

1

Ist möglich, aber verboten. Deshalb kann und will ich dir dazu keinen Tipp geben, zumal ich selbst als Entwickler Gedankengut von mir und meinen Kollegen schützen möchte und muss.

Broco  19.01.2014, 16:08

Das ist nur bei Programmen verboten, deren Quelltext geschützt ist.

Bei Open-Source Software ist das scheißegal, aber die Leute würden dich blöde angucken, weils den Code ja auch ohne Arbeit gibt.

1