Skip to content

Commit e90d000

Browse files
committed
Added 9.00 Full Support
1 parent 3154200 commit e90d000

3 files changed

Lines changed: 166 additions & 7 deletions

File tree

prosper0gdb/offsets.c

Lines changed: 95 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -2503,6 +2503,100 @@ DEF(lapic_map, 0x28cf838)
25032503
#include "offset_list.txt"
25042504
END_FW()
25052505

2506+
START_FW(900)
2507+
DEF(allproc, 0x2755d50)
2508+
DEF(idt, 0x2d94300)
2509+
DEF(gdt_array, 0x2d955e0)
2510+
DEF(tss_array, 0x2d96fe0)
2511+
DEF(pcpu_array, 0x2da8f00)
2512+
DEF(doreti_iret, -0xa52e93)
2513+
DEF(add_rsp_iret, doreti_iret - 7)
2514+
DEF(swapgs_add_rsp_iret, doreti_iret - 10)
2515+
DEF(rep_movsb_pop_rbp_ret, -0xa167e6)
2516+
DEF(rdmsr_start, -0xa545ca)
2517+
DEF(wrmsr_ret, -0xa5599c)
2518+
DEF(nop_ret, wrmsr_ret + 2)
2519+
DEF(dr2gpr_start, -0xa59fd3)
2520+
DEF(gpr2dr_1_start, -0xa59eba)
2521+
DEF(gpr2dr_2_start, -0xa59dc7)
2522+
DEF(mov_cr3_rax_mov_ds, -0xa59a29)
2523+
DEF(mov_rax_cr3, -0x3C683F)
2524+
DEF(cpu_switch, -0xa5a1c0)
2525+
DEF(mprotect_fix_start, -0x98e1a3)
2526+
DEF(mprotect_fix_end, mprotect_fix_start+6)
2527+
2528+
DEF(mmap_self_fix_1_start, 0x0)
2529+
DEF(mmap_self_fix_1_end, mmap_self_fix_1_start+2)
2530+
DEF(mmap_self_fix_2_start, 0x0)
2531+
DEF(mmap_self_fix_2_end, mmap_self_fix_2_start+2)
2532+
2533+
DEF(aslr_fix_start, -0x8D9064)
2534+
DEF(aslr_fix_end, aslr_fix_start+2)
2535+
2536+
DEF(sigaction_fix_start, -0x72b4b0)
2537+
DEF(sigaction_fix_end, -0x72b491)
2538+
DEF(sysents, 0x1aac10)
2539+
DEF(sysents_ps4, 0x1a2600)
2540+
DEF(sysentvec, 0xdba648)
2541+
DEF(sysentvec_ps4, 0xdba7c0)
2542+
DEF(sceSblServiceMailbox, -0x6e7a10)
2543+
DEF(sceSblAuthMgrSmIsLoadable2, -0x928ce0)
2544+
DEF(mdbg_call_fix, -0x68a599)
2545+
DEF(syscall_before, -0x87e2b1)
2546+
DEF(syscall_after, -0x87e28d)
2547+
DEF(malloc, -0xbd1f0)
2548+
DEF(M_something, 0x14070d0)
2549+
DEF(loadSelfSegment_epilogue, -0x928551)
2550+
DEF(loadSelfSegment_watchpoint, -0x2F9228)
2551+
DEF(loadSelfSegment_watchpoint_lr, -0x928827)
2552+
DEF(decryptSelfBlock_watchpoint_lr, -0x9284BE)
2553+
DEF(decryptSelfBlock_epilogue, -0x928400)
2554+
//DEF(decryptMultipleSelfBlocks_watchpoint_lr, -0x92FF81) //403
2555+
DEF(decryptMultipleSelfBlocks_watchpoint_lr, -0x927D88) //505
2556+
DEF(decryptMultipleSelfBlocks_epilogue, -0x927B57)
2557+
DEF(sceSblServiceMailbox_lr_verifyHeader, -0x9289c7)
2558+
DEF(sceSblServiceMailbox_lr_loadSelfSegment, -0x928653)
2559+
DEF(sceSblServiceMailbox_lr_decryptSelfBlock, -0x92809d)
2560+
DEF(sceSblServiceMailbox_lr_decryptMultipleSelfBlocks, -0x9278B3)
2561+
DEF(sceSblServiceMailbox_lr_sceSblAuthMgrSmFinalize, -0x928d58)
2562+
DEF(sceSblServiceMailbox_lr_verifySuperBlock, -0x9CF350)
2563+
DEF(sceSblServiceMailbox_lr_sceSblPfsClearKey_1, -0x9CF8D1)
2564+
DEF(sceSblServiceMailbox_lr_sceSblPfsClearKey_2, -0x9CF865)
2565+
DEF(sceSblServiceMailbox_lr_npdrm_cmd_5, -0x34ACA3)
2566+
DEF(sceSblServiceMailbox_lr_npdrm_cmd_6, -0x34AA75)
2567+
//DEF(sceSblPfsSetKeys, -0x9D5930) //403
2568+
DEF(sceSblPfsSetKeys, -0x9D0440)
2569+
DEF(sceSblServiceCryptAsync, -0x970020)
2570+
DEF(sceSblServiceCryptAsync_deref_singleton, -0x96FFE3)
2571+
DEF(copyin, -0xa170b0)
2572+
DEF(copyout, -0xa17160)
2573+
DEF(crypt_message_resolve, -0x4AF100)
2574+
DEF(justreturn, -0xa530c0)
2575+
DEF(justreturn_pop, justreturn+8)
2576+
DEF(mini_syscore_header, 0xe89518)
2577+
DEF(pop_all_iret, -0xa52ef2)
2578+
DEF(pop_all_except_rdi_iret, pop_all_iret+4)
2579+
DEF(push_pop_all_iret, -0x9f3dc0)
2580+
DEF(kernel_pmap_store, 0x2d28b78)
2581+
DEF(crypt_singleton_array, 0x2c6da30)
2582+
DEF(security_flags, 0xD72064)
2583+
DEF(targetid, 0xD7206D)
2584+
DEF(qa_flags, 0xD72088)
2585+
DEF(utoken, 0xD720F0)
2586+
DEF(mov_rax_cr0, -0xa5a121)
2587+
DEF(mov_cr0_rax, -0xa5a11c)
2588+
DEF(mov_rdi_cr2, -0xa5634a)
2589+
DEF(lgdt_rdi, -0xa169c0)
2590+
DEF(lidt_lldt, -0xa59971)
2591+
DEF(ltr_ax, -0xa5994f)
2592+
DEF(kproc_shutdown, -0x9f00d0)
2593+
DEF(s_shutdown_final, 0x36b115)
2594+
DEF(eventhandler_register, -0x55ea00)
2595+
DEF(strlen_trap, -0x47da88)
2596+
DEF(lapic_map, 0x27af838)
2597+
#include "offset_list.txt"
2598+
END_FW()
2599+
25062600
void* dlsym(void*, const char*);
25072601

25082602
int set_offsets(void)
@@ -2537,6 +2631,7 @@ int set_offsets(void)
25372631
case 0x820: set_offsets_820(); break;
25382632
case 0x840: set_offsets_840(); break;
25392633
case 0x860: set_offsets_860(); break;
2634+
case 0x900: set_offsets_900(); break;
25402635
#endif
25412636
default: return -1;
25422637
}

ps5-kstuff/main.c

Lines changed: 64 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -1245,6 +1245,39 @@ static struct shellcore_patch shellcore_patches_860[] = {
12451245
{0x6BA4F0, "\x48\x31\xc0\xc3", 4}, // PKG Installer
12461246
};
12471247

1248+
static struct shellcore_patch shellcore_patches_900[] = {
1249+
{0xC0F813, "\x52\xeb\xe2", 3}, //push rdx; jmp 0xC0F7F8
1250+
{0xC0F7F8, "\xe8\xe3\xf8\xff\xff\x58\xc3", 7}, //call 0xC0F0E0; pop rax; ret
1251+
{0xC0F0C6, "\xe9\x06\x00\x00\x00", 5}, // jmp 0xC0F0D1
1252+
{0xC0F0D1, "\x31\xc0\x50\xe8\x07\x00\x00\x00\x58\xc3", 10}, //xor eax, eax; push rax; call 0xC0F0E0; pop rax; ret
1253+
{0x6F1C08, "\xeb\x04", 2},
1254+
{0x30E1CF, "\xeb\x04", 2},
1255+
{0x30E59F, "\xeb\x04", 2},
1256+
{0x7118CB, "\xeb", 1},
1257+
{0x6FA165, "\x90\xe9", 2},
1258+
{0x712035, "\xeb", 1},
1259+
{0x71401F, "\x61\x01\x00\x00", 4}, // 0x714184
1260+
{0x209DD1, "\xe8\x0a\x05\x60\x00\x31\xc9\xff\xc1\xe9\x84\x03\x00\x00", 14}, // call 0x80A2E0; xor ecx; inc ecx; jmp 0x20A163
1261+
{0x20A163, "\x83\xf8\x02\x0f\x43\xc1\xe9\x01\xf4\xff\xff", 11},// cmp eax, 2; cmovae eax, ecx; jmp 0x20956F
1262+
{0x209371, "\xe9\x5b\x0a\x00\x00", 5}, // jmp 0x209DD1
1263+
1264+
{0x734300, "\xC3", 1}, // callback to sceRifManagerRegisterActivationCallback
1265+
1266+
{0x16A4690, "\x31\xc0\xc3", 3}, // VR2 Min Fw Check
1267+
{0xA8EA86, "\xeb\x03", 2}, // disable game error message
1268+
{0x3068EB, "\x90\xe9", 2}, // PS4 Disc Installer Patch 1
1269+
{0x306969, "\x90\xe9", 2}, // PS5 Disc Installer Patch 1
1270+
{0x306A6C, "\xeb", 1}, // PS4 PKG Installer Patch 1
1271+
{0x306B40, "\xeb", 1}, // PS5 PKG Installer Patch 1
1272+
{0x306F46, "\x90\xe9", 2}, // PS4 PKG Installer Patch 2
1273+
{0x3070ED, "\xeb", 1}, // PS5 PKG Installer Patch 2
1274+
{0x3074AE, "\x90\xe9", 2}, // PS4 PKG Installer Patch 3
1275+
{0x307541, "\x90\xe9", 2}, // PS5 PKG Installer Patch 3
1276+
{0x6F088A, "\xeb", 1}, // PS4 PKG Installer Patch 4
1277+
{0x6F37C4, "\xeb", 1}, // PS5 PKG Installer Patch 4
1278+
{0x6F6E40, "\x48\x31\xc0\xc3", 4}, // PKG Installer
1279+
};
1280+
12481281
extern char _start[];
12491282

12501283
static void relocate_shellcore_patches(struct shellcore_patch* patches, size_t n_patches)
@@ -1336,6 +1369,7 @@ static const struct shellcore_patch* get_shellcore_patches(size_t* n_patches)
13361369
FW(820);
13371370
FW(840);
13381371
FW(860);
1372+
FW(900);
13391373
default:
13401374
*n_patches = 1;
13411375
return 0;
@@ -1961,12 +1995,9 @@ static struct PARASITES(14) parasites_800 = {
19611995
{-0x2ED410, RAX},
19621996
{-0x2ED17B, RAX},
19631997
{-0x2ECEAD, RAX},
1964-
//{-0x2ECB76, RDX},
1965-
{-0x2ECB76, RAX},
1966-
//{-0x2ECB6A, RCX},
1967-
{-0x2ECB6A, RAX},
1998+
{-0x2ECB76, RAX},
1999+
{-0x2ECB6A, RAX},
19682000
{-0x9ED0EC, RDI},
1969-
//{-0x2ECFE7, R10},
19702001
{-0x2ECFE7, RAX},
19712002
/* unsorted parasites */
19722003
{-0x49D6BF, RAX},
@@ -2049,6 +2080,31 @@ static struct PARASITES(14) parasites_860 = {
20492080
}
20502081
};
20512082

2083+
static struct PARASITES(14) parasites_900 = {
2084+
.lim_syscall = 3,
2085+
.lim_fself = 12,
2086+
.lim_total = 14,
2087+
.parasites = {
2088+
/* syscall parasites */
2089+
{-0x87E7BE, R13},
2090+
{-0x3BC35C, RSI},
2091+
{-0x3BC31C, RSI},
2092+
/* fself parasites */
2093+
{-0x2F9016, RAX},
2094+
{-0x2F9B68, RAX},
2095+
{-0x2F9A30, RAX},
2096+
{-0x2F979B, RAX},
2097+
{-0x2F94CD, RAX},
2098+
{-0x2F9196, RAX},
2099+
{-0x2F918A, RAX},
2100+
{-0xA1730C, RDI},
2101+
{-0x2F9607, RAX},
2102+
/* unsorted parasites */
2103+
{-0x4AEE0F, RAX},
2104+
{-0x4AEE0F, R15},
2105+
}
2106+
};
2107+
20522108
static struct parasite_desc* get_parasites(size_t* desc_size)
20532109
{
20542110
uint32_t ver = r0gdb_get_fw_version() >> 16;
@@ -2133,6 +2189,9 @@ static struct parasite_desc* get_parasites(size_t* desc_size)
21332189
case 0x860:
21342190
*desc_size = sizeof(parasites_860);
21352191
return (void*)&parasites_860;
2192+
case 0x900:
2193+
*desc_size = sizeof(parasites_900);
2194+
return (void*)&parasites_900;
21362195
default:
21372196
return 0;
21382197
#else

ps5-kstuff/uelf/fself.c

Lines changed: 7 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -173,7 +173,13 @@ int try_handle_fself_mailbox(uint64_t* regs, uint64_t lr)
173173
else if(lr == (uint64_t)sceSblServiceMailbox_lr_loadSelfSegment)
174174
{
175175
uint64_t ctx[8];
176-
copy_from_kernel(ctx, (fwver >= 0x800) ? kpeek64(regs[RBP] - 240) : regs[RBX], sizeof(ctx));
176+
copy_from_kernel(
177+
ctx,
178+
(fwver >= 0x900) ? regs[R14] :
179+
(fwver >= 0x800 && fwver <= 0x860) ? kpeek64(regs[RBP] - 240) :
180+
regs[RBX],
181+
sizeof(ctx)
182+
);
177183

178184
if(is_header_fself(ctx[7], (uint32_t)ctx[1], 0, 0, 0, 0))
179185
{
@@ -184,7 +190,6 @@ int try_handle_fself_mailbox(uint64_t* regs, uint64_t lr)
184190
else if(lr == (uint64_t)sceSblServiceMailbox_lr_decryptSelfBlock)
185191
{
186192
uint64_t ctx[8];
187-
188193
copy_from_kernel(
189194
ctx,
190195
(fwver >= 0x800) ? regs[R12] :

0 commit comments

Comments
 (0)