| 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 |