1 x 1 Assembler



  • Super!
    Na also so verstehe ich es ja sogar.
    Vielen Dank mehr will ja garnicht.
    Grüße



  • Sorry, aber es ist manchmal echt schwer, ein Maß für das Wissen des Fragenden zwischen den Zeilen herauszulesen. Wenn man deinen Text liest (ich meine die urprüngliche Frage), kriegt man den Eindruck - wie kingruedi bereits erwähnte - daß du ein Programm Cracken willst, wofür allerdings weit mehr als nur elementare Assembler-Kenntnisse, die u.a. ich voraussetzte, vonnöten sind.



  • Original erstellt von Cocaine:
    Sorry, aber es ist manchmal echt schwer, ein Maß für das Wissen des Fragenden zwischen den Zeilen herauszulesen. Wenn man deinen Text liest (ich meine die urprüngliche Frage), kriegt man den Eindruck - wie kingruedi bereits erwähnte - daß du ein Programm Cracken willst, wofür allerdings weit mehr als nur elementare Assembler-Kenntnisse, die u.a. ich voraussetzte, vonnöten sind.

    genau meine Meinung! Außerdem weiss ich dich (Tauboga) daraufhin, dass es da auch zu einigen rechtlichen Problemen kommen kann! Also lass die Finger davon und lern lieber richtig Assembler, Hexzahlensystem uvm.



  • 😃
    Ich bin auf Asssembler gekommen, indem ich ein Programm das eh niemand kennt gecrackt habe. Ich hatte das Programm vor nem jahr legal gekauft und wollte einfach mal testen ob ich es schaffe es zu cracken.
    Aber danach hab ich es gelassen und versuche mehr oder weniger sinnvolles in Assembler zu schreiben. 😃
    Ich finde man kann schon einiges Lernen wenn man ein Programm crackt. Man sollte den Crack halt nicht öffentlich rumgeben und man sollte das Programm legal besitzen. 🙂
    Naja, etwas mehr Ahnung als Tauboga hatte ich schon. 😉



  • Hi!
    Ich glaube man mißversteht mich. Ich will gar kein Program
    cracken. Das was Ihr hier liest ist ein Crack Tutorial was
    ich zufällig beim Surfen entdeckt habe. Mich interessierte
    nur das Assemblertechnische an dem Ganzen weil ich eben
    einfach verstehen wollte was diese ganze Zahlen sein sollen
    usw. Es ist absolut unwahr das ich ein Program cracken will
    oder so etwas.

    z.B Sachen wie in der hier aufgeführten Zeile unten:
    :004116A4 E857830000 call 00419A00
    Ich meine das FORMAT EINER ASSEMBLER-ZEILE
    :=mache etwas 004116A4=mache etwas E857830000=mache etwas call=mache etwas 00419A00 = mache etwas
    So könnte ich es verstehen.
    Stellt euch mal vor ich bin ein absoluter Anfänger.
    Da stehen ganze Menge von hexadezimale Zahle die wiederrum
    etwas bedeuten und dann wird da was von OPCodes gesagt.
    Ich lediglich einiges über Assembler verstehen und nicht etwas
    cracken.
    Grüße



  • Na gut, dann will ich mal versuchen das zu erklären. Du wirst da wahrscheinlich einen Blick auf einen Disassembler geworfen haben. Schauen wir uns die Zeile '004116A4 E857830000 call 00419A00' mal Stück für Stück an:

    004116A9: Das ist eine Speicheradresse. Vertausche dies nicht mit dem Offset, an dem die Instruktion in der Datei steht! Nachdem Windows die EXE geladen hat, wird die Instruktion an dieser Stelle stehen. Diese Adresse ist übrigens virtuell. Windows kümmert sich schon ums Speichermanagement 😉

    E857830000: Das ist die Instruktion selbst, in Form von Zahlen repräsentiert (nennt sich auch Opcode). Genau diese Zahlenfolge steht irgendwo in der EXE drin.

    call 00419A00: Das ist die Instruktion in Assembler ausgedrückt. Dies ist ein Prozeduraufruf. Die Zahl hinter dem CALL ist die Adresse wo hingesprungen werden soll. Der Disassembler hat hier die absolute Adresse, die wir hier sehen, für uns berechnet. In dem Opcode steht nämlich eine relative Angabe: E857830000. Dies ist nach Intel Reversed Byte Order gespeichert (ich weiß nun nicht mehr ob sich das Little oder Big Endian nennt). Dreht man die einzelnen Bytes um, erhält man: 00008357. Und das ist die Distanz um die gesprungen werden soll. Die neue Adresse, wo der Code ausgeführt wird, ist dann: 004116A9 + 00008357 = 00419A00.

    Ich hoffe mal, das war halbwegs verständlich. Wenn du die CALL Instruktion (oder irgendeine andere) erklärt haben willst, dann solltest du besser ein Assembler Tutorial lesen.

    Ach ja, das NOP steht wirklich für ein XCHG AX,AX und hat den Opcode 90. Diese Instruktion tauscht das AX Register mit dem AX Register aus, macht also faktisch überhaupt nichts.

    [ Dieser Beitrag wurde am 03.06.2002 um 00:31 Uhr von malfunction editiert. ]



  • hm. Also in einem Assembler Quellcode schreibst du natuerlich nicht so viele Zahlen. In einer .asm-Datei wurde das Ganze dann vermutlich so aussehen:
    call IrgendeineProc

    Diese ganzen Zahlen davor setzten einige Debugger und Disassembler zur besseren Uebersicht. Ich versuche jetzt mal diese Zeile zu interpretieren:
    : <- hat hier eigentlich nichts zu bedeuten. einen Doppelpunkt setzt man zwischen Segment und Offset. Segment steht dabei vor dem Doppelpunkt. In Windowsprogrammen wird dieses Segment aber eigentlich nie angegeben, deshalb steht hier vor dem Doppelpunkt nichts. Das Segment kannst du dir in diesem Zusammenhang als eine ID-Nummer des gesamten Speichers vorstellen, in dem der ausfuehrbare code liegt. Der Daten-Speicher (fuer Bilder sounds usw) des Programms hat dann wahrscheinlich eine andere solche ID-Nummer...

    004116A4 <-die Addresse, an der diese Zeile im Speicher liegt. Vereinfacht liegt diese Zeile also beim 004116A4.(hex) byte im Speicher. Diese Speicheraddresse wird auch Offset genannt.

    E857830000 <- Der Opcode fuer das, was hinter dieser zahl steht. (also call...) Diese Zahl ist also sozusagen die ID dieses Befehls

    call 00419A00 <- Der Befehl selbst. Hier wird an Addresse 00419A00 gesprungen. Dort wird dann das Programm weiter ausgefuehrt, also der code, der an Addresse 00419A00 und dahinter steht.

    Hoffe das war verstaendlich, sonst bitte nochmal fragen 😉



  • Hi!
    Malfunction vielen Dank für deine freundlichen Bemühungen.
    Ich habe es jetzt wriklich in der Tat besser kapiert.
    Könnstest du mir vielleicht sagen woher ich so eine
    Opcode Liste beziehen kann. Und steht dann wirklich hier auch
    nachher drin NOP = 90h usw oder muss man hier wieder etwas berechnen?
    Grüße



  • In der Opcode-Liste steht entweder direkt nop oder xchg eax, eax (= tausche eax mit eax was ja nunmal nichtstun ist :)) oder beides 🙂



  • Wie TriPhoenix schon sagte: In einer Opcode Liste stehen nicht die komplette Instruktionen drin. Dort sind meist nur die eigentlichen Opcodes drin, die Bytes, die die benutzen Register/Speicheradressen und ähnliches angeben, sind dort nicht aufgeführt. Wirf doch mal einen Blick auf: http://www.c-plusplus.net/ubb/cgi-bin/ultimatebb.cgi?ubb=get_topic&f=17&t=000397


Anmelden zum Antworten