diff -urpN JohnTheRipper.orig/src/keepass2john.c JohnTheRipper/src/keepass2john.c --- JohnTheRipper.orig/src/keepass2john.c 2013-04-14 12:16:28.876596691 +0000 +++ JohnTheRipper/src/keepass2john.c 2013-04-15 01:56:50.932494864 +0000 @@ -33,6 +33,9 @@ #include #include "params.h" #include "memory.h" +#include "misc.h" + +const char *extension[]={".kdbx"}; // KeePass 1.x signature uint32_t FileSignatureOld1 = 0x9AA2D903; @@ -130,6 +133,7 @@ static void process_old_database(FILE *f int count; long long filesize; long long datasize; + char *dbname; enc_flag = fget32(fp); version = fget32(fp); count = fread(final_randomseed, 16, 1, fp); @@ -154,7 +158,8 @@ static void process_old_database(FILE *f fprintf(stderr, "! %s : Unsupported file encryption!\n", encryptedDatabase); return; } - printf("%s:$keepass$*1*%d*%d*",encryptedDatabase, key_transf_rounds, 124); + dbname = strip_suffixes(basename(encryptedDatabase),extension, 1); + printf("%s:$keepass$*1*%d*%d*",dbname, key_transf_rounds, 124); print_hex(final_randomseed, 16); printf("*"); print_hex(transf_randomseed, 32); @@ -173,7 +178,7 @@ static void process_old_database(FILE *f print_hex(buffer, datasize); } else { - printf("*0*%s", encryptedDatabase); /* data is not inline */ + printf("*0*%s", dbname); /* data is not inline */ } printf("\n"); } @@ -193,6 +198,7 @@ static void process_database(char* encry uint32_t uSig1, uSig2, uVersion; FILE *fp; unsigned char out[32]; + char *dbname; fp = fopen(encryptedDatabase, "rb"); if (!fp) { @@ -304,7 +310,8 @@ static void process_database(char* encry fprintf(stderr, "! %s : parsing failed, please open a bug if target is valid KeepPass database.\n", encryptedDatabase); goto bailout; } - printf("%s:$keepass$*2*%ld*%ld*",encryptedDatabase, transformRounds, dataStartOffset); + dbname = strip_suffixes(basename(encryptedDatabase),extension, 1); + printf("%s:$keepass$*2*%ld*%ld*",dbname, transformRounds, dataStartOffset); print_hex(masterSeed, masterSeedLength); printf("*"); print_hex(transformSeed, transformSeedLength); @@ -333,7 +340,7 @@ int keepass2john(int argc, char **argv) int i; if(argc < 2) { - fprintf(stderr, "Usage: keepass2john [KeePass database(s)]\n"); + fprintf(stderr, "Usage: keepass2john [.kdbx KeePass database(s)]\n"); return -1; } for(i = 1; i < argc; i++) { diff -urpN JohnTheRipper.orig/src/keychain2john.c JohnTheRipper/src/keychain2john.c --- JohnTheRipper.orig/src/keychain2john.c 2013-04-14 12:16:28.876596691 +0000 +++ JohnTheRipper/src/keychain2john.c 2013-04-15 01:47:43.204495997 +0000 @@ -43,6 +43,7 @@ #include #include #include "stdint.h" +#include "misc.h" #define SALTLEN 20 #define IVLEN 8 @@ -122,7 +123,7 @@ static void process_file(const char *fil exit(1); } // output - printf("%s:$keychain$*", filename); + printf("%s:$keychain$*", basename(filename)); print_hex(salt, SALTLEN); printf("*"); print_hex(iv, IVLEN); diff -urpN JohnTheRipper.orig/src/keyring2john.c JohnTheRipper/src/keyring2john.c --- JohnTheRipper.orig/src/keyring2john.c 2013-04-14 12:16:28.876596691 +0000 +++ JohnTheRipper/src/keyring2john.c 2013-04-15 01:56:32.544494902 +0000 @@ -14,6 +14,7 @@ #include #include "stdint.h" #include "memory.h" +#include "misc.h" #define KEYRING_FILE_HEADER "GnomeKeyring\n\r\0\n" #define KEYRING_FILE_HEADER_LEN 16 @@ -183,7 +184,7 @@ static void process_file(const char *fna to_decrypt = (unsigned char *) mem_alloc(crypto_size); count = fread(to_decrypt, crypto_size, 1, fp); assert(count == 1); - printf("%s:$keyring$", fname); + printf("%s:$keyring$", basename(fname)); print_hex(salt, 8); printf("*%d*%d*%d*", hash_iterations, crypto_size, 0); print_hex(to_decrypt, crypto_size); diff -urpN JohnTheRipper.orig/src/misc.c JohnTheRipper/src/misc.c --- JohnTheRipper.orig/src/misc.c 2013-04-14 12:16:28.872596691 +0000 +++ JohnTheRipper/src/misc.c 2013-04-15 00:38:18.764504612 +0000 @@ -241,3 +241,34 @@ char *jtr_basename(const char *name) { static char buf[PATH_BUFFER_SIZE+1]; return jtr_basename_r(name, buf); } + +char *strip_suffixes(const char *src, const char *suffixes[], int count) +{ + int i, suflen, retlen, done; + static char ret[PATH_BUFFER_SIZE + 1]; + + done = ret[0] = 0; + if (src == NULL) + return ret; + + strnzcpy(ret, src, sizeof(ret)); + if (suffixes == NULL) + return ret; + + while (done == 0) { + done = 1; + for (i = 0; i < count; i++) { + if (!suffixes[i] || !*suffixes[i]) + continue; + retlen = strlen(ret); + suflen = strlen(suffixes[i]); + if (retlen >= suflen && !strcmp(&ret[retlen - suflen], suffixes[i])) { + ret[retlen - suflen] = 0; + done = 0; + } + } + } + return ret; +} + + diff -urpN JohnTheRipper.orig/src/misc.h JohnTheRipper/src/misc.h --- JohnTheRipper.orig/src/misc.h 2013-04-14 12:16:28.880596691 +0000 +++ JohnTheRipper/src/misc.h 2013-04-15 00:53:56.404502674 +0000 @@ -103,6 +103,10 @@ extern char *jtr_basename_r(const char * #undef basename #define basename(a) jtr_basename(a) +/* + * Removes suffixes frome src. + */ +extern char *strip_suffixes(const char *src, const char *suffixes[], int count); /* * Converts a string to lowercase. diff -urpN JohnTheRipper.orig/src/mozilla2john.c JohnTheRipper/src/mozilla2john.c --- JohnTheRipper.orig/src/mozilla2john.c 2013-04-14 12:16:28.872596691 +0000 +++ JohnTheRipper/src/mozilla2john.c 2013-04-15 01:14:32.184500116 +0000 @@ -47,6 +47,8 @@ static void process_path(char *path) unsigned char data2[512]; SECItem secPreHash; SECItem pkcs5_pfxpbe; + const char *extension[]={".db"}; + char *fname; if(stat(path, &sb) == 0) { if(S_ISDIR(sb.st_mode)) { @@ -84,7 +86,8 @@ static void process_path(char *path) fprintf (stderr, "%s : no Master Password set!\n", path); return; } - printf("%s:$mozilla$*%d*%d*%d*",path, keyCrackData.version, keyCrackData.saltLen, keyCrackData.nnLen); + fname = strip_suffixes(basename(path),extension,1); + printf("%s:$mozilla$*%d*%d*%d*",fname, keyCrackData.version, keyCrackData.saltLen, keyCrackData.nnLen); for (i = 0; i < keyCrackData.saltLen; i++) printf("%c%c", itoa16[ARCH_INDEX(keyCrackData.salt[i] >> 4)], itoa16[ARCH_INDEX(keyCrackData.salt[i] & 0x0f)]); diff -urpN JohnTheRipper.orig/src/pfx2john.c JohnTheRipper/src/pfx2john.c --- JohnTheRipper.orig/src/pfx2john.c 2013-04-14 12:16:28.884596691 +0000 +++ JohnTheRipper/src/pfx2john.c 2013-04-15 01:58:51.400494615 +0000 @@ -66,6 +66,8 @@ static void process_file(const char *fil unsigned char buffer[LINE_BUFFER_SIZE]; BIO* in = NULL; PKCS12 *p12 = NULL; + const char *ext[] = {".p12",".pfx"}; + char *fname; if (!(pfxfile = fopen(filename, "rb"))) { fprintf(stderr, "! %s : %s\n", filename, strerror(errno)); @@ -85,7 +87,8 @@ static void process_file(const char *fil return; } count = fread(buffer, 1, LINE_BUFFER_SIZE, pfxfile); - printf("%s:$pfx$*%d*", filename, count); + fname = strip_suffixes(basename(filename), ext, 2); + printf("%s:$pfx$*%d*", fname, count); for (i = 0; i < count; i++) { printf("%c%c", itoa16[ARCH_INDEX(buffer[i] >> 4)], itoa16[ARCH_INDEX(buffer[i] & 0x0f)]); diff -urpN JohnTheRipper.orig/src/putty2john.c JohnTheRipper/src/putty2john.c --- JohnTheRipper.orig/src/putty2john.c 2013-04-14 12:16:28.876596691 +0000 +++ JohnTheRipper/src/putty2john.c 2013-04-15 02:01:10.952494326 +0000 @@ -19,6 +19,7 @@ #include #include #include "memory.h" +#include "misc.h" #define smalloc(z) safemalloc(z,1) #define snmalloc safemalloc @@ -129,7 +130,7 @@ typedef struct Filename { #define PASSPHRASE_MAXLEN 512 static char header[40], *b, *encryption, *comment, *mac; -static const char *error = NULL; +static const char *putty_error = NULL; static int i, is_mac, old_fmt; static char alg[8]; static int cipher, cipherblk; @@ -235,7 +236,7 @@ static int init_LAME(const Filename *fil fp = fopen(filename->path, "rb" ); if (!fp) { - error = "can't open file"; + putty_error = "can't open file"; goto error; } @@ -249,10 +250,10 @@ static int init_LAME(const Filename *fil // old_keyfile_warning(); old_fmt = 1; } else { - error = "not a PuTTY SSH-2 private key"; + putty_error = "not a PuTTY SSH-2 private key"; goto error; } - error = "file format error"; + putty_error = "file format error"; if ((b = read_body(fp)) == NULL) goto error; /* Select key algorithm structure. */ @@ -340,8 +341,10 @@ static void print_hex(unsigned char *str printf("%02x", str[i]); } -static void LAME_ssh2_load_userkey(char *filename, const char **errorstr) +static void LAME_ssh2_load_userkey(char *path, const char **errorstr) { + const char *ext[] = {".ppk"}; + char *fname; /* * Decrypt the private blob. */ @@ -351,7 +354,8 @@ static void LAME_ssh2_load_userkey(char } { - printf("%s:$putty$%d*%d*%d*%d*%s*%d*", filename, cipher,cipherblk, is_mac, old_fmt, mac, public_blob_len); + fname = strip_suffixes(basename(path), ext, 1); + printf("%s:$putty$%d*%d*%d*%d*%s*%d*", fname, cipher,cipherblk, is_mac, old_fmt, mac, public_blob_len); print_hex(public_blob, public_blob_len); printf("*%d*", private_blob_len); print_hex(private_blob, private_blob_len); @@ -591,7 +595,7 @@ int putty2john(int argc, char **argv) int i; if (argc < 2) { - printf( "Usage: putty2john [PuTTY-Private-Key-File(s)]\n"); + printf( "Usage: putty2john [.ppk PuTTY-Private-Key-File(s)]\n"); exit(1); } diff -urpN JohnTheRipper.orig/src/pwsafe2john.c JohnTheRipper/src/pwsafe2john.c --- JohnTheRipper.orig/src/pwsafe2john.c 2013-04-14 12:16:28.880596691 +0000 +++ JohnTheRipper/src/pwsafe2john.c 2013-04-15 01:33:38.808497744 +0000 @@ -21,6 +21,7 @@ #include #include #include "stdint.h" +#include "misc.h" static char *magic = "PWS3"; @@ -49,6 +50,7 @@ static void process_file(const char *fil int count; unsigned char buf[32]; unsigned int iterations; + const char *ext[] = {".psafe3"}; if (!(fp = fopen(filename, "rb"))) { fprintf(stderr, "! %s: %s\n", filename, strerror(errno)); @@ -64,7 +66,7 @@ static void process_file(const char *fil assert(count == 1); iterations = fget32(fp); - printf("%s:$pwsafe$*3*", filename); + printf("%s:$pwsafe$*3*", strip_suffixes(basename(filename), ext, 1)); print_hex(buf, 32); printf("*%d*", iterations); count = fread(buf, 32, 1, fp); diff -urpN JohnTheRipper.orig/src/ssh2john.c JohnTheRipper/src/ssh2john.c --- JohnTheRipper.orig/src/ssh2john.c 2013-04-14 12:16:28.876596691 +0000 +++ JohnTheRipper/src/ssh2john.c 2013-04-15 01:29:53.168498211 +0000 @@ -121,7 +121,7 @@ static void process_file(const char *fil } /* key has been verified */ count = fread(buffer, 1, LINE_BUFFER_SIZE, keyfile); - printf("%s:$ssh2$", filename); + printf("%s:$ssh2$", basename(filename)); for (i = 0; i < count; i++) { printf("%c%c", itoa16[ARCH_INDEX(buffer[i] >> 4)], itoa16[ARCH_INDEX(buffer[i] & 0x0f)]);