Delphi-PRAXiS
Seite 2 von 2     12   

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Sonstige Fragen zu Delphi (https://www.delphipraxis.net/19-sonstige-fragen-zu-delphi/)
-   -   Delphi Quelltext aus compillierter exe wiederherstellen? (https://www.delphipraxis.net/21179-quelltext-aus-compillierter-exe-wiederherstellen.html)

Bernhard Geyer 29. Apr 2004 07:34

Re: Quelltext aus compillierter exe wiederherstellen?
 
Zitat:

Zitat von Chewie
Zitat:

Zitat von Bernhard Geyer
Mit D8 (und .NET IL-Code) ist es sehr einfach den Quellcode herauszubekommen

Wieso eigentlich? Bug oder Feature? Und krieg ich den Code dann in der Sprache, in der er geschrieben ist, oder kann ich z.B. ein in VB.NET geschriebenes Assembly in C#-Code decompilen?

Schau dir mal Lutz Roeder's .NET Reflector an, um zu sehen was möglich ist bezüglich Wiederherstellung von Sourcecode. Dabei ist es egal in was für einer Sprache ein Programm geschrieben ist. Du kann ein C#-Code einfach nach Delphi-Code umwandeln.

Bug oder Feature? Es ist ein Feature (ähnlich dem Bytecode von Java). Du kannst aber etwas mit sogenannten Obfuscator-Tools dagegen unternehmen, welcher eine möglichst hohe Verschleierung des Codes durchführt (Variablennamen werden zu aaaaaaaab oder ähnlichen.

Brüggendiek 29. Apr 2004 08:00

Re: Quelltext aus compillierter exe wiederherstellen?
 
Hallo!

Zitat:

Zitat von Chewie
Zitat:

Zitat von Bernhard Geyer
Mit D8 (und .NET IL-Code) ist es sehr einfach den Quellcode herauszubekommen

Wieso eigentlich? Bug oder Feature? Und krieg ich den Code dann in der Sprache, in der er geschrieben ist, oder kann ich z.B. ein in VB.NET geschriebenes Assembly in C#-Code decompilen?

Feature, weil D8 das Programm in eine Zwischensprache umwandelt. Wenn diese Zwischensprache auch solche Kontrollstrukturen wie WHILE, REPEAT..UNTIL und FOR kann, ist natürlich ein Rückübersetzen (auch in eine andere Ausgangssprache) möglich.

Die klassischen Windows-Programme (.EXE) werden jedoch in Maschinensprache umgesetzt. Die kann nur GOTO und CALL - dadurch wird die Struktur des Originals verworfen. Luckies Hackfleich-Vergleich ist da sehr passend.

An der Umkehrcompilierung haben sich schon etliche Universitäts-Projektgruppen (Ruck Zuck PUC - Projektgruppe Umkehr-Compilierung) die Zähne ausgebissen - man muß ja versuchen, aus den Maschinenbefehlen (bzw. ihren Assembler-Entsprechungen) die Original-Struktur zurückgewinnen.

Im Prinzip kann man das Ganze rekonstruieren. Der Umkehrcompiler muß "nur" in der Lage sein, die Instruktionen zur Bereitstellung von Parametern bei Prozedur/Funktionsaufrufen zu erkennen und dann den Aufruf mit Parametern daraus zu erstellen. Man muß dann nur damit leben, daß man Variablennamen der Bauart I1, I2 etc. bei Integern hat und daß alles mit GOTO abläuft.

Aus
Delphi-Quellcode:
for lauf:=1 to 10 do
  unterprogramm(lauf);
oder
Delphi-Quellcode:
lauf:=1;
while lauf <= 10 do
begin
  unterprogramm(lauf);
  inc(lauf);
end
oder
Delphi-Quellcode:
lauf:=1;
repeat
  unterprogramm(lauf);
  inc(lauf);
until lauf>10;
würde dann ein Spitzen-Umkehrcompiler erzeugen:
Delphi-Quellcode:
i1:=1;
l1:
p1(i1);
inc(i1)
if i1<=10 then
  goto l1;
Der Rest ist dann Handarbeit.
Normalerweise erhält man allerdings Assembler - im absoluten Notfall kann ein Super-Programmierer (das wird TEUER!) vielleicht einen Fehler beheben.

Fazit: Ein Backup des Sources ist durch nichts zu ersetzen - außer durch mehrere Backups!

Gruß

Dietmar Brüggendiek


Alle Zeitangaben in WEZ +1. Es ist jetzt 08:07 Uhr.
Seite 2 von 2     12   

Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024-2025 by Thomas Breitkreuz