CONNEXION
  • RetourJeux
    • Sorties
    • Hit Parade
    • Les + populaires
    • Les + attendus
    • Soluces
    • Tous les Jeux
    • Gaming
  • RetourActu Gaming
    • News
    • Astuces
    • Tests
    • Previews
    • Toute l'actu gaming
  • RetourBons plans
    • Bons plans
    • Bons plans Smartphone
    • Bons plans Hardware
    • Bons plans Image et Son
    • Bons plans Amazon
    • Bons plans Cdiscount
    • Bons plans Decathlon
    • Bons plans Fnac
    • Tous les Bons plans
  • RetourJVTech
    • Actus High-Tech
    • Intelligence Artificielle
    • Smartphones
    • Mobilité urbaine
    • Hardware
    • Image et son
    • Tutoriels
    • Tests produits High-Tech
    • Guides d'achat High-Tech
    • JVTech
  • RetourCulture
    • Actus Culture
    • Culture
  • RetourVidéos
    • A la une
    • Gaming Live
    • Vidéos Tests
    • Vidéos Previews
    • Gameplay
    • Trailers
    • Chroniques
    • Replay Web TV
    • Toutes les vidéos
  • RetourForums
    • Hardware PC
    • PS5
    • Switch 2
    • Xbox Series
    • Switch
    • Pokemon pocket
    • FC 25 Ultimate Team
    • League of Legends
    • Tous les Forums
  • PC
  • PS5
  • Xbox Series
  • Switch 2
  • PS4
  • One
  • Switch
  • iOS
  • Android
  • MMO
  • RPG
  • FPS
En ce moment Genshin Impact Valhalla Breath of the wild Animal Crossing GTA 5 Red dead 2
Liste des sujets

Fonctionnement d'un trainer

[exit]
[exit]
Niveau 5
30 novembre 2005 à 22:16:09

J´aimerai avoir quelques informations sur les trainers : ces petits programmes lancés avant ou pendant un jeu qui permettent nottament d´obtenir des vies infinies, toutes les armes etc...

Il me semble que le concept repose sur la modification de valeurs situées à des addresses en mémoire (par exemple modification de la variable correspondant aux vies etc...), mais comment cela fonctionne-il concrètement ?
De tels accès à des zones mémoires arbitraires sont autorisées par le systèmes d´exploitation ?
Comment savoir à quelles addresses sont situées les variables qui nous intéressent (j´imagine qu´il faut les chercher :-d ) et surtout comment faire pour retrouver la bonne addresse à chaque fois, vu qu´il n´y a aucune raison que les variables soient stockées à la même addresse entre 2 lancements du programme ?

Certains programmeurs poussent le concept à son paroxismes, c´est le cas il me semble de Multi Theft Auto, dont l´équipe a pu développer un mod multi sans sdk par ce genre de bidouilles.
Bref, dites moi tout :)

JeanYvesYves
JeanYvesYves
Niveau 10
30 novembre 2005 à 23:36:49

difficile cela : c´est au cas par cas :
d´abord, il faut faire un débuggage manuel, pour trouver l´emplacement de la variable, pour voir ce qu´il y a autour : souvent les variables sont stockées dans des structures, par exemple :

struct joueur
{
int vie;
int magie;
int defense;
char nom[50];
};

....

En général, moyennant quelques études de l´architecture au préalable (un int s´aligne par exemple toujours sur une adresse multiple de 4 sur un processeur intel 32 bits) tu sauras localiser une zone mémoire contigue dans laquelle seront stockées tes données.
Au début, ce sera initialisé de la meme façon, donc a toi, a l´initialisation, de trouver la structure en mémoire (suite d´octets, qui, plus elle sera longue, plus elle sera improbable de réapparaitre)
une fois que tu as repéré ça, dégage l´offset de la variable que tu veux : tu retrouves l´adresse en mémoire de ta variable de vie au lancement du programme...

Il ne te reste plus qu´a faire un programm parrallele qui toucheras a cette adresse. Essaie de préférence de charger ce programme dans le meme segment que la variable pour éviter les accés en mémoire non protégée...

Cela n´est que la théorie. Si ta prochaine question est "je veux faire ça, je veux tricher", alors je t´enverrai chier ou je ne te répondrai pas.
Si c´est juste pour ta culture, j´espere avoir pu répondre a tes questions.

godrik
godrik
Niveau 30
01 décembre 2005 à 14:53:34

il y a d´autres solutions.
certain jeu prevoit une utilisation multijoueur, il y a donc un serveur qui tourne, il peut suffir de se connecter dessus et d´envoyer la "bonne" commande pour obtenir ce que tu souhaites.

Une autre solution reste l´utilisation de RPC. en effet sous windows on doit toujours pouvoir appeler une fonction de l´exterieur regarde sur msdn a createremotethread.

[exit]
[exit]
Niveau 5
01 décembre 2005 à 17:22:53

C´est en effet juste pour la culture, ce qui m´intéressait principalement était en fait le fonctionnement de Multi Theft Auto (la manière dont ils mettaient le multi en oeuvre sans SDK), car après une recherche sur leur site, l´équipe disait s´être servi à la base du code source d´un trainer leur permettant après modification d´envoyer ce qu´ils voulaient au jeu.
Merci pour le réponses :)

lag-it
lag-it
Niveau 10
01 décembre 2005 à 20:32:51

http://msdn.microsoft.com/library/default.asp?url=/library/en-us/debug/base/writeprocessmemory.asp

Je crois que tout est dit :)

dnob700
dnob700
Niveau 10
01 décembre 2005 à 21:15:09

Et il n´y a pas besoin de droits spéciaux pour utiliser cette fonction ? incroyable...

Kelios
Kelios
Niveau 8
01 décembre 2005 à 21:43:52

Meuh si il faut des droits spéciaux, c´est écrit:
"The handle must have PROCESS_VM_WRITE and PROCESS_VM_OPERATION access to the process."

Je présume que ce ne sont pas des trucs très courants, comme semble dire le petit commentaire plus loin:
"Typically but not always, the process with address space that is being written to is being debugged."

Alors à moins que tu sois un déboggeur et que tu te crées ton process spécialement pour ça, tu pourra jamais les utiliser pour grand chose d´autre.

Mais! Je me trompes peut-être.

--------------------------------------------------
--------

Sinon, modifier les vars d´un programme de l´extérieur, non, ça ne se fait pas, normallement.
Trouver où sont les variables dans une virtual address space, ça, pas de problème. Il faut juste comprendre que les address spaces ne sont PAS interchangeables entre les programmes, du moins sous tout OS sous paging moderne. L´addresse 0x00400012 de ta variable dans ton programme Machin.exe et l´addresse 0x00400012 dans ton programme MachinTrainer.exe ne représentent pas la même "chose" (pas la même addresse physique en fait), surtout sous Windows.

C´est simple, pour interchanger des données, faut le plus souvent qu´autrement le demander, ou lui forcer la patte.

Le demander, ça peut être, par exemple, des appels aux fonctions de débogguage, c´est à dire trouver le moyen d´avoir un droit d´accès à ça. Comme j´ai mentionné plus haut, aucune idée comment on fait, maais en possiblement recréant l´environnement d´un déboggeur, c´est envisageable...

Le bidouiller(vous comprenez ce que je veux dire par là j´imagine, mais voilà bon, y´a de ces mots inderdits dans un post...), je ne vais pas te détailler comment on peut faire, c´est à la fois trop complexe pour toi probablement (à moins que tu aies des notions extensibles dans le fonctionnement de processus, multi-threading, exécution d´un programme sous un OS protégé, ect.), contraire à la charte, et moi même je n´y connais pas grand chose, donc mes explications seraient probablement fausses ou du moins s´éloignerait de la réalité.

Mais pour te donner une idée, on peut arriver à ses fins en modifiant le programme, en le forçant à se soumettre à ton programme (e.g. tu lui donne des ordres, il obéit, par exemple par communication interthreads), sauf que il faut pour ça modifier l´exécutable. Autant dire, c´est très,très,très loin d´être une chose élémentaire.
Y´a d´autres moyens dont j´aurais une idée comment faire, mais c´est trop rentrer dans les détails. Et puis bon y´a surement de meilleurs moyens.

Mais simplement, non: on ne modifie pas un programme simplement en trouvant l´addresse du var et en écrivant dessus. Et détourner pareilel sécurité est plus complexe que simplement "charger ce programme dans le meme segment que la variable", point de vue assez grossier (mais JYY l´a probablement fait exprès pour simplifier son explication) sur le concept.

Kelios
---------

Sous forums
  • Aide à l'achat Mac
  • Création de sites web
  • Création de Jeux
  • Linux
  • Programmation
  • Internet
  • Steam Deck
  • Macintosh
  • Hardware
La vidéo du moment