version 1.1, 2006/01/26 20:54:19 |
version 1.2, 2007/02/18 05:34:20 |
|
|
# Dump a Palm PDB or PRC database. |
# Dump a Palm PDB or PRC database. |
# |
# |
# $Id$ |
# $Id$ |
# $RedRiver: KeyRingpdbdump,v 1.2 2005/08/25 00:56:07 andrew Exp $ |
# $RedRiver: KeyRingpdbdump,v 1.1 2006/01/26 20:54:19 andrew Exp $ |
|
|
use strict; |
use strict; |
use Palm::PDB; |
use Palm::PDB; |
|
|
} |
} |
} |
} |
|
|
sub decrypt |
|
{ |
|
use Digest::MD5 qw(md5); |
|
use Crypt::TripleDES; |
|
|
|
my $MD5_CBLOCK = 64; |
|
|
|
my $data = shift; |
|
my $pass = shift; |
|
|
|
my $digest = md5($pass); |
|
|
|
my ($key1, $key2) = unpack('a8a8', $digest); |
|
#-------------------------------------------------- |
|
# print "key1: $key1: ", length $key1, "\n"; |
|
# print "key2: $key2: ", length $key2, "\n"; |
|
#-------------------------------------------------- |
|
|
|
$digest = unpack('H*', $key1 . $key2 . $key1); |
|
#-------------------------------------------------- |
|
# print "Digest: ", $digest, "\n"; |
|
# print length $digest, "\n"; |
|
#-------------------------------------------------- |
|
|
|
my ($name, $ciphertext) = split /\0/, $data; |
|
|
|
my $des = new Crypt::TripleDES; |
|
my $plaintext = $des->decrypt3($ciphertext, $digest); |
|
|
|
my ($account, $password, $description, $extra) = split /\0/, $plaintext, 4; |
|
|
|
print "Name: $name\n"; |
|
print "Account: $account\n"; |
|
print "Password: $password\n"; |
|
print "Description: $description\n"; |
|
|
|
return $plaintext; |
|
} |
|
|
|
sub keyring_verify |
|
{ |
|
use Digest::MD5 qw(md5); |
|
|
|
my $MD5_CBLOCK = 64; |
|
|
|
my $data = shift; |
|
my $pass = shift; |
|
|
|
my $kSaltSize = 4; |
|
my $salt = substr($data, 0, $kSaltSize); |
|
|
|
my $msg = $salt . $pass; |
|
|
|
$msg .= "\0" x ($MD5_CBLOCK - length($msg)); |
|
|
|
print "LENGTH: ", length $msg, "\n"; |
|
|
|
my $digest = md5($msg); |
|
|
|
print "Data: ", unpack('H*', $data); |
|
print "\n"; |
|
print "Digest: ", unpack('H*', $salt . $digest); |
|
print "\n"; |
|
|
|
if ($data eq $salt . $digest) { |
|
return 1; |
|
} else { |
|
return undef; |
|
} |
|
|
|
return $digest; |
|
#return $decrypted; |
|
} |
|
sub hexdump |
sub hexdump |
{ |
{ |
my $prefix = shift; # What to print in front of each line |
my $prefix = shift; # What to print in front of each line |