00001 #include <stdio.h>
00002 #include <iostream>
00003 #include <sys/types.h>
00004 #include <sys/stat.h>
00005 #include <fcntl.h>
00006 using namespace std;
00007 extern "C" {
00008 #include "define.h"
00009 };
00010
00011 unsigned char comp_enc [] =
00012 { 0x47, 0xf1, 0xb4, 0xe6, 0x0b, 0x6a, 0x72, 0x48,
00013 0x85, 0x4e, 0x9e, 0xeb, 0xe2, 0xf8, 0x94, 0x53,
00014 0xe0, 0xbb, 0xa0, 0x02, 0xe8, 0x5a, 0x09, 0xab,
00015 0xdb, 0xe3, 0xba, 0xc6, 0x7c, 0xc3, 0x10, 0xdd,
00016 0x39, 0x05, 0x96, 0x30, 0xf5, 0x37, 0x60, 0x82,
00017 0x8c, 0xc9, 0x13, 0x4a, 0x6b, 0x1d, 0xf3, 0xfb,
00018 0x8f, 0x26, 0x97, 0xca, 0x91, 0x17, 0x01, 0xc4,
00019 0x32, 0x2d, 0x6e, 0x31, 0x95, 0xff, 0xd9, 0x23,
00020 0xd1, 0x00, 0x5e, 0x79, 0xdc, 0x44, 0x3b, 0x1a,
00021 0x28, 0xc5, 0x61, 0x57, 0x20, 0x90, 0x3d, 0x83,
00022 0xb9, 0x43, 0xbe, 0x67, 0xd2, 0x46, 0x42, 0x76,
00023 0xc0, 0x6d, 0x5b, 0x7e, 0xb2, 0x0f, 0x16, 0x29,
00024 0x3c, 0xa9, 0x03, 0x54, 0x0d, 0xda, 0x5d, 0xdf,
00025 0xf6, 0xb7, 0xc7, 0x62, 0xcd, 0x8d, 0x06, 0xd3,
00026 0x69, 0x5c, 0x86, 0xd6, 0x14, 0xf7, 0xa5, 0x66,
00027 0x75, 0xac, 0xb1, 0xe9, 0x45, 0x21, 0x70, 0x0c,
00028 0x87, 0x9f, 0x74, 0xa4, 0x22, 0x4c, 0x6f, 0xbf,
00029 0x1f, 0x56, 0xaa, 0x2e, 0xb3, 0x78, 0x33, 0x50,
00030 0xb0, 0xa3, 0x92, 0xbc, 0xcf, 0x19, 0x1c, 0xa7,
00031 0x63, 0xcb, 0x1e, 0x4d, 0x3e, 0x4b, 0x1b, 0x9b,
00032 0x4f, 0xe7, 0xf0, 0xee, 0xad, 0x3a, 0xb5, 0x59,
00033 0x04, 0xea, 0x40, 0x55, 0x25, 0x51, 0xe5, 0x7a,
00034 0x89, 0x38, 0x68, 0x52, 0x7b, 0xfc, 0x27, 0xae,
00035 0xd7, 0xbd, 0xfa, 0x07, 0xf4, 0xcc, 0x8e, 0x5f,
00036 0xef, 0x35, 0x9c, 0x84, 0x2b, 0x15, 0xd5, 0x77,
00037 0x34, 0x49, 0xb6, 0x12, 0x0a, 0x7f, 0x71, 0x88,
00038 0xfd, 0x9d, 0x18, 0x41, 0x7d, 0x93, 0xd8, 0x58,
00039 0x2c, 0xce, 0xfe, 0x24, 0xaf, 0xde, 0xb8, 0x36,
00040 0xc8, 0xa1, 0x80, 0xa6, 0x99, 0x98, 0xa8, 0x2f,
00041 0x0e, 0x81, 0x65, 0x73, 0xe4, 0xc2, 0xa2, 0x8a,
00042 0xd4, 0xe1, 0x11, 0xd0, 0x08, 0x8b, 0x2a, 0xf2,
00043 0xed, 0x9a, 0x64, 0x3f, 0xc1, 0x6c, 0xf9, 0xec};
00044
00045 int main(int argc, char *argv[]) {
00046 if (argc < 4) {
00047 cout << "usage: " << argv[0] << " filename.pst integer-delta search-string" << endl;
00048 return 0;
00049 }
00050 int fd = open(argv[1], O_RDONLY);
00051 int d = atoi(argv[2]);
00052 string search(argv[3]);
00053 cout << "using file " << argv[1] << " with delta " << d << " looking for " << search << endl;
00054 if (fd) {
00055 struct stat st;
00056 fstat(fd, &st);
00057 off_t size = st.st_size;
00058 char buf[size];
00059 size_t s = read(fd, buf, size);
00060 pst_debug_hexdumper(stdout, buf, s, 16, 0);
00061 cout << endl;
00062 cout << endl;
00063 cout << " dump decrypted data " << endl;
00064 for (off_t i=0; i<size; i++) {
00065 buf[i] = comp_enc[(unsigned char)buf[i]];
00066 }
00067 pst_debug_hexdumper(stdout, buf, s, 16, 0);
00068 close(fd);
00069 }
00070 return 0;
00071 }