Hallo,
gibt es eine Möglichkeit, eine *exe eines Programms nachträglich zu
bearbeiten/decompilieren?
Ich muss nicht jedes Detail ändern, aber es gäbe einige Punkte ich ich
an einem Programm anpassen würde.
Ist sowas möglich? Ich habe Visual Studio Pro 2015.
MosKiller schrieb:> Ich muss nicht jedes Detail ändern, aber es gäbe einige Punkte ich ich> an einem Programm anpassen würde.
Nicht ernsthaft.
Microsoft hat das vor kurzem mal gemacht, weil sie in einer DLL aus den
90gern noch ein paar Sicherheitslücken fixen mussten - und sie wohl
selber den Source nicht mehr haben oder der nicht mehr compiliert.
Das ist aber übelst aufwändig. Denn man muss den Programmfluss aus den
Instruktionen rekonstruieren - und der hat nach dem C-Optimizer nur noch
vage Ähnlichkeit mit dem originalen Programm.
Versuche mal ein optimiertes Programm schrittweise zu debuggen - der
springt wild zwischen den Source Zeilen hin- und her.
MosKiller schrieb:> Ist sowas möglich? Ich habe Visual Studio Pro 2015.
Man nimmt dafür spezialisierte Tools wie IDA. Aber normalerweise ist den
Source zu ändern etliche Größenordnungen einfacher.
Vielleicht hilft das hier, vielleicht auch nicht:
https://www.youtube.com/watch?v=G0o2HaJwLQo
Ist nur als "Einstieg" zu verstehen, um einen kleinen Überblick zu
erhalten. Zumindest weißt du dann wonach du suchen kannst.
Ich glaube aber nicht, dass man so ernsthafte Änderungen an Programmen
vornehmen kann. Vielleicht Kleinigkeiten, aber mehr auch nicht.
eid.exe schrieb:> Das kommt drauf an was es davor war. C# exen lassen sich zB sehr gut> decompilieren. zB das Programm Reflector von Redgate decompiliert .Net> Code
vs.
Max M. schrieb:> Bei einer .exe für die DOS-Komandozeile ohne grafische Oberfläche konnte> man sowas noch mit vertretbarem Aufwand machen.>> Für eine Win-.exe - no Way.
Es geht mit Reflector sehr einfach... Wars vorher C++ ist das eine
andere Sache.
Wenn Du nicht ganz fit bist, bei allem was rund um die Assemblersprache
passiert und was im System selber los ist: Vergiss es!
Es sei denn Du hast eine stark, masoschistische Ader.
Sebastian S. schrieb:> Es sei denn Du hast eine stark, masoschistische Ader
Masochismus hilft da auch nicht weiter.
Es gibt ja Leute, die so etwas machen, z.B. um in fremder Software
Sicherheitslücken zu finden. Aber das sind die besten Spezialisten ihres
Fachs, mit jahrelanger Erfahrung, und die beschäftigen sich Monate und
Jahre mit einem bestimmten Problem.
Melde dich so um das Jahr 2025 wieder, ob du was erreicht hast.
Georg
@MosKiller,
lass Dich nicht entmutigen.
Abhängig von Deiner Problemstellung könnte
Dir das Tool radare2 (in github) helfen.
Ist ähnlich wie IDA nur frei, da Open Source.
Eine gewissen Lernaufwand musst Du aber natürlich
in Kauf nehmen und Zeit rein stecken.
Kleine Variationen im Programm mittels Patches
(binär) sind durchaus leicht machbar. Dazu gibt
es Tools die selbst Prüfsumengesicherten Code
modifizieren, sofern es sich um ein übliches
Format PE, ELF etc. handelt.
Wir hatten mal den Fall, daß in einer Software
aufgrund einer geänderten Struktur in den Daten
der Datenstrom, den das Programm zu verarbeiten
hatte, zum Absturz des Programms führte - wegen
Integer Überlauf.
Das Format der Daten hat sich zwar prinzipiell
nicht geändert aber es wurde eine Variable nun
mit UINT statt INT Werten belegt und das MSB
daß nun öfter vorkam brachte den Überlauf.
Es galt den INT Wert in einen UINT Wert
zu ändern.
Da die Typen von Variablen in Definitionen beim
Laden des Programms ins RAM vermerkt sind,
galt es nur diese Stelle zu finden und entsprechend
zu modifizieren. Das Programm war in C der 90ziger
Jahre geschrieben und weil von Externen auch ohne
Code-Dokummentation im Einsatz.
Es gibt heute ausgezeichnete Software, die zwar teuer ist,
zum Kaufen - siehe Firma Hexray - aber auch gute freie Software
die in github zu finden ist um Programme zu analysieren
oder gar zu decompilieren.
Siehe z.B.
https://www.hex-rays.com/products/decompiler/manual/index.shtml
Markus
Jim M. schrieb:> Microsoft hat das vor kurzem mal gemacht, weil sie in einer DLL aus den> 90gern noch ein paar Sicherheitslücken fixen mussten - und sie wohl> selber den Source nicht mehr haben oder der nicht mehr compiliert.
Quellenangabe?
Markus W. schrieb:> Da die Typen von Variablen in Definitionen beim> Laden des Programms ins RAM vermerkt sind,
Wo das denn bitte? Und wo berücksichtigt der Maschinencode irgendwelche
Variablendefinitionen? Wenn da ein "Signed Multiply" im Code ist, dann
nimmt das immer an die Variable sei "signed", egal was wo im RAM
steht...
eid.exe schrieb:> Das kommt drauf an was es davor war. C# exen lassen sich zB sehr gut> decompilieren. zB das Programm Reflector von Redgate decompiliert .Net> Code
Ist da ja auch kein Kunststück, weil die Compilierung zum lauffähigen
Program erst zur Laufzeit erfolgt.
@TO
Es gibt Programme die aus der Exe zumindest Assembler erzeugen können,
aber dann mußt Du in Assembler mehr als fit sein, um da was anpassen zu
können. Problematisch wird es wenn Code einfügen mußt, dann stimmen oft
die Sprungadressen nicht mehr.
Es kommt halt darauf an was Du vor hast. Einfach ist aber anders.
@Dr. Sommer
a) da hängt natürlich vom Compiler ab, was für
Maschinencode er wo einsetzt (da hast Du natürlich recht)
b) von executable Format selbst, was mit Manipulationen mach-
bar ist und was nicht.
Für PE Executables gibt es ein Beispiel unter
h t t p s:
//resources.infosecinstitute.com/applied-cracking-byte-patching-ida-pro/
Wir haben seinerzeit ein ELF Binary unter CentOS 4.x modifiziert und
sind an der von Dir genannte Problematik nicht gestolpert.
Ob das im Nachhinein nur ein Glücksfall war und der comilierte
Code nicht alle Optimierungsfinessen enabeld hatte kann ich jetzt
nicht mehr sagen.
Ich habe schon in meiner Studienzeit (vor 35 Jahren) Turbo-Pascal
Compilate binär gepatched um das Ende-Kriterium einer For-Schleife
zu erhöhen. War auch nicht weiter schwierig.
Es ist vom Fall zu Fall mehr oder minder schwierig und sollte nicht
von vornherein ausgeschlossen werden.
Markus