Game Hacking

1. Qu'est ce que c'est ?

  • ce n'est pas que la triche, du piratage ou la decouverte de faille
  • hacker signifie bidouiller dans un premier temps
  • le principe est donc de bidouiller le jeu pour voir ce qu'il est possible de faire avec et comment il est fait

1.1. Et avec du concret ?

  • ingénierie à rebourd pour une meilleure compréhension du fonctionnement du jeu
  • minage de données
  • création de mods, de patchs, pour une meilleure immersion et plus de fun
  • logiciels de triche (berk)
  • découverte de vulnérabilités
  • piratage

1.2. Quels jeux ?

  • des jeux récents (sous Unity, Unreal…)
  • des jeux plus ancients (NES, SNES, DOS ou Windows 2000…)
  • n'importe lequel en fait !

1.3. Les outils

  • propre au
    • langage informatique (GHidra, dnSpy)
    • moteur de jeu (il2cppdumper)
  • générique (CheatEngine, WireShark)

2. Exemple dans le cadre du BreizhCTF

2.1. Le BreizhCTF ?

  • CTF pour Capture The Flags
    • Compétion de cyber avec des épreuves et des chaines de caractères à retrouver (exemple: BzhCTF{t0t0})
  • 1ere compétition en présentiel en France et dans les 10 plus grands évènements au monde (d'après un des organisateurs)
  • 600 participants, 120 equipes

2.2. Les epreuves de Game Hacking

  • un jeu est fourni
    • développé sur Unity
    • mais obfusqué et non patchable
    • avec de la cryptographie pour cacher les fannions
  • 4 challenges, mais seulement 3 résolus (un peu dur de se concentrer sur une nouvelle technologie à 3h du matin)

crypt_obfusc.png

  1. réussir à monter sur une tour trop haute
  2. tirer des boules de feux
  3. traverser une épée qui inflige des dégâts
  4. trouver une épée cachée

2.2.1. La tour

  1. Première analyse: on veut sauter haut pour aller sur la tour
  2. Analyse du code: on regarde les classes, il y a une classe Player
  3. On voit une fonction qui applique une force vectoriel sur le corps du joueur, de fortes chances que ce soit le saut (\((X, Y, Z)\) dans Unity)

codejump.png

error.png

Figure 1: pas possible de patcher

1_scan.png

2.2.2. Les boules de feux

On retourne sur la classe et la fonction…

codejump.png

Analyse des attributs de la classe

struct.png

mémoire.png

struct_filed_changed.png

2.2.3. L'épée

3. Exemple avec un vrai jeu

halfdead.jpg

3.1. Présentation du jeu

  • jeu multi-joueurs et solo
  • survie dans un labyrinthe
  • ouverture de portes lentes avec des pièges derrière

3.2. Se fixer un objectif

Ouvrir les portes plus rapidement pour finir plus vite en solo.

3.3. Comment y arriver ?

Comme avant, on va chercher dans le code avec notre cerveau. On cherche un mécanisme de porte donc sûrement une classe Door ?

halfdead_door.png

Figure 2: En effet…

doc_unity.png

Figure 3: Et un petit tour dans la doc !

4. Des ressources (à foison)