- C 60%
- Python 39%
- Shell 0.5%
- Makefile 0.5%
| Filename | Latest commit message | Latest commit date |
|---|---|---|
- tls_clienthello: log SNI for every PS5 TLS handshake (helps map which domains need to land in hosts.txt) - /api/authz/v3/oauth/token: return a properly-claimed RS256 JWT so Game Base can init (parses requested scope from the body) - /api/trophy/v1: fake trophySummary (level 247), trophyTitles list (Astro's Playroom / Elden Ring / GoW Ragnarok), trophyGroups, and a set of inside-joke trophies (SSL Slayer / etaWEN PS5 Discord etc.) - sessionManager friends/partySessions: serve a fake 'etaWEN Crew Party' so the hub card has something to show - userProfile: handle /users/.../friends, /availabilities, /basicPresences (plural), all returning sane stubs - catch-all: any unhandled /api/ path on ps5.np.playstation.net returns empty 200 so native modules don't hit 401s |
||
| proxy | ||
| .gitignore | ||
| LICENSE | ||
| Makefile | ||
| README.md | ||
| ssl_pin_bypass.c | ||
ssl-patcher
PS5 payload that disables TLS certificate pinning in libSceHttp / libSceSsl, so HTTPS clients on the console (including SceShellCore's PSN traffic) can be MITM-routed through a local proxy.
How it works
Two pattern-scanned patches:
libSceSsl/sceSslCreateSslConnection— NOPs theor byte ptr [r14+4Dh], 21hinstruction (5 bytes:41 80 4E 4D 21). That instruction sets the sticky pin bit0x100for Sony hostnames (p.*,ps5.*,ps4.*.playstation.net). Once set the bit can't be cleared —sceSslDisableOptionInternalInsecureexplicitly preserves it.libSceHttp/sub_F960(HTTPS init helper) — replacesmov esi, [r12+150h](8 bytes:41 8B B4 24 50 01 00 00) withxor esi, esi+ 6-byte NOP (31 F6 66 0F 1F 44 00 00). The helper callssceSslDisableOptionInternalInsecure(0x3DFF)to strip verify bits, then immediatelysceSslEnableOptionInternal(ctx, template_options)to restore them — zeroing the second arg turns the Enable into a no-op so the Disable actually sticks.
Combined effect: every HTTPS connection built through libSceHttp ends up with SSL context options at 0x400 (just the non-verify preserve bit) instead of 0x4A5 / 0x25A5. Chain validation bits 0x1 / 0x4 / 0x20 are off.
Firmware compatibility
Pattern scans were derived from firmware 10.01 and 5.50. Other firmwares may work — the binaries are pattern-scanned at runtime, so as long as the target instructions are byte-identical in the user's libSceSsl / libSceHttp, the patches apply.
If the patterns have shifted (compiler change, refactor between firmware versions), the scan will fail and the patches won't land. In that case you need to re-derive the byte signatures for that firmware:
- Disassemble
libSceSsl.sprxaroundsceSslCreateSslConnectionand find the equivalentor byte ptr [reg+offset], immthat sets the pin bit. - Disassemble
libSceHttp.sprxand find the function that callssceSslDisableOptionInternalInsecure(0x3DFF)followed bysceSslEnableOptionInternal. Re-derive themovinstruction byte pattern.
Update the byte signatures in ssl_pin_bypass.c and rebuild.
Build
Requires the PS5 payload SDK.
make PS5_PAYLOAD_SDK=/path/to/ps5-payload-sdk
Produces ssl_pin_bypass.elf.
Usage
Send the ELF to elfldr (port 9021) on a jailbroken PS5:
nc -q 99 <ps5-ip> 9021 < ssl_pin_bypass.elf
Then route HTTPS traffic through the local proxy in proxy/ — see proxy/run.sh.
License
GPL-3.0 — see LICENSE.