2016-04-22 5 views
0

Ich möchte eine Anwendung als hexadezimale Byte-Array speichern, so dass ich es mit Python ausführen kann. Traditionell habe ich dies mit msfencode erstellt, aber seither ist es veraltet. Ich weiß, dass es msfvenom gibt, aber ich möchte mein eigenes machen, damit ich nicht auf ein anderes Programm angewiesen bin.Convert exe zu hex von Python ausgeführt werden

Im Grunde genommen möchte ich eine Datei lesen und sie als hexadezimiertes Binärarray speichern.

Zum Beispiel ist das Windows-Rechner als ein Byte-codierte Byte-Array (gefunden online):

shellcode = bytearray(
"\xdb\xc3\xd9\x74\x24\xf4\xbe\xe8\x5a\x27\x13\x5f\x31\xc9" 
"\xb1\x33\x31\x77\x17\x83\xc7\x04\x03\x9f\x49\xc5\xe6\xa3" 
"\x86\x80\x09\x5b\x57\xf3\x80\xbe\x66\x21\xf6\xcb\xdb\xf5" 
"\x7c\x99\xd7\x7e\xd0\x09\x63\xf2\xfd\x3e\xc4\xb9\xdb\x71" 
"\xd5\x0f\xe4\xdd\x15\x11\x98\x1f\x4a\xf1\xa1\xd0\x9f\xf0" 
"\xe6\x0c\x6f\xa0\xbf\x5b\xc2\x55\xcb\x19\xdf\x54\x1b\x16" 
"\x5f\x2f\x1e\xe8\x14\x85\x21\x38\x84\x92\x6a\xa0\xae\xfd" 
"\x4a\xd1\x63\x1e\xb6\x98\x08\xd5\x4c\x1b\xd9\x27\xac\x2a" 
"\x25\xeb\x93\x83\xa8\xf5\xd4\x23\x53\x80\x2e\x50\xee\x93" 
"\xf4\x2b\x34\x11\xe9\x8b\xbf\x81\xc9\x2a\x13\x57\x99\x20" 
"\xd8\x13\xc5\x24\xdf\xf0\x7d\x50\x54\xf7\x51\xd1\x2e\xdc" 
"\x75\xba\xf5\x7d\x2f\x66\x5b\x81\x2f\xce\x04\x27\x3b\xfc" 
"\x51\x51\x66\x6a\xa7\xd3\x1c\xd3\xa7\xeb\x1e\x73\xc0\xda" 
"\x95\x1c\x97\xe2\x7f\x59\x67\xa9\x22\xcb\xe0\x74\xb7\x4e" 
"\x6d\x87\x6d\x8c\x88\x04\x84\x6c\x6f\x14\xed\x69\x2b\x92" 
"\x1d\x03\x24\x77\x22\xb0\x45\x52\x41\x57\xd6\x3e\xa8\xf2" 
"\x5e\xa4\xb4") 

Ich mag würde, um es zu geben, eine Datei, und haben es, wie oben formatiert.

+1

Warum gehst du nicht einfach speichern die binären Daten in einer Datei? Was ist der Vorteil dieser Codierung, die vier Bytes verwendet, um ein Byte zu codieren? –

+1

@Sven: Vielleicht können die binären Daten in einer Textdatei wie einem Python-Skript gespeichert werden. – martineau

+0

@martineau Ich kann mir ein paar Gründe vorstellen, aber ich würde gerne den spezifischen Grund wissen, um eine nützliche Antwort geben zu können. Meines Erachtens besteht die Chance, dass es für jedes Problem, das das OP zu lösen versucht, eine bessere Lösung gibt, aber wir müssten das Problem zuerst kennen. Z.B. Wenn es nur darum geht, es in einer Textdatei zu speichern, würde ich Base64 als eine einfachere und effizientere Lösung vorschlagen (aber ich würde auch fragen, was der spezifische Vorteil der Speicherung der Binärdaten in einer Textdatei ist). –

Antwort

1

Sie können eine der integrierten Python-Routinen dazu verwenden. Das Folgende setzt voraus, data enthält den (binären) Inhalt der EXE-Datei.

import binascii 

def pairwise(iterable): 
    "s -> (s0,s1), (s2,s3), (s4, s5), ..." 
    a = iter(iterable) 
    return zip(a, a) 

hex_encoded = '\\x' + '\\x'.join(pair[0]+pair[1] 
            for pair in pairwise(binascii.hexlify(data))) 
print('data length: {}'.format(len(data))) 
print('hex_encoded length: {}, "{}"'.format(len(hex_encoded), hex_encoded)) 

Ausgang:

data length: 227 
hex_encoded length: 908, "\xdb\xc3\xd9\x74\x24\xf4\xbe\xe8\x5a\x27\x13\x5f\x31\xc9\xb1\x33\x31\x77\x17\x83\xc7\x04\x03\x9f\x49\xc5\xe6\xa3\x86\x80\x09\x5b\x57\xf3\x80\xbe\x66\x21\xf6\xcb\xdb\xf5\x7c\x99\xd7\x7e\xd0\x09\x63\xf2\xfd\x3e\xc4\xb9\xdb\x71\xd5\x0f\xe4\xdd\x15\x11\x98\x1f\x4a\xf1\xa1\xd0\x9f\xf0\xe6\x0c\x6f\xa0\xbf\x5b\xc2\x55\xcb\x19\xdf\x54\x1b\x16\x5f\x2f\x1e\xe8\x14\x85\x21\x38\x84\x92\x6a\xa0\xae\xfd\x4a\xd1\x63\x1e\xb6\x98\x08\xd5\x4c\x1b\xd9\x27\xac\x2a\x25\xeb\x93\x83\xa8\xf5\xd4\x23\x53\x80\x2e\x50\xee\x93\xf4\x2b\x34\x11\xe9\x8b\xbf\x81\xc9\x2a\x13\x57\x99\x20\xd8\x13\xc5\x24\xdf\xf0\x7d\x50\x54\xf7\x51\xd1\x2e\xdc\x75\xba\xf5\x7d\x2f\x66\x5b\x81\x2f\xce\x04\x27\x3b\xfc\x51\x51\x66\x6a\xa7\xd3\x1c\xd3\xa7\xeb\x1e\x73\xc0\xda\x95\x1c\x97\xe2\x7f\x59\x67\xa9\x22\xcb\xe0\x74\xb7\x4e\x6d\x87\x6d\x8c\x88\x04\x84\x6c\x6f\x14\xed\x69\x2b\x92\x1d\x03\x24\x77\x22\xb0\x45\x52\x41\x57\xd6\x3e\xa8\xf2\x5e\xa4\xb4" 

Es wäre kompakter und effizienter sein, wenn base64 encoding zu verwenden:

import base64 

base64_encoded = base64.b64encode(data) 
print('base64_encoded length: {}, "{}"'.format(len(base64_encoded), base64_encoded)) 

Ausgang:

base64_encoded length: 304, "28PZdCT0vuhaJxNfMcmxMzF3F4PHBAOfScXmo4aACVtX84C+ZiH2y9v1fJnXftAJY/L9PsS523HVD+TdFRGYH0rxodCf8OYMb6C/W8JVyxnfVBsWXy8e6BSFITiEkmqgrv1K0WMetpgI1Uwb2SesKiXrk4Oo9dQjU4AuUO6T9Cs0EemLv4HJKhNXmSDYE8Uk3/B9UFT3UdEu3HW69X0vZluBL84EJzv8UVFmaqfTHNOn6x5zwNqVHJfif1lnqSLL4HS3Tm2HbYyIBIRsbxTtaSuSHQMkdyKwRVJBV9Y+qPJepLQ=" 
+0

Genau das, was ich gesucht habe. – Lexicon