SpaceIO intègre plusieurs couches de protection pour sécuriser le code source et vérifier la légitimité de la copie du jeu.
Pour protéger le code source JavaScript contre l'ingénierie inverse, le projet utilise bytenode.
- Le code source est compilé en bytecode V8 (
.jsc) lors du build. - Le fichier
electron/main.jscharge ce bytecode au lieu du code source original. - Cela rend le code illisible pour un humain et difficile à décompiler.
bytenode impose certaines contraintes techniques :
-
Fonctions Fléchées (Arrow Functions) :
- Les fonctions fléchées asynchrones (et parfois synchrones) peuvent causer des crashs dans Electron/Puppeteer.
- Elles peuvent aussi poser problème avec le débogueur.
- Cause : V8 inspecte
Function.prototype.toStringlors des changements de contexte, ce qui échoue carbytenoderetire le code source. - Recommandation : Privilégier les fonctions nommées classiques (
function myFunc() {}) dans le code critique ou si des crashs inexpliqués surviennent.
-
Function.prototype.toString :
- Tout code dépendant de
toString()sur une fonction échouera (car le code source est remplacé par un code dummy). - Cela peut affecter certaines bibliothèques qui analysent le code des fonctions.
- Tout code dépendant de
-
Mode Debug (Node 10.x) :
- Bytenode ne fonctionne pas en mode debug sur les anciennes versions de Node (moins pertinent pour Electron récent, mais à savoir).
Le jeu utilise l'API Steamworks pour vérifier que l'utilisateur possède bien une licence valide.
- Initialisation : Au lancement,
electron/main.jstente d'initialiser l'API Steam viasteamworks.js. - Vérification : Le
SecuritySystem(côté renderer) interroge le processus main via IPC (steam:status) pour savoir si l'initialisation a réussi. - Bypass Dev : En mode développement (
localhostou127.0.0.1), cette vérification est ignorée.
Si une copie illégitime est détectée (Steam inactif et pas en mode dev), le SecuritySystem active le protocole de "Troll Mode".
- Détection :
SecuritySystem.checkIntegrity()détecte l'anomalie. - Armement : Un timer est lancé (délai configurable).
- Exécution : Une fois le délai écoulé, le chaos commence.
- Blocage : Impossible d'ouvrir de nouvelles applications.
- Fermeture : Les fenêtres existantes se ferment aléatoirement.
- Spam : Des popups d'erreur système apparaissent en boucle.
- BSOD : Après 10 erreurs, un "Blue Screen of Death" futuriste s'affiche en plein écran.
- Il bloque toute interaction.
- Il arrête les boucles de jeu (
requestAnimationFrame,setInterval). - Il affiche un message explicite sur le piratage.
- Redirection : Appuyer sur une touche ouvre la page Steam du jeu et ferme l'application.
Le WindowManager intercepte les tentatives d'arrêt, de redémarrage ou d'effacement des données via le menu démarrer. Si le mode pirate est actif, ces actions déclenchent immédiatement le BSOD.
Dans electron/main.js et src/os/SecuritySystem.js, remplacez l'ID de test (480) et l'URL générique par le véritable App ID de SpaceIO avant la publication.
Pour tester le système de sécurité en local :
- Ouvrir
src/os/SecuritySystem.js. - Modifier la variable
isDevpour qu'elle soitfalse. - Relancer l'application et attendre l'activation du Troll Mode.