Ist es einfacher, ein Delphi-Programm zurückzuentwickeln oder zu brechen, wenn die EXE-Datei mit Debug-Compiler-Einstellungen kompiliert wurde?

8

Wenn ich vor der Veröffentlichung meines Programms versehentlich vergessen habe, in die Release-Konfiguration zu wechseln, spielt es eine Rolle, ob es einfacher ist, meinen Code zu dekompilieren oder zurückzuentwickeln?

Zum Beispiel, wenn ich versehentlich die folgenden Debug-Compiler-Optionen verwende:

%Vor%

Ich habe Hilfe gelesen und von dem, was ich sagen kann, macht es keinen großen Unterschied, außer die Kartendatei wird irgendwie mit der Binärdatei veröffentlicht, also frage ich mich, wie viel Unterschied es macht, wenn jemand die Kartendatei hat?

    
joz ret 06.09.2017, 17:55
quelle

1 Antwort

10

Lassen Sie uns nacheinander die Optionen erläutern, die Sie erwähnt haben:

  • Kompilieren & gt; Stack-Frames : Stack-Frames werden nur zum Debuggen benötigt (und vielleicht um Stack-Traces für die Fehlerberichterstattung zu erzeugen, wie von @DavidHeffernan in den Kommentaren erwähnt). Selbst wenn Sie es in Release-Builds aktivieren, ist das für das Reverse Engineering nicht sehr hilfreich.
  • Debugging & gt; Debug-Informationen : Wenn diese Option aktiviert ist, werden die Debug-Informationen in den DCUs kompiliert, um das Debugging in der IDE zu erleichtern. Es ist nicht mit der exe verbunden, also ist es offensichtlich, dass es das Reverse Engineering nicht hilft.
  • Debugging & gt; Lokale Symbole : Wenn diese Option gesetzt ist, enthält der Compiler grundlegende Symbolinformationen in den Debug-Informationen, aber es hilft nur beim Debuggen auf der IDE und ist nicht mit der endgültigen exe verknüpft.
  • Debugging & gt; Symbolreferenzinfo & gt; Referenzinfo : Zusätzlich zur vorherigen Option enthält diese detaillierte Informationen zu unit-local Symbolen (Variablen, Konstanten, Klassen usw.), die das Debuggen erleichtern. Sie sind auch nicht in der endgültigen exe verknüpft.
  • Linking & gt; Kartendatei & gt; Detailliert : Wenn diese Option aktiviert ist, erstellt der Linker eine detaillierte .map -Datei, die alle Informationen (Typ, Name, Adresse, Größe usw.) über Programmsymbole enthält, also natürlich wäre hilfreich für Reverse Engineering IF Sie diese Datei zusammen mit Ihrer exe verteilen (wie von @RemyLebeau in den Kommentaren angegeben).

Es gibt auch die Möglichkeit, entfernte Debug-Symbole zu erzeugen, wie von @dummzeuch gezeigt:

  • Linker & gt; Entfernte Debugsymbole hinzufügen : Diese Option weist den Linker an, eine .rsm -Datei zu generieren. Dies ist das Delphi-Äquivalent von Microsofts .pdb Programmdatenbankdateien . Wenn Sie diese Datei verteilen, könnten Sie echte Probleme haben, weil Sie Ihre Anwendung leicht debuggen, Symbole, Funktionen und Prozeduren visualisieren, Ihren Code in einem Schritt bearbeiten und so weiter.

Außerdem ist es wichtig zu sagen, dass .map Dateien nicht gleich .pdb Dateien sind. Für Delphi Win32 ist .rsm das Äquivalent. Ich habe seit Jahren nicht mehr mit Delphi gearbeitet, aber soweit ich mich erinnern kann, kann keine Delphi Win32 Version .pdb Dateien erzeugen. Nur Delphi für .NET kann.

Lassen Sie uns noch einmal auf Ihre Fragen zurückkommen:

  

Ich frage mich, wie viel Unterschied es macht, wenn jemand die Map-Datei hat?

Reverse Engineering wäre viel einfacher mit einer .map -Datei. Ich habe einige Tools in der Vergangenheit gesehen, die sogar eine .map -Datei in eine .dbg -Datei zur Verwendung mit einem Debugger konvertieren können.

  

Ist es einfacher, ein Delphi-Programm zurückzuentwickeln oder zu brechen, wenn die EXE-Datei mit Debug-Compiler-Einstellungen kompiliert wurde?

Nun, eine wichtige (und vielleicht auffälligste) Eigenschaft von Debug-Builds ist die größere exe-Größe. Das liegt hauptsächlich daran, dass der Compiler in der Debug-Konfiguration eine Reihe von Code-Optimierungen deaktiviert, um das Debuggen von Code zu erleichtern. Es gibt auch viele debug-bedingte -Codes (zB: in {$IFDEF DEBUG} directions), die in die exe verlinkt werden.

Als Nebeneffekt ist der von einem Debug-Build generierte Code wesentlich einfacher zu reverse-engineeren, da er einfacher zu verstehen ist.

    
karliwson 07.09.2017, 02:55
quelle

Tags und Links