Disassemblern? Wie?



  • Original erstellt von pAngel:
    2. Windows bietet durch "debug.exe" eigentlich einen praktischen Deassembler. Einfach "debug.exe" und dann "?" eingeben und man erhält alle Services des Programms einschließlich den Deassembler.

    Also genaugenommen ist es ein DOS-Service. Und sobald man 32-Bit-EXEs zerlegen will, ists vorbei 🙂 Als Win32-Disassembler bevorzuge ich OllyDbg, damit kann man nämlich auch gleichzeitig noch Debuggen, Patchen und man bekommt z.B. Win32-Calls direkt mit namen angezeigt.



  • Zum Disassemblen (heißt meiner Meinung nach so) benutze ich ndisasm (http://nasm.sourceforge.net). Ist schön einfach zu benutzen!



  • auch sehr gut in diesem falle gefällt mir HT ( http://hte.sourceforge.net/ ) das teil ist einfach cool 😃



  • Also der beste Disassembler für Win32 den es gibt ist meiner Meinung W32DSM. Der liefert neben dem disassemblierten Code noch so viele zusätzliche Informationen, das ist unglaublich 😉



  • Ich benutze den WDASM 8.9. Der IDA soll auch ganz gut sein.



  • WDASM == W32DSM 😉



  • mal so nebenbei.

    Man kann auch mit dem normalen DOS-Debugger disassemblieren.

    Problematisch ist übrigens, dass ein Diassembler nur die Zahlen sieht.
    Deklarierte Texte werden ebenfalls als Befehlsfolge gewertet, was zu Fehlern führen kann..

    Hier der Ablauf des DEbuggens mit der debug.exe

    • 'debug Programm.exe' aufrufen
    • Befehl 'rcx' ausgeben und Wert merken
    • debug beenden (q)
    • 'debug Programm.exe > Programm.asm' aufrufen
    • Achtung: jetzt muss man durch die Umleitung blind schreiben
    • 'u 0100 ' und den Wert von rcx + 0100(hex) dahinter schreiben
    • debug beenden (q)
    • die erste und die letzte Zeile können gelöscht werden

    Klar ist das nur eine Notlösung, aber es funktioniert und außerdem hat jeder Windowsrechner/DOSrechner den debugger dabei 😃

    cYa
    DjR



  • Original erstellt von DocJunioR:
    **Klar ist das nur eine Notlösung, aber es funktioniert und außerdem hat jeder Windowsrechner/DOSrechner den debugger dabei 😃
    **

    Hm, also von Funktionieren war da nicht soviel bei mir zu sehen 🙄. Das mag bei 16-Bit-DOS-Exes ja ganz nett gehen, aber bei Win32-EXEs hat die Lösung verloren. Schon weil in 32-Bit Befehle anders codiert werden.



  • Ihr wisst ja das ihr nur EURE Programme dessamblieren dürft?

    MFG

    LordHoto



  • "Problematisch ist übrigens, dass ein Diassembler nur die Zahlen sieht.
    Deklarierte Texte werden ebenfalls als Befehlsfolge gewertet, was zu Fehlern führen kann.."

    Der IDA erkennt das ziemlich gut. Außerdem kann man diesem Disasm auch sagen ob eine Stelle Daten oder Code darstellt.
    Ist ja auch ein wenig antidebug, wenn man die Daten direkt zwischen den Code packt. Zum Beispiel kann man einen String ja auch so einer Windowsfunktion übergeben:

    call mylabel
    DB "thestring",0
    mylabel:
    

    Normalerweise sieht es ja eher so aus:

    mystring DB "thestring",0
    ...
    ...
    push offset mystring
    


  • Bei "debug" steht aber auch "Deassembler", wenn man "?" eingibt.

    Mir gefällt übrigens "W32dsm87"!

    P.S.: Nur mal so nebenbei: Bei "debug" kann man ja COM- Dateien erstellen, indem man Assembler- Programme mit einem Segment erstellt. Da muss man nach assemblieren "n name.com" eingeben, und dann "rcx", dann folgt die Angabe der Bytes. Was ist das überhaupt? Dann folgt übrigens ein "w" zum endgültigen erstellen des Programms.



  • rcx liest den Inhalt des Registers cx aus.
    debug speichert dort die Länge des Programms.

    zum Thema des 16 BIT - Debuggens und win32-Progs - ich sagte ja, dass das einige Macken hat 😉



  • Muss die Länge eine bestimmte Länge haben? 🙂



  • du musst die Anzahl Bytes angeben, die du wegschreibst.
    wenn Du nicht weißt, wieviel das sein muss, würd ich einfach immer das komplette segment wegschreiben (länge = feff, weil der scherz ja erst bei 0100 anfängt)

    an könnte übrigens theoretisch auch ganze exe-dateien schreiben. das muss man aber dann zu Fuß machen, also quasi den exe-Header selbst bauen.
    Die Größe ist auch kein Problem. debug kann eigentlich den gesamten Speicher verwalten...

    cYa
    DjR



  • Also hab mal bei debug folgendes probiert, um zu testen, obs geht:

    0100: jmp 0100
    0102: db "Hallo bei debug!", "$"
    mov ah, 9
    mov dx, 102
    int 21
    mov ah, 4c
    int 21

    dann muss ich die Bytes mit "rcx" schreiben:
    mach ich also FEFF. Wenn ich das Proggy aber dann erstelle läuft es zwar, kommt aber nicht einmal nach einer Ewigkeit das "Hallo bei debug!" (also es kommt nimmer).
    was hab ich falsch gemacht?


Anmelden zum Antworten