This works on standard compressed exes from PerlApp 5.3.0, although it's extremely slow (~20KByte/sec) and not hugely helpful (since it doesn't bother reading the filenames), and may not work on PerlApp 4.1; but it does usually work for me, and is marginally better than nothing.
use strict;
use warnings;
use Compress::Zlib;
++$|;
open IN, 'test.exe' or die $!;
binmode IN;
read IN, my $data, 1e8;
my $piecenum=0;
my $progress = progress(length $data);
my $piecedata;
for (0..length($data)-1) {
$progress->($_);
$piecedata = uncompress("\x78\x9c" . substr $data, $_);
if (defined $piecedata) {
print "\nFound piece at $_\n";
open OUT, sprintf('>piece_%03d.txt', $piecenum++) or die $!; b
+inmode OUT;
print OUT $piecedata ^ chr(0xAA) x length $piecedata;
}
}
sub progress {
my $max = $_[0];
my $last = 0;
return sub { print $last = int(100*$_[0]/$max), "%... " if $last !
+= int(100*$_[0]/$max) };
}
-
Are you posting in the right place? Check out Where do I post X? to know for sure.
-
Posts may use any of the Perl Monks Approved HTML tags. Currently these include the following:
<code> <a> <b> <big>
<blockquote> <br /> <dd>
<dl> <dt> <em> <font>
<h1> <h2> <h3> <h4>
<h5> <h6> <hr /> <i>
<li> <nbsp> <ol> <p>
<small> <strike> <strong>
<sub> <sup> <table>
<td> <th> <tr> <tt>
<u> <ul>
-
Snippets of code should be wrapped in
<code> tags not
<pre> tags. In fact, <pre>
tags should generally be avoided. If they must
be used, extreme care should be
taken to ensure that their contents do not
have long lines (<70 chars), in order to prevent
horizontal scrolling (and possible janitor
intervention).
-
Want more info? How to link
or How to display code and escape characters
are good places to start.
|