Assembler unter Windows (und VMWare)

Hallo zusammen!
Ich suche gerade einen Disassembler. Mit Google bin ich so weit gekommen das IDA Pro und W32DASM die gängisten Programme dafür unter Windows sind. W32DASm wird leider nicht mehr weiterentwickelt. Beide Programme beinhalten auch einen Debugger. Ich habe mir die Testversion beider Programme herunter geladen und NOTEPAD.EXE von Windows disassembliert.
Ich war als erstes überrascht, dass beide Programme zwei verschiedene Disassemblierungen erzeugt haben.
Zum Test habe ich das Programm dann marginal verändert und wollte es wieder übersetzen. Das versuchte ich mit TASM und BLASM. Mit beiden Programmen bin ich nicht zum Erfolg gekommen.
Meine Fragen lauten somit:

  1. Welche der beiden Disassemblierungen entspricht der Realität?
  2. Von welchen der beiden Programme lohnt es sich die Vollversion zu kaufen?
  3. Wie kann ich aus dem modifiziertem ASM-File wieder eine Windows-Anwendung gewinnen?
  4. Wenn ich unter Windows eine Speicheradresse mit Assembler schreibe, kann das unter Umständen zum Systemabsturz führen. Was aber wenn das Windows unter VMWare läuft?

Grüße
C. Penkwitt

hallo.

Zum Test habe ich das Programm dann marginal verändert und
wollte es wieder übersetzen. Das versuchte ich mit TASM und
BLASM. Mit beiden Programmen bin ich nicht zum Erfolg
gekommen.

was heißt „zum erfolg“? ist es danach nicht mehr gelaufen? dann hast du wohl das falsche marginal verändert.

Meine Fragen lauten somit:

  1. Welche der beiden Disassemblierungen entspricht der
    Realität?

beide bzw. keine. zwei compiler werden wahrscheinlich nie denselben assemblercode erzeugen. umgekehrt ist es nicht anders.

  1. Von welchen der beiden Programme lohnt es sich die
    Vollversion zu kaufen?

ich kenne leute die leute kennen, die mit w32dasm schon erfolgreich kommerzielle software gecrackt haben. und das mit relativ geringem zeitaufwand.

gruß

michael

Hallo zusammen!

Hallo Christian

Ich suche gerade einen Disassembler. …
Meine Fragen lauten somit:

  1. Welche der beiden Disassemblierungen entspricht der
    Realität?

keine - beim Assemblieren gehen Namen und Kommentare verloren, also alles, was zum Verständnis beiträgt, daher ist ein Disassemblat nur von erfahrenen Assembler-Programmierern nachzuvollziehen. Es sollte eigentlich wieder assemblierbar sein, und das mit dem ursprünglichen Programm als Ergebnis, aber das schaffen real existierende Disassembler höchstens für kurze, triviale Programme, sonst ist Nacharbeit erforderlich. Ich meine damit Progrämmchen mit 500 bis 1000 Byte - Notepad ist 100mal grösser.

  1. Von welchen der beiden Programme lohnt es sich die
    Vollversion zu kaufen?

Das, was weniger Nacharbeit erfordert. Dazu müsste man sie länger testen.

  1. Wie kann ich aus dem modifiziertem ASM-File wieder eine
    Windows-Anwendung gewinnen?

lesen - verstehen - neu schreiben

  1. Wenn ich unter Windows eine Speicheradresse mit Assembler
    schreibe, kann das unter Umständen zum Systemabsturz führen.
    Was aber wenn das Windows unter VMWare läuft?

dann steht im Zweifelsfall die Windowsinstanz von VMWare, in der das Programm läuft, das Basissystem muss weiterlaufen. Das hilft ein bisschen, aber nicht allzuviel - A muss das Windowssystem neu gestartet werden, anstatt zu booten, B erhält man vielleicht eine Fehlermeldung der Art „Speicherzugriffsverletzung an Adresse XXXX“, aber was man wissen sollte, ist welcher Befehl die Verletzung verursacht hat. Dazu bräuchte man einen Trace-Speicher, ich weiss nicht, ob VMWare so etwas bietet. Ich kenne sie nur als Hardware in Emulatoren, aber da liegen die Preise in der Grössenordnung von Einfamilienhäusern.

Gruss Reinhard

Hallo Reinhard!
Vielleicht wird es klarer wenn ich dir sage was ich mit dem Disassembler vorhabe. Bei kommerzieller Software ist im allgemeinen der Quelltext nicht verfügbar. Wenn man das Programm aber doch um eine nützliche Funktion erweitern möchte ist das nicht möglich. Nicht jede Software bietet die Funktion von „Makros“ und ob dann die Makrosprache systemweit agieren kann ist auch nicht sichergestellt.
Folgendes Beispiel: Ich habe eine Software die mir den Wert meines Spannungsmessgeräts am Computer anzeigt. Mit einem Disassembler würde ich gerne herausfinden wann und wo im Quelltext die Anzeige aktualisiert wird und bevor der nächste Schritt abgearbeitet wird den Messwert an ein anderes Programm senden um den Messwert dort weiterzuverarbeiten.

Grüße
C. Penkwitt

Folgendes Beispiel: Ich habe eine Software die mir den Wert
meines Spannungsmessgeräts am Computer anzeigt. Mit einem
Disassembler würde ich gerne herausfinden wann und wo im
Quelltext die Anzeige aktualisiert wird und bevor der nächste
Schritt abgearbeitet wird den Messwert an ein anderes Programm
senden um den Messwert dort weiterzuverarbeiten.

Hallo Christian,

ja, das ist der Sinn eines Disassemblers. Natürlich ist das trotz Disassembler immer noch sehr mühsam.

Disassemblieren kann nie einen Quelltext völlig wiederherstellen, z.B. kann der DA einer Tabelle nicht ansehen, ob sie aus 8, 16 Bit-Daten oder auch aus Code besteht, daher wird er i.d.R. die Daten als Code interpretieren und dabei Unsinn produzieren. Findest du Abschnitte, die überhaupt keinen Sinn ergeben, so handelt es sich oft um Tabellen, womöglich auch einfach um ASCII-Text.

Andererseits könnte ich natürlich einen Disassembler bauen, der garantiert beim Assemblieren wieder die gleichen Binärdaten erzeugt: ich mache einfach aus jedem Byte einen „DB xxH“-Befehl. Nur ist dieser DA zu nichts anderem zu gebrauchen. Wie man sieht, ein weites Feld. Könnte man MS-Word so disassemblieren und mit einem Assembler für PowerPC oder Itanium wieder zu einem funktionsgleichen Programm assemblieren, hätte man das längst getan. Das ist aber von der Realität so weit entfernt wie heutige Computer von echter Intelligenz.

Gruss Reinhard