Reverse Engineering

Reconstruction du serveur multijoueur Uncharted 3

Reverse engineering des flux réseau TCP de Naughty Dog pour reconstruire un serveur multijoueur fonctionnel — projet personnel de préservation du jeu, à destination de la communauté.

Le contexte

En 2014, Naughty Dog (studio développeur d'Uncharted 3) a fermé les serveurs multijoueur du jeu. Le mode multi est devenu inaccessible alors qu'une communauté reste active. Mon objectif : reconstruire un serveur compatible par reverse engineering, pour permettre à la communauté de continuer à jouer ensemble.

Démarche technique

1
Désassemblage de l'EBOOT (Ghidra)
Décompilation du binaire client PowerPC pour comprendre comment le jeu se connecte aux serveurs et identifier les fonctions réseau critiques.
2
Redirection DNS (dnsmasq)
Mise en place d'un serveur DNS personnalisé sur VM Kali pour intercepter les requêtes Naughty Dog et les rediriger vers mon infrastructure.
3
Serveur HTTP de remplacement
Script Python sur le port 80 qui répond aux requêtes HTTP de la PS3 à la place des serveurs Naughty Dog, en lui servant les fichiers de configuration nécessaires au lancement du multijoueur.
4
Cassage du chiffrement Blowfish + HMAC
Identification de l'algorithme de chiffrement et extraction des deux clés depuis le binaire. Modification de l'IP serveur dans le fichier de config et recalcul du HMAC d'intégrité — étape clé pour que les autres joueurs n'aient qu'à configurer leur DNS.
5
Exploration mémoire (ProDG Debugger + Cheat Engine)
Utilisation du debugger officiel PS3 (ProDG) sur console en custom firmware, et de Cheat Engine sur l'émulateur RPCS3, pour tenter d'extraire les clés de chiffrement runtime via breakpoints et scan mémoire. Méthode partiellement aboutie — utile pour tracer les échanges de paquets, mais l'extraction directe de la clé n'a pas pu être finalisée.
6
Analyse des flux TCP (Wireshark)
Capture du trafic réseau et identification de 3 services : 6300 (auth), 6301 (invitations), 6303 (matchmaking). Reverse du format binaire des paquets : header 8 bytes Big Endian, opcode, payload variable.
7
Mapping des opcodes (Ghidra + Wireshark)
Reverse engineering d'une vingtaine d'opcodes (0x012F → 0x0145) couvrant la création de room, le matchmaking, le lobby et le lancement de partie. Corrélation entre code décompilé et trafic capturé.
8
Implémentation du serveur (Python)
Architecture multi-thread, un thread par port, gestion d'état par session. Plus de 50 itérations pour atteindre le matchmaking complet et le lancement de partie.
9
Mise en production VPS Oracle Cloud (en cours)
Déploiement sur un VPS public (offre Free Tier ARM) pour rendre le service accessible à toute la communauté — un simple changement DNS sur la PS3 suffira pour jouer.

Stack technique

Ghidra ProDG Debugger Cheat Engine RPCS3 Wireshark Python 3 dnsmasq Kali Linux PS3 CFW Blowfish / HMAC PowerPC ASM Sockets TCP Oracle Cloud VPS MCP / Claude

Méthodologie : assistance IA via MCP

Pour accélérer l'analyse, j'ai utilisé un connecteur MCP (Model Context Protocol) open source qui permet à Claude d'interagir directement avec Ghidra. Premier obstacle rencontré : le binaire Uncharted 3 contient des milliers de fonctions, ce qui dépasse largement la limite de contexte d'une IA.

Avec Claude, nous avons travaillé à améliorer le connecteur avec :

  • Une pagination des résultats pour ne pas saturer le contexte
  • Des filtres ciblés (par catégorie de fonction, par adresse, par pattern)
  • Une base de données pour stocker les analyses précédentes et y faire référence sans tout recharger à chaque session

Travail mis en standby pendant la préparation du BTS, à reprendre ensuite.

État actuel

Authentification
Lobby / Création de room
Système d'invitations
Matchmaking (Find Game)
Lancement de partie
Stabilisation des bugs résiduels
Mise en production Oracle Cloud
Publication open source
Projet personnel en développement

Code source non publié pour le moment

Le projet sera mis à disposition de la communauté en open source
une fois la stabilité garantie sur l'environnement de production.

Voir la galerie