web-dev-qa-db-fra.com

comment fonctionnent les robots de visée dans les jeux fps?

J'étais curieux de savoir si quelqu'un avait une expérience/des connaissances sur les robots de visée dans les jeux FPS en ligne tels que Counter-Strike. Je suis curieux et j'aimerais en savoir plus sur la façon dont le curseur sait se verrouiller sur un joueur adverse. Évidemment, si je voulais tricher, je pourrais aller télécharger des tricheurs, donc c'est plus une chose d'apprentissage. Qu'est-ce que tout cela implique? Accrochent-ils la souris/le clavier de l'utilisateur afin de déplacer le curseur à l'emplacement correct? Comment l'application de triche sait-elle exactement où pointer le curseur? L'application de triche doit pouvoir accéder aux données dans l'application de jeu, comment cela se fait-il?

EDIT: pour répondre à la question, comment les gens obtiennent-ils ces emplacements de mémoire connus pour récupérer les données? EDIT2: Disons que je trouve certaines valeurs que je veux à l'emplacement 0xbbbbbbbb en utilisant un programme de débogage ou un autre moyen. Comment puis-je maintenant accéder et utiliser les données stockées à cet emplacement dans l'application, car je ne possède pas cette mémoire, le jeu en a. Ou est-ce que j'y ai maintenant accès depuis que j'ai injecté dans le processus et que je peux simplement copier la mémoire à cette adresse en utilisant memcpy ou quelque chose?

Quelqu'un d'autre a quelque chose à ajouter? Essayer d'en apprendre le plus possible à ce sujet!

66
user105033

Quelque part dans la mémoire du jeu se trouve l'emplacement X, Y et Z de chaque joueur. Le jeu doit connaître ces informations pour savoir où afficher le modèle du joueur, etc. (bien que vous puissiez limiter la quantité d'informations que le client du jeu peut connaître en n'envoyant que les informations sur le joueur aux joueurs en vue).

Un aimbot peut scanner les emplacements de mémoire connus pour ces informations et les lire, lui donnant accès à deux positions - celle du joueur et celle des ennemis. La soustraction des deux positions (en tant que vecteurs) donne le vecteur entre les deux et il est simple à partir de là de calculer l'angle du vecteur de look actuel du joueur au vecteur d'angle souhaité.

En envoyant directement des informations au jeu (c'est trivial) et en affinant certaines constantes, vous pouvez le faire viser automatiquement assez rapidement. La partie la plus difficile du processus consiste à déterminer où les positions sont stockées dans la mémoire et à s'adapter à toute structure de données dynamique déplaçant les joueurs sur vous (comme l'abattage de tronc).

Notez que ceux-ci sont plus difficiles à écrire lorsque la randomisation d'adresse est utilisée, bien que ce ne soit pas impossible.

Edit: Si vous vous demandez comment un programme peut accéder à la mémoire d'autres programmes, la manière typique de le faire est via injection de DLL .

Edit: Étant donné que cela obtient toujours quelques hits, il existe plus de façons de travailler avec les aimbots qui sont plus populaires maintenant; à savoir écraser (ou patcher en place) Direct3D ou OpenGL DLL et examiner les appels de fonctions pour dessiner la géométrie et insérer votre propre géométrie (pour des choses comme les hacks muraux) ou obtenir les positions des modèles pour un aimbot.

70
Ron Warholic

Question intéressante - pas exactement votre réponse, mais je me souviens qu'au début de Counter-Strike, les gens remplaçaient leur opengl32.dll par un bâclé qui rendrait les polygones aussi transparents afin qu'ils puissent voir à travers les murs.

Les hacks se sont améliorés et sont devenus plus ennuyeux, et les gens sont devenus plus créatifs. Maintenant, Valve/Steam semble faire un bon travail pour les supprimer. Juste un petit avertissement si vous prévoyez de jouer avec ce genre de choses, Steam recherche les `` hacks '' et s'il en trouve, ils vous banniront définitivement

13
user110714

Beaucoup de "bots de visée" ne sont pas du tout des bots de visée mais des bots de déclenchement. Ce sont des processus d'arrière-plan qui attendent que votre réticule soit réellement sur une cible et tirent automatiquement. Cela peut être accompli de différentes manières, mais de nombreux jeux facilitent la tâche en affichant le nom de quelqu'un chaque fois que votre cible les dépasse ou une autre donnée en mémoire qu'un bot déclencheur peut identifier.

De cette façon, vous jouez en agitant la souris sur votre cible et dès que vous passez la souris dessus, cela déclenchera un tir sans que vous ayez à vous tirer.

Ils doivent toujours être en mesure de localiser ce genre de choses en mémoire et ont le même genre de problèmes que les "Aim bots".

10
Drew

Une autre méthode qui a été utilisée dans le passé consiste à effectuer une rétro-ingénierie du formatage des paquets réseau. Une attaque man-in-the-middle sur le flux de paquets (qui peut être effectuée sur le même système sur lequel le jeu s'exécute) peut fournir des positions de joueurs et d'autres informations connexes utiles. Des paquets falsifiés peuvent être envoyés au serveur pour déplacer le joueur, tirer ou faire toutes sortes de choses selon le jeu.

9
Alan

Découvrez la série de tutoriels de Fleep ici . Son code source C # entièrement commenté peut être téléchargé ici .

En bref:
Trouvez les coordonnées x y z de votre joueur, les coordonnées x y du curseur ainsi que les coordonnées x y z de tous les ennemis. Calculez la distance entre vous et l'ennemi le plus proche . Vous pouvez maintenant calculer les coordonnées du curseur x y nécessaires pour obtenir une visée automatique.

Alternativement, vous pouvez exclure les ennemis morts (la santé est de 0), dans ce cas, vous devez également trouver l'adresse de santé de l'ennemi. Les données relatives aux joueurs sont généralement proches les unes des autres en mémoire.

Encore une fois, consultez le code source pour voir en détail comment tout cela fonctionne.

5
BullyWiiPlaza

Edit: Je connais ce sujet, désolé Mais je pensais que cela aiderait le demandeur.

Ce que l'industrie du piratage n'a pas essayé, mais que j'ai expérimenté, c'est le détournement de socket. Cela peut sembler beaucoup plus qu'il ne l'est en réalité, mais en gros, il utilise les pilotes WinPCap pour se connecter aux connexions Internet du processus via TCP (Sockets), sans même s'approcher des décalages du processus.

Ensuite, vous devrez simplement apprendre comment les signaux TCP sont transférés et les stocker dans une table de hachage ou une classe multijoueur (paquet). Ensuite, après avoir récupéré les informations et les superposer la fenêtre (non accrochée), juste des étiquettes transparentes et des boîtes 2D sur l'écran du jeu fenêtré.

Je l'ai testé sur Call of Duty 4 et j'ai obtenu les emplacements de 4 joueurs via TCP, mais aussi comme Ron Warholic l'a dit: toutes les méthodes de piratage ne fonctionneront pas si un développeur de jeu a écrit un serveur de jeu uniquement afficher les joueurs lorsque l'utilisateur actuel devrait voir le joueur.

Et après avoir coupé la transmission de l'emplacement de ce joueur comme pour le X Y Z et le joueur ne sera plus stocké et ne sera pas rendu là pour arrêter le wallhack. Et les aimbots fonctionneront en quelque sorte, mais pas efficacement. Donc, de toute façon, si vous cherchez à créer un wallhack, ne vous connectez pas au processus, essayez d'apprendre WinPCap et connectez-vous aux signaux Internet. Quant aux jeux, ne recherchez pas les listes de processus pour les transmissions Internet. Si vous avez besoin d'un exemple qui utilise cela, lancez la recherche Rust Radar qui affiche la position du joueur sur une carte et génère également d'autres joueurs autour de vous qui sont envoyés via des transmissions Internet TCP et n'est pas connecté au jeu.

3
Callum Carmicheal