• C 94.9%
  • Makefile 5.1%
Find a file
Repository files (latest commit first)
Filename Latest commit message Latest commit date
2026-06-09 22:11:12 +02:00
.github/workflows Use bleeding-edge SDK and upload artifacts with archive: false 2026-06-09 22:11:12 +02:00
.gitignore Initial commit 2025-11-13 00:15:23 +01:00
LICENSE Initial commit 2025-11-13 00:09:18 +01:00
main.c Initial commit 2025-11-13 00:15:23 +01:00
Makefile Initial commit 2025-11-13 00:15:23 +01:00
README.md Update README.md 2026-06-09 21:39:50 +02:00
selfpager.c Add 12.02-13.40 offsets, thanks to @EchoStretch and @Gezine 2026-06-09 21:38:42 +02:00
selfpager.h Initial commit 2025-11-13 00:15:23 +01:00

ps5-self-pager

It works by swapping pagertab[OBJT_VNODE] to point to selfpagerops instead of the vnodepagerops it normally is for the duration of the mmap call, this will cause the kernel to give us a self pager when mmapping a file, essentially replicating the removed MAP_SELF mmap flag, while bypassing its checks.

Supports PS5 firmware 1.00-13.40

Usage

There are a couple different builds in the releases to dump specific folders:

Payload file name File(s)/folder(s) it dumps
ps5-self-pager-game.elf /mnt/sandbox/pfsmnt recursively (app0 and patch0 if exists, app0-patch0-union is skipped)
ps5-self-pager-full-system.elf /system and /system_ex recursively
ps5-self-pager-system-common-lib.elf /system/common/lib
ps5-self-pager-shellcore.elf /system/vsh/SceShellCore.elf

If a USB drive is plugged in, it will output the decrypted unsigned ELFs to USB0/dump, otherwise it will use /data/dump on the internal storage.

Send to elfldr (port 9021) with a sender that can listen back to see logs:

  • For a GUI option: https://github.com/Al-Azif/hermes-link
    • Select Debug Log in the menu to see logs
  • If you have PuTTY installed, from cmd do:
    type ps5-self-pager.elf | "c:\Program Files\PuTTY\plink.exe" -raw -P 9021 IP_OF_YOUR_PS5
    
  • Using socat:
    socat -t 9999999 - TCP:IP_OF_YOUR_PS5:9021 < ps5-self-pager.elf
    

Wait until you see Done. Success: x, Failed: y in the logs.

Note

Since we are modifying the pagertab, there is a small window (~20-60 microseconds per mapping/segment, the actual decryption work happens on page fault, and by then we restored the pagertab) where if any process maps a file, it would receive a self pager, which would not be able to handle a regular file so the process would receive a SIGSEGV if the memory was accessed directly, and likely crash. However I would expect this to be rare, you might never encounter it. If this does happen it just crashes the game/process, not the entire console.

Thanks/references