none
Bytestring ausgeben (aus Python) RRS feed

  • Frage

  • Ich versuche mit folgendem Pyhonskript einen Bytestring auszugeben, was unter der normalen Windowskonsole auch einwandfrei funktioniert:

    import sys
    
    ausgabe = b"\xeb\x1e\x5e\x31\xc0\x31\xdb\x31\xc9\x31\xd2\x88\x46\x0d\xb0\x04\xb3\x01\x8d\x0e\xb2\x0d\xcd\x80\x31\xc0\x31\xdb\xb0\x01\xcd\x80\xe8\xdd\xff\xff\xff\x48\x65\x6c\x6c\x6f\x2c\x20\x77\x6f\x72\x6c\x64\x21\x23" 
    
    sys.stdout.buffer.write(ausgabe)

    Das Skript wird wie folgt aufgerufen und zu Testzwecken in eine Datei umgeleitet:

    python ex4.py > test
    
    

    Unter OS X, Linux und der normalen Windowskommandozeile sieht das Ergebnis im Hex-Editor wie gewünscht aus:

    0000000: eb1e 5e31 c031 db31 c931 d288 460d b004 ..^1.1.1.1..F...
    
    0000010: b301 8d0e b20d cd80 31c0 31db b001 cd80 ........1.1.....
    
    0000020: e8dd ffff ff48 656c 6c6f 2c20 776f 726c .....Hello, worl
    
    0000030: 6421 230a        d!#.

     

    Führe ich das Ganze jedoch unter Powershell aus, hat die erzeugte Datei 112 statt 51 Byte und ist voller Füllzeichen u. Ä:

     

    0000000: fffe d900 1e00 5e00 3100 1425 3100 8825 ......^.1..%1..%
    
    0000010: 3100 5425 3100 ca00 ea00 4600 0d00 0a00 1.T%1.....F.....
    
    0000020: 9125 0400 0225 0100 ec00 0e00 9325 0d00 .%...%.......%..
    
    0000030: 0a00 5025 c700 3100 1425 3100 8825 9125 ..P%..1..%1..%.%
    
    0000040: 0100 5025 c700 de00 a600 a000 a000 a000 ..P%............
    
    0000050: 4800 6500 6c00 6c00 6f00 2c00 2000 7700 H.e.l.l.o.,. .w.
    
    0000060: 6f00 7200 6c00 6400 2100 2300 0d00 0a00 o.r.l.d.!.#.....

     

    Wer hat mir einen Tipp? -encoding byte macht leider keinen Unterschied :( Oder gibt es eine Möglichkeit die gewünschte Ausgabe ohne viel Aufwand direkt mit PowerShell zu erzeugen? Zum Hintergrund: Ich möchte o.g. Shellcode in ein einfaches C-Programm einschleusen.

    Vielen Dank für eure Hilfe!

    • Bearbeitet omnifrodo Freitag, 7. Januar 2011 15:35 bessere Formatierung
    Freitag, 7. Januar 2011 15:33

Antworten

  • Hallo

    verwende die Convert-HexStringToByteArray Funktion aus diesem Blog Eintrag:

    $str="\xeb\x1e\x5e\x31\xc0\x31\xdb\x31\xc9\x31\xd2\x88\x46\x0d\xb0\x04\xb3\x01\x8d\x0e\xb2\x0d\xcd\x80\x31\xc0\x31\xdb\xb0\x01\xcd\x80\xe8\xdd\xff\xff\xff\x48\x65\x6c\x6c\x6f\x2c\x20\x77\x6f\x72\x6c\x64\x21\x23"
    $b = Convert-HexStringToByteArray($str)
    set-content -value $b -encoding byte -path .\outfile.exe
    

    Gruß
    Andrei

    Montag, 10. Januar 2011 13:09
    Moderator