La présentation est en train de télécharger. S'il vous plaît, attendez

La présentation est en train de télécharger. S'il vous plaît, attendez

Broken Synapse Désactivation du brouillard de guerre dans un jeu de stratégie en ligne.

Présentations similaires


Présentation au sujet: "Broken Synapse Désactivation du brouillard de guerre dans un jeu de stratégie en ligne."— Transcription de la présentation:

1 Broken Synapse Désactivation du brouillard de guerre dans un jeu de stratégie en ligne

2 $> whoami Ivan Kwiatkowski (@JusticeRage) Consultant en sécurité informatique pour AMIR Consulting Deux projets FOSS Manalyze (manalyzer.org) ApkTrack

3 Frozen Synapse Sorti en 2011 Jeu de stratégie en tour par tour Orienté « compétition » Objectif : désactiver le brouillard de guerre

4 Idée #1 : Wireshark Filtre : ip.addr == 62.197.39.230 Login du client de jeu : Password : MD5(salt + MD5(password)) Protocole cleartext, séparateur = \t textcomprelogon textcomcommandsaltRec290072 textcomlogin[user][pwd_hash]33 textcomloggedIn30787 [user] textcomcommandsetMyOSwindows.steam writeFile[…].txt121gz161 textcomcommandrefreshPeopleOnline

5 Idée #1 : Wireshark Récupération des données d’une partie Client : textcom command selectMT [game ID] Serveur : blob.gz 0000h: 06 00 00 00 88 31 33 32 31 38 33 34 09 6D 75 6C....ˆ1321834.mul 0010h: 74 69 74 75 72 6E 09 63 61 66 66 69 6E 61 74 6F titurn.caffinato 0020h: 72 09 32 09 34 09 30 09 4D 61 74 63 68 6D 61 64 r.2.4.0.Matchmad 0030h: 65 09 30 09 31 09 30 09 53 6E 69 70 65 72 5A 77 e.0.1.0.SniperZw 0040h: 6F 6C 66 09 30 09 2D 31 09 30 20 31 09 35 32 20 olf.0.-1.0 1.52 0050h: 36 32 09 36 31 30 20 32 34 38 09 34 32 37 36 09 62.610 248.4276. 0060h: 31 38 38 09 31 38 09 31 32 39 09 63 61 66 66 69 188.18.129.caffi 0070h: 6E 61 74 6F 72 09 53 6E 69 70 65 72 5A 77 6F 6C nator.SniperZwol 0080h: 66 09 2D 34 30 2E 30 09 30 09 30 09 30 00 00 00 f.-40.0.0.0.0... 0090h: 00 08 00 00 00 00 00 00 00 0D 0A 6D 61 63 68 69...........machi 00A0h: 6E 65 47 75 6E 00 01 00 00 00 01 00 00 00 00 FF neGun..........ÿ 00B0h: FF FF FF 00 00 80 BF 03 00 00 00 00 00 00 00 00 ÿÿÿ..€¿......... 00C0h: 00 00 00 40 AB 19 44 D0 44 CE 41 01 00 00 00 00...@«.DÐDÎA..... 00D0h: 00 80 BF 00 00 00 00 01 00 00 00 2E 00 00 00 00.€¿............. 00E0h: 00 00 00 01 00 00 00 40 AB 19 44 D0 44 CE 41 5B.......@«.DÐDÎA[... Header ???

6 Idée #2 : OllyDbg Breakpoint sur recv Boucle infinie (?) dans un switch-case géant Jeu bâti sur le moteur Torque Game Engine Langage de script « maison » Fichiers.cs.dso dans le répertoire du jeu

7 Idée #3 : Décompiler les.cs.dso Code du Torque Game Engine publié en 2013 Lecture moteur pour comprendre : Structure des fichiers.cs.dso Rappelle les.class de Java Présence de tables qui contiennent valeurs immédiates / noms de variables Fonctionnement de l’interpréteur Pas de registres Trois piles Aucune optimisation

8 Idée #3 : Décompiler les.cs.dso Ecriture d’un émulateur/décompilateur en Python Torque VM (floats) Emulateur (floats) Opcode OP_LOADIMMED_FLT [2] 2 2 OP_LOADIMMED_FLT [5] 55 OP_ADD 7 "5 + 2" OP_SETCURVAR [%var] pCurrentVariable = lookup_local("var"); curvar = "%var" OP_SAVEVAR_FLT pCurrentVariable->setValue(stack.top()); Code source : %var = 5 + 2;

9 Idée #3 : Décompiler les.cs.dso Structures de contrôle plus compliquées à gérer : BytecodeEmulateur [test] OP_JMPIFNOT if ? while ? [branche « True »] Où est-ce que je referme l’accolade ? [suite du code] BytecodeEmulateur [test] OP_JMPIFNOT if ? while ? / Ajout de META_ENDIF [branche « True »] Où est-ce que je referme l’accolade ? META_ENDIF OK, ici ! [suite du code]

10 Idée #3 : Décompiler les.cs.dso Détection du type de structure : regarder l’opcode avant la destination du saut [test] OP_JMPIFNOT [branche "True"] OP_JMP [branche "False"] [suite du code] if-then-else [test de sortie de boucle] OP_JMPIFNOT [instructions de la boucle] [test de sortie de boucle] OP_JMPIFNOT [suite du code] for / while [test] OP_JMPIFNOT [branche "True"] [suite du code] if (sans else)

11 Idée #3 : Décompiler les.cs.dso Déroulement git clone https://github.com/GarageGames/Torque2D.git Ecrire des scripts.cs et les faire compiler en.cs.dso par le moteur Avoir un décompilateur qui marche ! Décompiler les scripts de Frozen Synapse !

12 Idée #3 bis : Décompiler les.cs.dso Nouvelle mission : identifier les évolutions du bytecode IDA Pro Pro tip : version GNU/Linux de Frozen Synapse non strippée :) Indices dans le code du moteur …mais premier commit seulement en février 2013 Différences découvertes : Liste des opcodes décalée à deux endroits Taille des offsets : 4 octets au lieu de 8 Adaptation du décompilateur

13 Idée #3 bis : Avec un décompilateur Possibilité de lire le code source du jeu Si un.cs plus récent est détecté dans le répertoire, Torque le recompile et l’utilise Possibilité de modifier le client du jeu ! Désactivation du brouillard de guerre Acquisition de succès Steam Modding ? Démonstration

14 Conclusion Données « sensibles » masquées mais transmises Décompilateur et scripts disponibles sur GitHub https://github.com/JusticeRage/BrokenSynapse Tricher c’est mal Writeup et slides sur mon blog : https://blog.kwiatkowski.fr/?q=fr/brokensynapse Frozen Synapse 2 annoncé pour 2016 Même moteur ? Même décompilateur ? Des questions ?


Télécharger ppt "Broken Synapse Désactivation du brouillard de guerre dans un jeu de stratégie en ligne."

Présentations similaires


Annonces Google