Ejemplo n.º 1
0
static void *get_salt(char *ciphertext)
{
	int i;
	char *p;
	char *ctcopy = strdup(ciphertext);
	char *keeptr = ctcopy;
	ctcopy += 9;	/* skip over "$vnc$*" */
	salt_struct = mem_alloc_tiny(sizeof(struct custom_salt), MEM_ALIGN_WORD);
	p = strtok(ctcopy, "*");
	salt_struct->keyCrackData.version = atoi(p);
	p = strtok(NULL, "*");
	salt_struct->keyCrackData.saltLen = atoi(p);
	p = strtok(NULL, "*");
	salt_struct->keyCrackData.nnLen = atoi(p);
	p = strtok(NULL, "*");
	for (i = 0; i < salt_struct->keyCrackData.saltLen; i++)
		salt_struct->keyCrackData.salt[i] = atoi16[ARCH_INDEX(p[i * 2])]
			* 16 + atoi16[ARCH_INDEX(p[i * 2 + 1])];
	salt_struct->keyCrackData.salt[salt_struct->keyCrackData.saltLen] = 0;
	p = strtok(NULL, "*");
	salt_struct->keyCrackData.oidLen = atoi(p);
	p = strtok(NULL, "*");
	for (i = 0; i < salt_struct->keyCrackData.oidLen; i++)
		salt_struct->keyCrackData.oidData[i] = atoi16[ARCH_INDEX(p[i * 2])]
			* 16 + atoi16[ARCH_INDEX(p[i * 2 + 1])];
	salt_struct->keyCrackData.oidData[salt_struct->keyCrackData.oidLen] =0;
	p = strtok(NULL, "*");
	salt_struct->keyCrackData.encDataLen = atoi(p);
	p = strtok(NULL, "*");
	for (i = 0; i < salt_struct->keyCrackData.encDataLen; i++)
		salt_struct->keyCrackData.encData[i] = atoi16[ARCH_INDEX(p[i * 2])]
			* 16 + atoi16[ARCH_INDEX(p[i * 2 + 1])];
	p = strtok(NULL, "*");
	salt_struct->keyCrackData.globalSaltLen = atoi(p);
	p = strtok(NULL, "*");
	for (i = 0; i < salt_struct->keyCrackData.globalSaltLen; i++)
		salt_struct->keyCrackData.globalSalt[i] = atoi16[ARCH_INDEX(p[i * 2])]
			* 16 + atoi16[ARCH_INDEX(p[i * 2 + 1])];
	// initialize the pkcs5 structure
	salt_struct->saltItem.type = (SECItemType) 0;
	salt_struct->saltItem.len  = salt_struct->keyCrackData.saltLen;
	salt_struct->saltItem.data = salt_struct->keyCrackData.salt;
	salt_struct->paramPKCS5 = nsspkcs5_NewParam(0, &salt_struct->saltItem, 1, &salt_struct->gpbe_param, salt_struct->salt_data);
	if(salt_struct->paramPKCS5 == NULL) {
		fprintf(stderr, "\nFailed to initialize NSSPKCS5 structure");
		exit(0);
	}
	// Current algorithm is
	// SEC_OID_PKCS12_PBE_WITH_SHA1_AND_TRIPLE_DES_CBC
	// Setup the encrypted password-check string
	memcpy(salt_struct->encString, salt_struct->keyCrackData.encData, salt_struct->keyCrackData.encDataLen );
	// Calculate partial sha1 data for password hashing
	SHA1_Init(&salt_struct->pctx);
	SHA1_Update(&salt_struct->pctx, salt_struct->keyCrackData.globalSalt, salt_struct->keyCrackData.globalSaltLen);

	MEM_FREE(keeptr);
	return (void *)salt_struct;
}
Ejemplo n.º 2
0
int FireMasterInit(char *dirProfile)
{
    SECItem saltItem;

	if( CrackKeyData(dirProfile, &keyCrackData) == false)
	{
		exit(0);
	}

	// Initialize the pkcs5 structure...
	saltItem.type = (SECItemType) 0;
	saltItem.len  = keyCrackData.saltLen;
	saltItem.data = keyCrackData.salt;
	paramPKCS5 = nsspkcs5_NewParam(0, &saltItem, 1);

	if( paramPKCS5 == NULL)
	{
		printf("\n Failed to initialize NSSPKCS5 structure");
		exit(0);
   	}

	// Current algorithm is
	// SEC_OID_PKCS12_PBE_WITH_SHA1_AND_TRIPLE_DES_CBC

	// Setup the encrypted password-check string
    memcpy(encString, keyCrackData.encData, keyCrackData.encDataLen );

	if( CheckMasterPassword("") == true )
	{
		printf("\n Master password is not set ...exiting FireMaster \n\n");
		exit(0);
	}

	// Calculate partial sha1 data for password hashing...
    SHA1_Init(&pctx);
	SHA1_Update(&pctx, keyCrackData.globalSalt, keyCrackData.globalSaltLen);

	return true;
}
Ejemplo n.º 3
0
static void process_path(char *path)
{
    int i;
    struct stat sb;
    if(stat(path, &sb) == 0) {
        if(S_ISDIR(sb.st_mode)) {
            fprintf (stderr, "%s : is a directory, expecting key3.db file!\n", path);
            return;
        }
    }
    if(CrackKeyData(path, &keyCrackData) == false) {
        return;
    }
    // initialize the pkcs5 structure
    saltItem.type = (SECItemType) 0;
    saltItem.len  = keyCrackData.saltLen;
    assert(keyCrackData.saltLen < 32);
    assert(keyCrackData.oidLen < 32);
    saltItem.data = keyCrackData.salt;
    struct NSSPKCS5PBEParameter gpbe_param;
    unsigned char salt_data[4096];

    paramPKCS5 = nsspkcs5_NewParam(0, &saltItem, 1, &gpbe_param, salt_data);
    if(paramPKCS5 == NULL) {
        fprintf(stderr, "Failed to initialize NSSPKCS5 structure\n");
        return;
    }
    // Current algorithm is
    // SEC_OID_PKCS12_PBE_WITH_SHA1_AND_TRIPLE_DES_CBC
    // Setup the encrypted password-check string
    memcpy(encString, keyCrackData.encData, keyCrackData.encDataLen);
    // Calculate partial sha1 data for password hashing
    SHA1_Init(&pctx);
    SHA1_Update(&pctx, keyCrackData.globalSalt, keyCrackData.globalSaltLen);
    unsigned char data1[256];
    unsigned char data2[512];
    SECItem secPreHash;
    secPreHash.data = data1;
    memcpy(secPreHash.data + SHA1_LENGTH, saltItem.data, saltItem.len);
    secPreHash.len = saltItem.len + SHA1_LENGTH;
    SECItem pkcs5_pfxpbe;
    pkcs5_pfxpbe.data = data2;
    if(CheckMasterPassword("", &pkcs5_pfxpbe, &secPreHash)) {
        fprintf (stderr, "%s : no Master Password set!\n", path);
        return;
    }
    printf("%s:$mozilla$*%d*%d*%d*",path, 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)]);
    printf("*%d*", keyCrackData.oidLen);
    for (i = 0; i < keyCrackData.oidLen; i++)
        printf("%c%c", itoa16[ARCH_INDEX(keyCrackData.oidData[i] >> 4)],
               itoa16[ARCH_INDEX(keyCrackData.oidData[i] & 0x0f)]);

    printf("*%d*", keyCrackData.encDataLen);
    for (i = 0; i < keyCrackData.encDataLen; i++)
        printf("%c%c", itoa16[ARCH_INDEX(keyCrackData.encData[i] >> 4)],
               itoa16[ARCH_INDEX(keyCrackData.encData[i] & 0x0f)]);
    printf("*%d*", keyCrackData.globalSaltLen);
    for (i = 0; i < keyCrackData.globalSaltLen; i++)
        printf("%c%c", itoa16[ARCH_INDEX(keyCrackData.globalSalt[i] >> 4)],
               itoa16[ARCH_INDEX(keyCrackData.globalSalt[i] & 0x0f)]);
    printf("\n");
}