Frage

Die Software, die ich schreibe (und verkaufen) komprimiert und verschlüsselt, bevor ich sie zu verteilen. Jedesmal, löse ich eine neue zu bauen, halte ich alle .map Dateien und die erzeugten Binärdateien einschließlich der exe, bevor es komprimiert und verschlüsselt.

Wenn es auf einem Client-Maschine stürzt ab, bekomme ich einen minidump zurück. Ich öffne diese minidumps in Visual Studio und erkunden sie dort.

Ich habe gute Verwendung dieser minidumps gemacht, indem sie in den .map Dateien nach Adressen suchen. Dies erhält mich normalerweise in dem richtigen Bereich des Codes und ich kann im allgemeinen Grund, warum der Absturz aufgetreten und es beheben, aber das ist sehr zeitaufwendig.

Es wäre hilfreich, wenn ich die Symbole verwenden könnte, die ich aus dem ursprünglichen Bau im Debuggen des minidump gespeichert.

Mein Problem ist, dass ich Warnungen über nicht in der Lage zu bekommen, die richtigen Symbole zu finden. Meine Forschung führt mich zu glauben, dass dies, weil die Prüfsumme der exe auf der Client-Rechner nicht die Prüfsumme der exe, das Visual Studio gebaut entsprechen. Und ich verstehe, warum hat es komprimiert und verschlüsselt gespeichert. Natürlich sind die Prüfsummen nicht übereinstimmen.

Ich denke, ich kann manuell die minidump bearbeiten oder die Prüfsumme der gespeicherten Binärdateien ändern die Prüfsumme der ausschüttbare anzupassen. Ich würde es vorziehen, um die gespeicherten Kopien zu manipulieren, so dass ich jeden Dump, die in kommt nicht ändern müssen, aber ich würde entweder mit estatic sein.

Also, meine Frage ist: Wie kann ich diese Prüfsummen lokalisieren und herauszufinden, was ich mit ihnen ersetzen sollte? Als Hilfs Frage: Gibt es eine bessere Art und Weise

?
War es hilfreich?

Lösung

Ohne zu wissen, wie genau Sie komprimieren und Ihre Binärdateien verschlüsseln, ist es schwer für mich sehr spezifisch sein.

Das Blog-Post von John Robbins weist darauf hin, dass ausführbare Bilder mit ihrer PDBs über ein GUID zugeordnet sind, die in dem ausführbaren PE-Header eingebettet sind. Sie sollten es sehen können, von DUMPBIN / headers auf die ausführbare Datei ausgeführt wird, und auf der Suche für die Ausgabe von Debug-Verzeichnisse. Wenn Ihre Komprimierung und Verschlüsselung, die PE-Header geändert haben, so dass diese Information nicht verfügbar ist (oder richtig), dann wäre es erklären, warum Ihr Debugger nichts finden können.

Es gibt ein paar Ansätze, die ich denke, dass Sie dieses Problem beheben könnte nehmen. Um wirklich versuchen, dies zu Arbeit zu bekommen, möchten Sie vielleicht mit WinDbg anstelle des Visual Studio-Debugger betrachten. Sie werden verstehen, warum ich dies in einem Moment bin zu empfehlen ...

WinDbg bietet einige Optionen, die dem entspannten Laden von Symboldateien ermöglichen. Die Idee, mit dieser Option ist, dass, wenn der Quellcode nicht geändert hat, aber die Binärdateien sind aus einem anderen Build als der PDB kann der GUID-Check und die nicht übereinstimmen Symboldatei geladen werden kann verzichtet werden. Ich weiß nicht, wie gut diese wird mit Ihrer Komprimierung und Verschlüsselung arbeiten, so YMMV.

WinDbg und die dazugehörigen Tools verwendet werden können, um die GUID-Dump sowohl von der ausführbaren Datei und der PDB, aber ich bin Weglassen, dass für jetzt, weil ich gehofft habe, dass diese Schritte nicht notwendig sein werden.

Nachdem Sie Ihre minidump in WinDbg geöffnet haben, müssen Sie mehrere Befehle in die Befehlszeile eingeben das alles an die Arbeit:

.symopt +0x40
!sym noisy
ld <exe name>

Der erste Befehl ermöglicht die SYMOPT_LOAD_ANYTHING Option, die eine GUID-Check überspringt. Der !sym Befehl ermöglicht eine ausführliche Ausgabe für Symbol Laden, so dass Sie detailliertere Fehlermeldungen angezeigt werden können. Der ld Befehl leitet WinDbg zu versuchen, die Symbole für den Namen der ausführbaren Datei zu laden, die Sie an der Stelle der <exe name> geben werden. Wenn Sie den ld Befehl wiederholen, wird WinDbg mitteilen, ob sie erfolgreich die Symbole zum ersten Mal geladen wird.

Hoffentlich hilft -. Wieder, ich weiß nicht, wie gut diese mit Ihrer Komprimierung und Verschlüsselung funktioniert, aber es ist ein Versuch wert

Andere Tipps

Ist diese Kompression / Verschlüsselung etwas wie UPX? Wenn der tatsächliche ausführbare Inhalt der Binärdateien verändert (wie mit Werkzeugen wie UPX gemacht wird), wirst du kein Glück sein (es sei denn, Sie komplexe Anwendungen in Assembler genießen debuggen). Ist Ihre Software wirklich so wichtig / special, dass seine Binärdateien verschlüsselt werden müssen, bevor geliefert werden? Nach meiner Erfahrung ist die Fähigkeit, Crash-Dumps zu debuggen viel wichtiger als Menschen aus Reverse-Engineering-Code zu stoppen.

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top