static int lv2_unpatch_bdvdemu_431(void) { int n; int flag = 0; char * mem = temp_buffer; memset(mem, 0, 0x116c); sys8_memcpy( (u64) mem, LV2MOUNTADDR_431, 0x116c); for(n = 0; n< 0x116c; n+= 0x118) { if(!memcmp(mem + n, "CELL_FS_IOS:PATA0_BDVD_DRIVE", 29)) { if(!memcmp(mem + n + 0x69, "temp_bdvd", 10)) { sys8_memcpy(LV2MOUNTADDR_431 + n + 0x69, (u64) "dev_bdvd\0", 10); flag++; } } else if(!noBDVD && !memcmp(mem + n, "CELL_FS_IOS:USB_MASS_STORAGE0", 29)) { if(!memcmp(mem + n + 0x69, "dev_bdvd", 9) || !memcmp(mem + n + 0x69, "temp_usb", 9)) { sys8_memcpy(LV2MOUNTADDR_431 + n + 0x69, (u64) (mem + n + 0x79), 11); sys8_memset(LV2MOUNTADDR_431 + n + 0x79, 0ULL, 12); flag+=10; } } else if(noBDVD && !memcmp(mem + n, "CELL_FS_IOS:USB_MASS_STORAGE0", 29)) { if(!memcmp(mem + n + 0x69, "dev_bdvd", 9) && !memcmp(mem + n + 0x79, "esp_bdvd", 9) && peekq(0x80000000007EF028ULL)==0x494F533A50415441ULL) { sys8_memcpy(LV2MOUNTADDR_431 + n, 0x80000000007EF020ULL , 0x108); _poke32(UMOUNT_SYSCALL_OFFSET, 0xFBA100E8); // UMOUNT RESTORE pokeq(0x80000000007EF028ULL, 0ULL); flag+=10; } } else if(!memcmp(mem + n, "CELL_FS_UTILITY:HDD0", 21)) { if(!memcmp(mem + n + 0x69, "dev_bdvd", 9) && !memcmp(mem + n + 0x79, "esp_bdvd", 9) && peekq(0x80000000007EF028ULL)==0x494F533A50415441ULL) { sys8_memcpy(LV2MOUNTADDR_431 + n, 0x80000000007EF020ULL , 0x108); _poke32(UMOUNT_SYSCALL_OFFSET, 0xFBA100E8); // UMOUNT RESTORE pokeq(0x80000000007EF028ULL, 0ULL); flag+=10; } } } if((mem[0] == 0) && (flag == 0)) return -1; else return flag; }
static int lv2_unpatch_bdvdemu_421(void) { int n; int flag = 0; char * mem = temp_buffer; memset(mem, 0, 0x10 * 0x110); sys8_memcpy((u64) mem, LV2MOUNTADDR_421, 0x10 * 0x110); sys8_memcpy((u64) (mem + 0x1200), 0x80000000007EF020ULL , LV2MOUNTADDR_421_CSIZE); for(n = 0; n< 0x10f0; n+= LV2MOUNTADDR_421_ESIZE) { if(!memcmp(mem + n, "CELL_FS_UTILITY:HDD1", 21) && mem[n-9]== 1 && mem[n-5]== 1) { if(!memcmp(mem + n + 0x69, "temp_bdvd", 10)) { sys8_memcpy(LV2MOUNTADDR_421 + n + 0x69, (u64) "dev_bdvd\0", 10); flag++; } } if(!memcmp(mem + n, "CELL_FS_IOS:PATA0_BDVD_DRIVE", 29) && mem[n-9]== 1 && mem[n-5]== 1) { if(!memcmp(mem + n + 0x69, "temp_bdvd", 10)) { sys8_memcpy(LV2MOUNTADDR_421 + n + 0x69, (u64) "dev_bdvd\0", 10); flag++; } } if(!memcmp(mem + n, "CELL_FS_IOS:USB_MASS_STORAGE0", 29) && mem[n-9]== 1 && mem[n-5]== 1) { if(!memcmp(mem + n + 0x69, "dev_bdvd", 9) || !memcmp(mem + n + 0x69, "temp_usb", 9)) { sys8_memcpy(LV2MOUNTADDR_421 + n + 0x69, (u64) (mem + n + 0x79), 11); sys8_memset(LV2MOUNTADDR_421 + n + 0x79, 0ULL, 12); flag += 10; } } if(!memcmp(mem + n, "CELL_FS_UTILITY:HDD0", 21) && mem[n-9]== 1 && mem[n-5]== 1) { if(!memcmp(mem + n + 0x69, "dev_bdvd", 9) && !memcmp(mem + n + 0x79, "esp_bdvd", 9) && peekq(0x80000000007EF000ULL)!=0) { mem[0x1200+ 0xc -1] = mem[n-1]; sys8_memcpy(LV2MOUNTADDR_421 + (u64) (n - 0xc), (u64) (mem + 0x1200) , (u64) LV2MOUNTADDR_421_CSIZE); flag += 10; } } } for(n = 0; n < 100; n++) { _poke32(UMOUNT_SYSCALL_OFFSET, 0xFBA100E8); // UMOUNT RESTORE usleep(1000); } pokeq(0x80000000007EF000ULL, 0ULL); if((mem[0] == 0) && (flag == 0)) return -1; else return flag; }