Skip to content

Architecture

Tiago Valente edited this page Oct 10, 2026 · 1 revision

The pieces

 Browser (any device)                         PS5
┌──────────────────────┐   WebSocket   ┌─────────────────────────────┐
│ web app              │◄─────────────►│ CheatSpecter payload  :8744 │
│  protocol client     │     HTTP      │  serves the app             │
│  scanner, cheats     │               │  relays to the debugger     │
└──────────┬───────────┘               │  library, files, keep-on    │
           │ HTTPS                     │            │ TCP            │
           ▼                           │  ps5debug-NG          :744  │
   cheat tables and lessons            └─────────────────────────────┘
   (GitHub)
  • ps5debug-NG does the low-level work on the console: reading and writing a game's memory, searching it, watchpoints and breakpoints. CheatSpecter does not replace it.
  • The web app contains almost all of CheatSpecter: the debugger's protocol, the scanner, cheat formats, the disassembler (iced-x86, in a worker), and the interface. It runs entirely in your browser.
  • Something has to relay, because browsers cannot open raw TCP connections to the debugger. There are two relays, and the app is identical with either:
    • the payload (payload/), a small ELF on the console that serves the app and relays locally;
    • the bridge (bridge/server.mjs), the same job done by a Node.js program on a computer.
  • Cheat tables and lessons are fetched by the browser from GitHub. The console never needs internet access.

What the payload does beyond relaying

The debugger cannot do these, so the payload does:

Feature How
Game library, names and icons Reads the system's own metadata for installed titles
Starting a game Asks the system to launch it
Your cheats on the console /data/cheatspecter/cheats/<title id>-<version>.cspector
Small settings (such as lesson progress) /data/cheatspecter/prefs/<name>.json
"What writes to this" and breakpoints Forwards the debugger's stop reports to the browser
Cheats that stay on A small engine that reads the same .cspector file, applies the cheats marked "keep", and re-applies them when the game restarts

The keep-on engine uses its own connection to the debugger, never needs the debugger attached, checks the game's bytes before every patch, and steps back while a browser is running a long search. payload/README.md has the exact rules and every HTTP endpoint.

Ports

Port Where What
8744 PS5 The payload: web app, API, WebSockets
744 PS5 ps5debug-NG
755 PS5 (payload) or computer (bridge) Where the debugger delivers stop reports
9021 PS5 ELF loader, for sending the payload

One debugging session

The console allows a single debugging session at a time. The parts of the app that need one ("what writes to this", "what does this touch", pause and step, the first-cheat guide) take turns through one gate, so the second to ask is told who has it.

Safety checks built in

  • A patch is only written when the game's current bytes match the cheat's "off" bytes.
  • Everything that changes something on the payload (saving files, starting games, opening the relay) is refused when the request comes from a page on another site.
  • The bridge only relays to private network addresses on the debugger's port.
  • Title IDs, versions and settings names are checked against strict patterns before they are used in a file path.
  • Downloaded lessons are data only and are validated before use. Imported cheats that run code are held for review.

Source layout

Path What it is
src/lib/ The library: protocol, scanner, cheat formats, debugger, engine helpers. No interface code.
src/ui/ The interface (React, Tailwind, shadcn/ui, Kibo UI)
payload/ The on-console ELF, in C
bridge/ The relay for running from a computer, and the demo mode
mock/ A simulated console with a small game, used by the demo and every test
mcp/ The MCP server
learn/ The lessons
test/ Test suites

The README of the repository and the comments at the top of each file in src/lib/ go further.

Clone this wiki locally