Conférence DEFCON 19. Hack MMORPG pour le plaisir et le profit. 2e partie

Conférence DEFCON 19. Hack MMORPG pour le plaisir et le profit. Partie 1

Josh Phillips: comme nous l'avons dit, tous les hacks sont assez simples, et leur utilisation ne nécessite parfois aucune compétence, juste une approche créative des affaires. Pour utiliser la «superpuissance», vous n'avez pas besoin d'être le dieu de la rétro-ingénierie, mais cela aide certainement des choses comme le débordement d'entier ou le remplissage insuffisant, et vous pouvez facilement changer les valeurs souhaitées de 0 au maximum, par exemple, pour causer des dommages mortels à l'ennemi.



Mike Donnelly: oui, tout se résume à la capacité de fabriquer des hacks, par exemple, pour maximiser votre armure. Cela se produit dans World of Warcraft - nous avons eu un gars qui, assis dans la capitale orque Orgrimmar, a enlevé son casque 100 fois et a mis son casque, pompant sa force du niveau 2 au 32.

Josh Phillips: est-ce vraiment arrivé, ou peut-être qu'il a juste utilisé l'éditeur de mémoire et pris une capture d'écran?

Mike Donnelly: Vous avez peut-être raison!

Josh Phillips: Mon mode préféré est le mode GM. Certaines entreprises produisent des jeux avec la possibilité ouverte de rétro-ingénierie, de sorte que vous, en devenant le "maître du jeu" GM, pouvez vous téléporter vers les gens, détruire des choses, donner des commandes et faire d'autres choses intéressantes. Il existe également un hack intéressant, tel que le vol d'objets sur des personnages PNJ non-joueurs. Le jeu Age of Conan a été l'un des premiers dans lequel il y avait une vulnérabilité qui pourrait tuer GM, et je ne pense pas que ses développeurs en soient satisfaits.

Mike donnelly

Josh Phillips: Eh bien, oui, comme ce que vous avez dit au serveur: "Je suis un maître de jeu et je vais mourir maintenant."

Mike Donnelly: Parfois, un serveur de jeu vous fait confiance lorsque vous prétendez être un autre personnage de jeu, en disant: "Je suis tel ou tel et je vends ça!"

Josh Phillips: J'ai déjà dit que les développeurs de jeux sont des gens naïfs. Hacking UI Hack est moins précieux. Il est utile si vous souhaitez voir l'espace de jeu très loin ou vous précipiter sur la carte de la zone de jeu comme un fantôme, tout en restant en place.



Mike Donnelly: vous pouvez toujours utiliser une telle chose comme une traduction «sauvage» de la langue, car, par exemple, les joueurs de l'Alliance ne comprendront plus les joueurs de Ward. Ici, le piratage se produit du côté client de sorte que pendant le dialogue, le texte de l'adversaire envoyé au joueur ne sera tout simplement pas affiché. C'est assez facile à faire, mais je doute que quiconque paie pour ce type de piratage.

Josh Phillips: La section suivante de la présentation s'intitule: "Je suis à votre base, les gars, pour vous tuer!" Je vais essayer de vous expliquer comment écrire un hack de téléportation. Il y a un moyen facile et difficile pour cela.

Le moyen le plus simple est de trouver la position du joueur dans la mémoire, de la réécrire et d'appeler la fonction de jeu, qui est chargée de changer l'emplacement du joueur pour se téléporter vers l'emplacement sélectionné. Donc, si vous savez où se trouve le code responsable de l'emplacement du joueur, et que vous pouvez l'appeler directement en utilisant une fonction, il peut s'agir d'un sort de téléportation, qui est appelé "sort lancé" en Lua, alors vous pouvez lui donner la valeur souhaitée lieux de téléportation des joueurs. Cependant, le serveur ne pourra pas savoir si vous êtes un guerrier ordinaire ou un mage qui peut utiliser des sorts. Cette méthode fonctionne dans de nombreux jeux.
La difficulté est de truquer les paquets de mouvement. Cela nécessitera des calculs mathématiques et la connaissance de la façon dont ils sont mis à jour, la rétro-ingénierie des paquets de mouvement et similaires. Vous devrez peut-être ajuster l'horodatage pour vous téléporter ou exécuter plus rapidement.



Le prochain hack concerne les attaques de la logique du jeu en remplaçant l'ID d'origine dans le paquet par l'ID souhaité, que nous avons mentionné dans le contexte d'Age of Conan. Ce sont des attaques contre les compétences commerciales du joueur, des dégâts critiques ou la destruction complète des dégâts de chute des personnages et des objets de jeu, ainsi que des attaques de marchands PNJ dans le but de voler. Dans Age of Conan, il était possible d'infliger des dégâts critiques à n'importe quel personnage du jeu et même de tuer GM en lui affectant un million de dégâts de chute, après quoi il était simplement mort.

Mike Donnelly: oui, c'était drôle!

Josh Phillips: Vous pouvez également utiliser du code malveillant dans ce jeu, afin que quelqu'un entame une relation commerciale avec vous sans même le savoir. Vous pourriez forcer le PNJ à vous vendre quelque chose, et cette technique est encore utilisée par de nombreux joueurs sauf moi, parce que je n'aime pas voler des personnages informatiques. Et je pense qu'aucun de vous ne devrait faire ça.

Mike Donnelly: cela provoque des larmes numériques ...

Josh Phillips: suivi de dupes, ou clonage d'articles. De nombreux jeux présentent des vulnérabilités telles que des problèmes de délimitation côté serveur. Par exemple, Age of Conan, EverQuest, Final Fantasy XII et Ultima Online ont un zonage, c'est-à-dire que si vous lancez un sort d'un côté et que vous traversez la ligne de serveur, trouvez l'ennemi qui vous a vaincu et vous pouvez continuer la bataille. Le hack par la méthode de répétition est qu'à une vitesse énorme, par exemple 1000 fois par seconde, vous déplacez les choses d'avant en arrière de la fenêtre d'échange vers votre sac à dos. En conséquence, le serveur arrête de suivre les choses et remplit complètement votre sac à dos. Tout le monde connaît le jeu Diablo 1, où vous jetez simplement un objet sur le sol, courez vers lui, survolez-le, essayez de le ramasser, et il apparaît immédiatement dans votre sac à dos, tout en restant au sol, c'est donc une façon assez drôle de pirater.

Le piratage de ressources de jeu ou le piratage d'actifs, comme je l'ai mentionné, ne vaut pas le coup, sauf si quelqu'un d'autre a publié pour vous votre travail que vous pouvez prêter. Ceux qui ont joué à WoW savent que quelqu'un peut apparaître comme par magie de votre côté - je ne sais pas comment cela s'appelle correctement ...

Mike Donnelly: champ de bataille, champ de bataille.

Josh Phillips: en fait, je n'ai jamais joué à World of Warcraft, pour moi c'est trop ennuyeux. Ainsi, les joueurs utilisent la téléportation pour se transférer instantanément du champ de bataille à la base ennemie et y tuer tous les adversaires. Ils peuvent également modifier la carte du jeu et créer un tunnel pour passer sous terre jusqu'à la zone souhaitée afin que personne ne la voie. Peut-être verrez-vous son petit nom - une étiquette se déplaçant sur la carte, mais vous ne verrez pas le joueur lui-même. Mais en tout cas, ces méthodes de piratage n'en valent pas la peine.

Je vais commencer la section «Hacking 420 Games» avec une citation de Machiavel: «Rien de grand n'a jamais été réalisé sans danger», donc vous pourriez même être poursuivi.

Mike Donnelly: oui, oui, oui.

Josh Phillips: Je pense que oui. Vous pouvez utiliser le bot dans le jeu, quelqu'un en a parlé il y a quelques années, et je voulais le frapper, car ce n'était pas assez intéressant. Donc, pour cela, vous faites quelque chose comme la lecture des pixels et automatisez ce processus, il n'y a pas d'ingénierie inverse ici. Par exemple, en appuyant sur une seule touche rapide, vous redessinez les points critiques «rouges» de vos propres dégâts afin qu'ils ne deviennent pas rouges et que vous ne mouriez pas. Il s'agit d'un hack d'une échelle très limitée, et vos actions passeront inaperçues si vous agissez très rapidement.

Mike Donnelly: exactement ainsi, vous devez agir très rapidement. Est-ce que quelqu'un sait pourquoi la détection fonctionne si mal? Comprenez-moi bien, je ne veux pas embellir la situation avec la détection côté client, tout le monde semble très sage ici ... Évidemment, les producteurs de jeux n'aiment pas tout ce dont nous parlons, alors ils essaient de trouver votre logiciel dans le jeu, et s'ils le trouvent, que vous banyat. Si vous trichez pour le plaisir, le maximum que vous pouvez perdre est votre propre compte de jeu, mais si vous avez 100 000 clients, c'est un gros problème, car si vous bannissez tous vos clients, vous vous contentez de brûler.



Par conséquent, il est très important d'empêcher la détection de tricherie. Nous en reparlerons plus tard, mais maintenant je tiens à noter que la détection de votre logiciel côté client est très importante.

Josh Phillips: Certains d'entre vous se sont-ils demandé pourquoi une vague d'interdictions roulait environ une fois tous les 3 mois? Le fait est que lorsque vous interdisez 50 000 comptes chaque semaine, les personnes qui reconnectent ces 50 000 comptes ne le feront plus jamais en raison du coût élevé. Mais si vous ne les interdisez pas plus d'une fois tous les 3 ou 4 mois, ils rachèteront les comptes, car cela sera rentable. Les entreprises pensent quelque chose comme ça: nous avons trouvé ces gars qui utilisent, disons, le robot Glider, mais ne vont pas les interdire, car si nous les interdisons trop souvent, ils ne nous rapporteront pas plus de 50 $ de profit.

Mike Donnelly: oui, c'est vrai.

Josh Phillips: Une autre façon de pirater est d'injecter du code lorsque vous insérez un petit code assembleur pour créer de petites choses, par exemple, appeler à distance une sorte de procédure RPC. La surface de votre attaque peut augmenter, je veux dire, vous pouvez vraiment utiliser quelque chose comme une injection de DLL dans un gros morceau de code écrit en C ou C ++ de haut niveau, ce qui est vraiment facile à détecter. Vous écrivez un chargeur de DLL qui corrige toutes vos importations et tout cela.

Vous pouvez attaquer le niveau des paquets réseau et faire une bonne chose en inversant l'ingénierie du protocole réseau. C'est un travail qui prend beaucoup de temps, car il n'y a pas trop de jeux qui permettent ce type d'analyse de contenu. Ce n'est toujours pas une tâche facile, et si vous vous considérez comme un pro, vous pouvez écrire votre propre client de jeu. Les gens pensent souvent qu'ils peuvent le faire et passer beaucoup de temps en vain, mais si vous êtes vraiment capable d'écrire un bon client, comme les gars qui m'ont détruit il y a quelques mois, vous pouvez gagner quelques centaines de milliers par mois avec cela.

Mike Donnelly: écrire un client personnalisé n'est pas ce que vous allez vendre, mais une «agriculture dorée» et des transactions en argent réel. Si vous avez écrit votre client de jeu, vous pouvez demander à votre partenaire de lancer dix millions d'exemplaires du jeu sur le serveur de pharming. Si votre client de jeu ne nécessite pas un grand nombre d'opérations de rendu 3D, son excellent peut être utilisé pour faire évoluer la culture de l'or.
Josh Phillips: si vous pouvez généralement exécuter 2 ou 3 clients de jeu sur un ordinateur et que vous avez pu lancer 200 à 300 clients, ce sera à grande échelle.

Considérons maintenant une chose appelée anti-triche. Dans son aide, vous pouvez gérer un logiciel qui calcule et interdit les tricheurs. C'est souvent une tâche très difficile, mais parfois il est très important de ne pas être détecté, sinon vous pouvez tout perdre. Sur la diapositive, je cite une autre citation de Sun Tzu, qui a déclaré: «Soyez extrêmement subtil jusqu'à l'informe. Soyez extrêmement mystérieux jusqu'au silence. »

Mike Donnelly: Je veux noter qu'il n'y a pas beaucoup d'aspects techniques de la détection, mais vous devriez aborder cela stratégiquement, ce n'est pas dans le livre "MMO Hacking". Peut-être existe-t-il un tel livre?



Josh Phillips: oui, il a été écrit par un de mes amis.

Mike Donnelly: Ce gars est éliminé en premier lieu. Donc, comme ce n'est pas dans le livre, mais si nous parlons d'une approche stratégique des affaires, vous devriez vous soucier de deux choses principales liées à votre logiciel. Vous avez une surface d'attaque qui détermine la difficulté de détecter votre logiciel, et l'anti-triche dans ce cas peut simplement augmenter le code de détection s'il est petit. Deuxièmement, vous devriez avoir ce que j'appelle simplement «renseignement», c'est-à-dire à quel point vous êtes conscient de ce que fait l'ennemi, vous devez comprendre comment fonctionnent ses programmes de détection, car c'est très important. Ces deux choses fonctionnent ensemble, et si la surface d'attaque est trop grande, il sera difficile de dire ce que l'ennemi fait en réponse, car ses efforts peuvent être minimes - il suffit d'écrire une ligne de code qui détectera votre bot. Si vous faites quelque chose de vraiment cool, comme mon bot, qui répondra dans les 2 millisecondes, si le monstre fait quelque chose, vous pouvez éviter la détection.

C'est donc la décision que vous devez prendre lors du choix des fonctionnalités et de la conception de ce que vos clients demandent. Vous devez décider si vous voulez prendre des risques en augmentant la surface d'attaque en ajoutant de telles fonctionnalités.

Avant de montrer la diapositive suivante, je veux parler de ce qui m'est arrivé ainsi qu'aux autres développeurs de logiciels de World of Warcraft. Un gars a développé un logiciel, appelons-le Innerspace, qui a fonctionné en injectant des DLL dans un jeu assez grand. Ce mec connaissait bien l'ingénierie inverse, il a donc pris toutes les mesures contre les programmes de détection de Blizzard. Mais il a encore laissé la DLL dans la mémoire, qu'il voulait "confondre", et plus important encore, il a dû patcher l'une des fonctions de Blizzard. Par conséquent, il est simplement allé au début de cette fonction et a inséré un «saut en longueur» au bon endroit dans le code, étant sûr qu'il avait suffisamment masqué et que personne ne le trouverait.

La diapositive suivante montre la fonction avec le code inséré, faites attention aux valeurs surlignées en rouge, nous allons augmenter ce fragment pour que tout le monde puisse le voir.



C'est un morceau de code inséré dans le jeu, mais ce n'est pas World of Warcraft ...

Josh Phillips: parce que Mike poursuit Blizzard ...

Mike Donnelly: Je pense simplement que donner un exemple de WoW ne serait pas une bonne idée. Dans cet extrait de code, vous voyez que le jeu utilise la requête de liste d'amis askForBuddiesList, qui a un paramètre facultatif qui n'a jamais été utilisé auparavant. Il est compris comme un numéro de package, ou un numéro d'équipe, ou un numéro BOB - «Brothers Over Bitches». Ce paramètre optionnel est «collé» à cet endroit du code et envoyé au serveur, tout est très simple.

Donc, ce code «collé» - faisons défiler quelques lignes vers les commentaires - dit: l'ancien code était askForBuddiesList (0), il est 0, et au lieu de cela maintenant, un nouveau code est utilisé avec l'option paramètre _asm, qui n'a jamais été utilisé auparavant.



Ainsi, Blizzard allait trouver dans le code du jeu une fonction fixée par ce type. Pour ce faire, ils ont modifié cet appel de fonction en un petit exemple de code. Ils ont utilisé les registres, effectué des calculs mathématiques, de sorte que l'IDA ne verra pas d'autre lien vers cette fonction. Ensuite, ils accèdent à la fonction corrigée, extraient le premier octet de leur code et l'envoient en tant que paramètre qui n'a jamais été utilisé auparavant. Que se passe-t-il alors? Ils envoient un octet de leur propre code chaque fois qu'ils font cette demande, et, bien sûr, côté serveur, ils le "peignent" simplement, et s'ils trouvent E9 au lieu de zéro, c'est fait, le travail est fait!

Ce qui est intéressant avec ce logiciel, c'est que vous ne voyez rien comme «si ce type est un robot, parlez-en au serveur» ici. Vous voyez juste que je prends cet octet et l'envoie, et ceci est un petit morceau de code qui ne change même pas le code du réseau principal, il n'y a pas de nouveaux paramètres, rien de nouveau. La seule façon de le trouver est d'observer d'une manière ou d'une autre comment ces données sont collectées, et ensuite nous pouvons dire: "Ouais, cette chose était toujours 0, et maintenant c'est 9, ce n'est pas bon!"

Alors, quand ils ont fait ça, ce gars a perdu tous ses clients parce qu'ils ont attendu plusieurs semaines avant d'être interdits, puis l'entreprise a frappé encore et encore.
C'est un bon exemple de la signification de la surface d'attaque, car la fixation d'une seule fonction du jeu a conduit à une telle réponse. Le fait est que si vous pensez savoir où se trouve le code de détection, il y a toujours une chance que ce ne soit pas ce que vous pensez. Dans le cas de Blizzard, ils n'ont jamais placé leur code de détection en dehors du «ranger» du gardien, ils «ont gardé tous leurs œufs dans le même panier», cachant les détecteurs dans le «ranger». Mais ensuite, ils ont pris conscience et ont dit que nous publierions simplement notre petit code où nous voulions - et c'est tout.
Par conséquent, il est extrêmement important de rester difficile à détecter. S'ils proposaient quelque chose comme un nouvel appel au noyau ou lancaient un moniteur d'API privé, leur activité pouvait être détectée, mais quand ils n'ont fait qu'une petite étape, vous vous êtes immédiatement fait prendre. Par conséquent, il est très important d'observer ce qu'ils font et comment ils créent de nouveaux outils pour surveiller l'apparence des flux de données dans le système.

Quant à Glyder, nous avions des outils qui nous avertissaient, par exemple, que Warden avait été mis à jour et avait maintenant 9 points d'entrée au lieu de 8, et après un tel avertissement, j'ai couru à mon bureau et j'ai commencé à réparer fébrilement Glyder, le commander et exécuter à nouveau. Il y a donc toujours une issue, l'essentiel est de ne pas être paresseux. Il y a vraiment beaucoup de travail dans cette entreprise, mais ça rapporte.

Josh Phillips: oui, je pense que nous avons tous deux dû travailler 36 heures sans interruption.

Mike Donnelly: lorsque Blizzard a mis à jour le «ranger», ils y ont ajouté un nouveau scanner. Ce scanner prend la ligne chiffrée à l'intérieur du «concierge», reçoit la clé du serveur, déchiffre cette ligne et appelle la fonction GetProcAddress, qui extrait l'adresse de la fonction exportée de la bibliothèque connectée dynamiquement spécifiée, dans ce cas kernel32.dll. Si je vous ennuie, ne vous inquiétez pas, ce sera plus amusant.

Ainsi, ils prennent la chaîne, quelle qu'elle soit, et si elle est régulée par cette fonction, GetProcAddress lui est appliquée sans aucun paramètre. , , , , . , - kernel32.dll , , .

, , , , Hellgate: London. , , ! : « ! , »!



, , URL — YouTube! GetProcAddress, ProcAddress , , , , , ! , . , . , , ricroll, - !

: , . , - , , , dll . , . Blizzard , «, , – , ».

, , , command & control , «» Warden Punkbaster. WoW, , .

: .

: , . Punkbaster , , . window.name, Punkbaster. : «, , , IRC , , ».

, Punkbaster : «-, !», .

, . , , . . , .

: , , Diablo 3.



, – ? Blizzard . Blizzard . , , «» Blizzard, .

: , . , , , .

: , …

Josh Phillips: J'espère qu'il nous reste encore un peu de temps, alors passons à la salle des questions et réponses et continuons notre communication.

Mike Donnelly: Merci, DefCon!




Merci de rester avec nous. Aimez-vous nos articles? Vous voulez voir des matériaux plus intéressants? Soutenez-nous en passant une commande ou en le recommandant à vos amis, une réduction de 30% pour les utilisateurs Habr sur un analogue unique de serveurs d'entrée de gamme que nous avons inventés pour vous: Toute la vérité sur VPS (KVM) E5-2650 v4 (6 cœurs) 10 Go DDR4 240 Go SSD 1 Gbps à partir de 20 $ ou comment diviser le serveur? (les options sont disponibles avec RAID1 et RAID10, jusqu'à 24 cœurs et jusqu'à 40 Go de DDR4).

VPS (KVM) E5-2650 v4 (6 cœurs) 10 Go DDR4 240 Go SSD 1 Gbit / s jusqu'au printemps gratuitement lors du paiement pendant six mois, vous pouvez commander ici .

Dell R730xd 2 fois moins cher? Nous avons seulement 2 x Intel Dodeca-Core Xeon E5-2650v4 128 Go DDR4 6x480 Go SSD 1 Gbps 100 TV à partir de 249 $ aux Pays-Bas et aux États-Unis! Pour en savoir plus sur la création d'un bâtiment d'infrastructure. classe utilisant des serveurs Dell R730xd E5-2650 v4 coûtant 9 000 euros pour un sou?

Source: https://habr.com/ru/post/fr437790/


All Articles