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

Slides:



Advertisements
Présentations similaires
Samba contrôleur de domaine
Advertisements

Premier programme en C :
La boucle for : init7.c et init71.c
A RECUPERER EN ENTRANT Le polycopié de Caml Partie 1
Formation universitaire à .NET: Introduction à C#
Interactivé: L'Action Script.
L’ interruption de boucle
Cours n°2M2. IST-IE (S. Sidhom) UE 303 Promo. M2 IST-IE 2005/06 Conception dun système d'information multimédia Architecture trois-tiers : PHP/MySQL &
Personal Home Page / Hypertext Processor (PHP)
IJA - TD 2 Bases du langage
PHP mySQL Extension php_mysql. Connexion à une base de données Établir une connexion mysql_connect(string server, string username, string password) –permet.
Introduction : Compilation et Traduction
JSP 2 Crash Course Michel Buffa UNSA
1)Boucle for 2)Boucle while
Points importants de la semaine Les commentaires. Les variables. Les instructions conditionnelles. Les instructions itératives (les boucles).
Pourquoi MIPS Assembler ?
CPI/BTS 2 Programmation Web Introduction au PHP
Introduction à la programmation (420-PK2-SL) cours 12 Gestion des applications Technologie de linformation (LEA.BW)
RESUMES Module II1 SOMMAIRE CYCLE 1 : Saisir – Afficher – Données
Les instructions PHP pour l'accès à une base de données MySql
Quest-ce quune classe dallocation? Une classe dallocation détermine la portée et la durée de vie dun objet ou dune fonction.
Le langage Javascript pour le web
Les Fonctions. Définir une fonction Sections de code indépendantes que lon peut appeler à nimporte quel moment et dans nimporte quel ordre. Bout de code.
Introduction à la programmation I Fonctions Structures de contrôle Structures de données (arrays simples et indexés) Variables locales et globales.
Principes de programmation (suite)
Principes de programmation
Chapitre XI Gestion des erreurs et exceptions. 2 La gestion des erreurs et exceptions De nombreux problèmes peuvent survenir pendant lexécution dun programme:
GPA435, GPA – ÉTS, T. Wong Génie de la production automatisée GPA435 Système dexploitation et programmation de système Chapitre 6 Partie I 2014.
1 PHP 1.Langage PHP 1.1. Types de base, variables et constantes 1.2. Opérateurs et expressions 1.3. Instructions 1.4. Fonctions 2.Accès aux bases de données:
MySQL Création des sites dynamiques
IFT 6800 Atelier en Technologies d’information
Web dynamique PhP + MySQL AYARI Mejdi 2006
LIFI-Java 2004 Séance du Jeudi 9 sept. Cours 1. La notion de langage Décrire une tâche à effectuer –programme Écrire à un haut niveau –facile pour lutilisateur.
ECP – Option SA Henri Fallon
L3 Module Libre Année universitaire Initiation à la Bioinformatique Jean-Michel RICHER.
Les Opérateurs Ils régissent toutes les opérations ou transformations sur les valeurs des variables. Opérateur d'affectation Opérateurs arithmétiques Opérateurs.
Animateur : Med HAIJOUBI
Utilisation avancée de linux
PHP & My SQL.
PHP 3° PARTIE : GESTION DE FICHIERS ET DE REPERTOIRES
JavaScript.
Boucles et Tests For( in ) { } While( ) { } Les exécutions conditionnelles (if.. else) peuvent être évitées avec des indexations logiques. Exemples: y=numeric(length(x));
Scripts shell intro Un script bash est un fichier contenant une suite de commandes shell, exécutables par l'interpréteur (ici le programme /bin/bash),
Master 1 SIGLIS Java Lecteur Stéphane Tallard Les erreurs communes en Java.
Les tests.
 Syntaxe du langage PHP
420-B63 Programmation Web Avancée Auteur : Frédéric Thériault 1.
Tutorat en bio-informatique Le 14 novembre Au programme… Les objets –Propriétés (attributs) –Constructeurs –Méthodes.
Sémantique des instructions pour le langage Z minimal Pr ZEGOUR DJAMEL EDDINE Ecole Supérieure d’Informatique (ESI)
 Formulaires HTML : traiter les entrées utilisateur
Tutorat en bio-informatique Le 12 octobre Exercices 3 et 4 (MAT1400) - solutions La série du binôme (chap. 8.8) –Trouver la série entière et le.
1 PHP 5 Notions fondamentales (niveau 1 – cours #2) Formation continue – Cégep de Sainte-Foy.
Initiation au JavaScript
Introduction au langage C : Structures de contrôle 1 ère année Génie Informatique Dr Daouda Traoré Université de Ségou
IFT313 – Introduction aux langages formels Eric Beaudry Département d’informatique Université de Sherbrooke Laboratoire sur JFLEX Été 2010.
Cesi RILA 2014 – Projet Java Julian Mauborgne
AFNOG POP3 et IMAP avec Dovecot
Scripts et fonctions Instructions de contrôle
PRO-1027 Programmation Scientifique en C
1.1: notions de bases de l’informatique
L. Gurret – M. Herve – P. Mignon – J. Prarioz. Introduction  Dernière étape d’analyse  Cahier des charges, spécifications et conception orientée objet.
Flash MX – Séance 2 Interactions & ActionScript David Rapin Si28 P06.
PRESENTATION FLASH 2 MAURIN Marion BERETTI Vincent.
C++ BY AURÉLIEN MODULO MARION. PLAN DES TROIS PRÉSENTATIONS C++ avancé C++ orienté objet Bases de C++
APP-TSWD Apprentissage Par Problèmes Techniques des Sites Web Dynamiques Licence Professionnelle FNEPI Valérie Bellynck, Benjamin Brichet-Billet, Mazen.
Présentation de Stage 2 ème année BTS SIO – Mars/Avril 2016 Réalisé par : Adrien De Brito Encadré par : William Nguyen-Thanh Lycée Paul Lapie Courbevoie.
BASE DE L’ALGORITHMIE.  Un système d’instructions.  Pour résoudre d’un problème ou d’une classe de problèmes  Recette de cuisine pour faire un gâteau.
Samba contrôleur de domaine Linux – Ubuntu Samba
Broken Synapse Désactivation du brouillard de guerre dans un jeu de stratégie en ligne.
FACTORY systemes Module 7 Page 7-1 Les outils clients non Wonderware FORMATION InSQL 7.0.
Transcription de la présentation:

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

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

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

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

Idée #1 : Wireshark Récupération des données d’une partie Client : textcom command selectMT [game ID] Serveur : blob.gz 0000h: D 75 6C....ˆ mul 0010h: E E F titurn.caffinato 0020h: D D r Matchmad 0030h: E A 77 e SniperZw 0040h: 6F 6C D olf h: h: caffi 0070h: 6E F E A 77 6F 6C nator.SniperZwol 0080h: D E f h: D 0A 6D machi 00A0h: 6E E FF neGun ÿ 00B0h: FF FF FF BF ÿÿÿ..€¿ C0h: AB D0 44 CE D0h: BF E €¿ E0h: AB D0 44 CE 41 Header ???

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

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

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;

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]

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)

Idée #3 : Décompiler les.cs.dso Déroulement git clone 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 !

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

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

Conclusion Données « sensibles » masquées mais transmises Décompilateur et scripts disponibles sur GitHub Tricher c’est mal Writeup et slides sur mon blog : Frozen Synapse 2 annoncé pour 2016 Même moteur ? Même décompilateur ? Des questions ?