Exemplo n.º 1
0
bool save_passwords(void)
{
    password *pwd;
    SceUID fd;
    char path[PATH_MAX];
    u32 magic;

    STRCPY_S(path, scene_appdir());
    STRCAT_S(path, "password.lst");

    rc4_prepare_key((u8 *) CRYPT_KEY, sizeof(CRYPT_KEY) - 1, &g_key);

    fd = sceIoOpen(path, PSP_O_WRONLY | PSP_O_CREAT | PSP_O_TRUNC, 0777);

    if (fd < 0) {
        return false;
    }

    magic = CRYPT_MAGIC;
    sceIoWrite(fd, &magic, sizeof(magic));

    for (pwd = g_pwd_head.next; pwd != NULL; pwd = pwd->next) {
        write_chars(fd, pwd->b->ptr, strlen(pwd->b->ptr));
        write_chars(fd, "\r\n", sizeof("\r\n") - 1);
    }

    sceIoClose(fd);

    return true;
}
Exemplo n.º 2
0
int BootDecryptEEPROM(EEPROMDATA *eeprom) {
	BYTE baKeyHash[20];
	BYTE baDataHashConfirm[20];
	BYTE baEepromDataLocalCopy[0x30];
	struct rc4_key RC4_key;
       	int version = 0; 
       	int counter;
	int n,f;        
        
        // Static Version change not included yet
        
	for (counter=9;counter<13;counter++)
	{
    		memset(&RC4_key,0,sizeof(rc4_key));
		memcpy(&baEepromDataLocalCopy[0], eeprom, 0x30);
                
                // Calculate the Key-Hash
		HMAC_hdd_calculation(counter, baKeyHash, &baEepromDataLocalCopy[0], 20, NULL);

		//initialize RC4 key
		rc4_prepare_key(baKeyHash, 20, &RC4_key);

        	//decrypt data (from eeprom) with generated key
		rc4_crypt(&baEepromDataLocalCopy[20],8,&RC4_key);		//confounder of some kind?
		rc4_crypt(&baEepromDataLocalCopy[28],20,&RC4_key);		//"real" data
                
                // Calculate the Confirm-Hash
		HMAC_hdd_calculation(counter, baDataHashConfirm, &baEepromDataLocalCopy[20], 8, &baEepromDataLocalCopy[28], 20, NULL);

		f=0;
		for(n=0;n<0x14;n++) {
				if(baEepromDataLocalCopy[n]!=baDataHashConfirm[n]) f=1;
		}
		
		if (f==0) { 
			// Confirm Hash is correct  
			// Copy actual Xbox Version to Return Value
			version=counter;
			// exits the loop
			break;
			
		}
		
		       	
	
	}
	
	//copy out HDKey
	memcpy(eeprom,&baEepromDataLocalCopy[0],0x30);

	return version;
}
Exemplo n.º 3
0
u32 BootHddKeyGenerateEepromKeyData(
		u8 *pbEeprom_data,
		u8 *pbResult
		
) {

	u8 baKeyHash[20];
	u8 baDataHashConfirm[20];
	u8 baEepromDataLocalCopy[0x30];
	struct rc4_key RC4_key;
       	int version = 0; 
       	int counter;
        
	// Static Version change not included yet
        
	for (counter=9;counter<13;counter++)
	{
    		memset(&RC4_key,0,sizeof(rc4_key));
		memcpy(&baEepromDataLocalCopy[0], pbEeprom_data, 0x30);
                
                // Calculate the Key-Hash
		HMAC_hdd_calculation(counter, baKeyHash, &baEepromDataLocalCopy[0], 20, NULL);

		//initialize RC4 key
		rc4_prepare_key(baKeyHash, 20, &RC4_key);

        	//decrypt data (from eeprom) with generated key
		rc4_crypt(&baEepromDataLocalCopy[20],8,&RC4_key);		//confounder of some kind?
		rc4_crypt(&baEepromDataLocalCopy[28],20,&RC4_key);		//"real" data
                
                // Calculate the Confirm-Hash
		HMAC_hdd_calculation(counter, baDataHashConfirm, &baEepromDataLocalCopy[20], 8, &baEepromDataLocalCopy[28], 20, NULL);
		
		if (!memcmp(baEepromDataLocalCopy,baDataHashConfirm,0x14)) {
			// Confirm Hash is correct  
			// Copy actual Xbox Version to Return Value
			version=counter;
			// exits the loop
			break;
		}
	}
	
	//copy out HDKey
	memcpy(pbResult,&baEepromDataLocalCopy[28],16);
	
	return version;
}
Exemplo n.º 4
0
bool load_passwords(void)
{
    SceUID fd;
    char linebuf[LINEBUF], path[PATH_MAX];
    rc4_key *pkey;

    STRCPY_S(path, scene_appdir());
    STRCAT_S(path, "password.lst");

    if (is_encrypted(path)) {
        rc4_prepare_key((u8 *) CRYPT_KEY, sizeof(CRYPT_KEY) - 1, &g_key);
        pkey = &g_key;
    } else {
        pkey = NULL;
    }

    fd = sceIoOpen(path, PSP_O_RDONLY, 0);

    if (fd < 0) {
        return false;
    }

    if (pkey != NULL) {
        sceIoLseek(fd, 4, PSP_SEEK_SET);
    }

    linebuf[sizeof(linebuf) - 1] = '\0';

    while (read_lines(fd, linebuf, sizeof(linebuf) - 1, pkey) >= 0) {
        add_password(linebuf);
    }

    sceIoClose(fd);

    return true;
}