All pastes #736281 Raw Edit

Anonymous

public text v1 · immutable
·published 2007-10-14 11:59 UTC
rendered paste body
#!/usr/bin/perl
use strict;

use GNUpod::Hash58;
use constant START   => '000A2700';

my $infile      = shift or die "Usage: $0 iTunesDB\n";
open(ITB, "<", $infile) or die "Unable to read $infile : $!\n";
my $okhash = unpack("H*",get_string(0x58,20, *ITB));
close(ITB);

print "=> Hash in iTunesDB is: $okhash\n";

warn "** This tool will MODIFY $infile while running, $infile should be in\n";
warn "** tmpfs (not on a flash device!)\n";
warn "** Hit ENTER to continue, CTRL+C aborts\n";
<STDIN>;

my $fwx = 0x15000000;
#         0xFFFFFFFF

# notdone: 0x380ba72 - 0x15000000


my $xx = 0;
for(;;) {
        my $firewire_id = START.sprintf("%08x",$fwx);
        my $fwref = GNUpod::Hash58::_StringToArrayRef(pack("H16",$firewire_id));
        my $ckey  = GNUpod::Hash58::CreateKey($fwref);
        my $chash = unpack("H*",GNUpod::Hash58::CreateHash(Keyref=>$ckey, Filepath=>$infile));
        
        if($xx++ == 500) {
                print "=> $firewire_id\n";
                $xx = 0;
        }
        
        if($chash eq $okhash) {
                print "$firewire_id : $chash -> $okhash\n";
                die "Hit!\n";
        }
        $fwx++;
}

###########################################
# Reads a string
sub get_string {
	my ($start, $anz, $fh) = @_;
	my($buffer) = undef;
	Carp::confess("No filehandle!") unless $fh;
	$start = int($start);
	$anz   = int($anz);
	sysseek($fh, $start, 0);
	#start reading
	sysread($fh, $buffer, $anz);
	return $buffer;
}