[Assembler] Null-Byte Setzen

Dieses Thema im Forum "Programmierung & Entwicklung" wurde erstellt von rushzero, 14. Dezember 2009 .

Schlagworte:
  1. 14. Dezember 2009
    Null-Byte Setzen

    Code:
    
    global _main
    
    section .text
    _main:
     xor eax,eax
     xor ebx,ebx
     xor ecx,ecx
     xor edx,edx
    jmp short function
    function2:
     pop eax
     ;mov [eax+0Ah], dl ; <---------- XXXXX
     mov ebx, 0x7c801d7b
     push eax
     call ebx
     mov ecx, eax
     xor eax,eax
     jmp short function3
    function4:
     pop eax
     ;mov byte [eax+12], dl ; <---------- XXXXX
     mov ebx, 0x7c80ae40
     push eax
     push ecx
     call ebx
     
     push byte 1
     push byte 1
     call eax
    
     mov ebx, 0x7c81cb12
     push byte 1
     call ebx
    function:
     call function2
     db 'user32.dllN'
     jmp short function2
    function3:
     call function4
     db 'SetCursorPosN'
    
    An den stellen die ich mit XXXXX bleibt mein Programm immer hängen ... kA waurm normaler weiße müsste er doch ganz normal setzten bzw Null Terminiern
     
  2. 14. Dezember 2009
    AW: Null-Byte Setzen

    hab zwar die AT&T syntax gelernt aber...

    Code:
    ;mov byte [eax+12], dl ;
    eax = 32 bit
    aber du kopierst byte... quasi 8 bit

    und beim ersten sagst du nicht mal was für eine größe du kopieren willst

    außerdem: was ist dl? wie gesagt.. komme aus ner anderen syntax und hab assembler grad mal fast 1 semester
     
  3. 14. Dezember 2009
    AW: Null-Byte Setzen

    Was genau hast du vor?

    Bei mir ists auch schonwieder laenger her.

    Also DL ist das lower byte vom DX Register.

    Du willst den Inhalt von DL ab der 18. Position ins EAX Register kopieren. Ich glaub aber du musst die [] weglassen. Die Klammern sagen eignetlich dass du den Inhalt willst. Du nimmst also Den Inhalt ab der 13. Position als Adresse.
     
  4. 14. Dezember 2009
    AW: Null-Byte Setzen

    Der sinn dabei ist das ich ein Shellcode brauche aber imoment, echt nit fit bin in ASM ^^

    Der sinn
    durch das
    Code:
    pop eax ; hol ich ja die adresse vom String -- db 'SetCursorPosN' --
    ; Weil bei einem Shellcode keine NullBytes vorkommen dürfen muss ich alles ohne machen
    ; deshalb überschreib ich jetzt
    mov byte [eax+12], dl ;die 12 stelle im Speicher(Adresse liegt ja in eax)
    ; Sprich aus SetCursorPosN soll SetCursor(Hier kommen die 0x00) werden
    
     
  5. 15. Dezember 2009
    AW: Null-Byte Setzen

    also ich verstehe ebensowenig wie meine vorgänger... was genau hast du vor?

    was hier allerdings schon komisch aussieht (ohne zu wissen welchen asm du programmierst): du versucht mittels "mov" - Befehl etwas in den Speicher zu schreiben... das klappt wahrscheinlich nicht... der "mov" - Befehl ist normalerweise nur für verschiebung von Werten in den Registern der ALU. du müsstest mal nach nem 'store' - Befehl schauen...

    also z.B. statt "mov byte [eax+12], dl" eher "str byte [eax+12], dl"
     
  6. 15. Dezember 2009
    AW: Null-Byte Setzen

    Hab dein Programm mal Compiliert und mim Debuger drüber geschaut:
    Zugriffsverletzung beim Schrieben, du hast wahrscheinlich keine Schreibrechte in der Section .text.

    Warum fügst du nicht direkt im Code ein Terminierungszeichen ein:
    Code:
    db 'user32.dll', 0
    
    Falls du dennoch manuel ein NullByte einfügen willst musst du wohl ne Section wählen in der du Schreibrechte hast z.B .data.

    Mfg Rushh0ur
     
  7. 15. Dezember 2009
    AW: Null-Byte Setzen

    Der Code ist vom Aussehen her richtig, aber du schreibst wohl in einen schreibgeschützten Bereich.

    ----------------------------------------------------------------
    Fail. mov ist 100% richtig.

    [] zeigt eine Speicheradresse an. [eax+18] <- Adresse in eax plus 18.
    Beispiel: eax = 55 -> [eax+10] = [65]
     
  8. 15. Dezember 2009
    AW: Null-Byte Setzen

    Das könnte allerdings sein, hab ich bis jetzt nicht bedachnt
    ach übringens ich code mit nasm.
    Aber warum sollte der Bereich geschützt sein ? Ich hab ja den String voher auch an die Stelle geschrieben ?
     
  9. 15. Dezember 2009
    AW: Null-Byte Setzen

    Auf was zeigt denn eax? Das wird im Code nicht ersichtlich... also was pop't der vom Stack?

    Und was für Adressen rufst du da auf?! Hardcoding von Funktionsadressen ist nicht die feine Art...
     
  10. 15. Dezember 2009
    AW: Null-Byte Setzen

    Der will nen Shellcode erstellen und wahrscheinlich in einem Bufferoverflow verwenden, deswegen sind die Addressen Hardcoded und er darf keine Nulltermienierungszeichen haben um den Code richtig zu laden.

    Hab mir auch zuerst gedacht was da am Anfang gepoppt wird, die Antwort ist, dass er die Funktionen mit call Aufruft und hinter diesen einen String definiert, sodass beim Auruf mittels call im Stack dann die Addresse des Strings enthalten ist, diese entnimmt er dann wieder und will am "Ende" des Strings ne Nullterminierung schreiben, was zur Zugriffsverletzung führt, da er keine Schreibrechte in dieser Memorymap hat.

    @Topic: Unter anderen umständen wie zum Beispiel beim Bufferoverflow sollte der Code richtig funktionieren, da dieser nur Auftretten kann wenn man auch Schreibrechte hat.

    Mfg Rushh0ur
     
  11. Video Script

    Videos zum Themenbereich

    * gefundene Videos auf YouTube, anhand der Überschrift.