Beispiel #1
0
wbfs_t*wbfs_open_hd(
					rw_sector_callback_t read_hdsector,
					rw_sector_callback_t write_hdsector,
#ifdef WIN32
					close_callback_t close_hd,
#endif
					void *callback_data,
		    int hd_sector_size, 
#ifdef WIN32
					int num_hd_sector,
#else
		    int num_hd_sector __attribute((unused)), 
#endif
		    int reset)
{
	int i
#ifdef UNUSED_STUFF
	= num_hd_sector 
#endif
	, ret;
	u8 *ptr,*tmp_buffer = wbfs_ioalloc(hd_sector_size);
	u8 part_table[16*4];
	ret = read_hdsector(callback_data,0,1,tmp_buffer);
	if(ret)
		return 0;
	//find wbfs partition
	wbfs_memcpy(part_table,tmp_buffer+0x1be,16*4);
	ptr = part_table;
	for(i=0;i<4;i++,ptr+=16)
	{
		u32 part_lba = read_le32_unaligned(ptr+0x8);
		wbfs_head_t *head = (wbfs_head_t *)tmp_buffer;
#ifdef UNUSED_STUFF
		ret = 
#endif
				read_hdsector(callback_data,part_lba,1,tmp_buffer);
		// verify there is the magic.
		if (head->magic == wbfs_htonl(WBFS_MAGIC))
		{
					wbfs_t *p = wbfs_open_partition(	read_hdsector, 
														write_hdsector,
#ifdef WIN32
														close_hd,
#endif
														callback_data, 
														hd_sector_size, 
														0, 
														part_lba,reset
														);
					return p;
		}
	}
	if(reset)// XXX make a empty hd partition..
	{
	}
	return 0;
}
Beispiel #2
0
static void _decrypt_title_key(u8 *tik, u8 *title_key)
{
	u8 common_key[16] = {
		0xeb, 0xe4, 0x2a, 0x22, 0x5e, 0x85, 0x93, 0xe4, 0x48, 0xd9, 0xc5, 0x45,
		0x73, 0x81, 0xaa, 0xf7
	};
	u8 iv[16];

	wbfs_memset(iv, 0, sizeof iv);
	wbfs_memcpy(iv, tik + 0x01dc, 8);
	aes_set_key(common_key);
	//_aes_cbc_dec(common_key, iv, tik + 0x01bf, 16, title_key);
	aes_decrypt(iv, tik + 0x01bf, title_key, 16);
}
Beispiel #3
0
u32 wbfs_get_list( u8 **headers,u32 num)
{
        u32 i;
        u32 count = 0;
        for(i=0;i<max_disc;i++)
        {
                if (head->disc_table[i])
                {
                        read_sectors(1+i*header_size/512,header_size/512,header);
                        u32 magic=wbfs_be32(header+24);
                        if(magic!=0x5D1C9EA3)
                                continue;
                        headers[i] = wbfs_malloc(header_size);
                        wbfs_memcpy(headers[i],header,header_size);
                        if(++count == num)
                                return count;
                }
        }
        return count;
}