#!/usr/bin/perl
#OBB Extractor by Pinkazoid
use Fcntl;
use File::Path;
use File::Basename;
$basepath = 'ponydata/';
open(INFILE,"<main.1050.com.gameloft.android.ANMP.GloftPOHM.obb");
binmode(INFILE);
open(IDXFILE,'>ponydata.txt');
if (read(INFILE,$fat,9) == 9) {
seek (INFILE,$fat,SEEK_SET);
while ($data = <INFILE>) {
print IDXFILE $data;
chomp($data);
push @filelist,$data;
}
} else {
print "Unable to read first 9 bytes for file table location, aborting.\n";
end;
}
close(IDXFILE);
foreach $data (@filelist) {
($start,$end,$junk,$junk,$filepath) = split(/\s+/,$data,5);
if ($filepath =~ /\//) {
my ($filename, $filedir) = fileparse($filepath);
$filedir = $basepath . $filedir;
if (!(-e $filedir)) {
mkpath($filedir);
}
}
if (open(OUTFILE,">$basepath$filepath")) {
binmode(OUTFILE);
seek (INFILE,$start,SEEK_SET);
$size = $end - $start;
if (read(INFILE,$buffer,$size) == $size) {
print OUTFILE $buffer;
} else {
print "Unable to read $size bytes at location $start, aborting.\n";
end;
}
close(OUTFILE);
} else {
print "Unable to open $basepath$filepath for writing, aborting.\n";
end;
}
}
close(INFILE);