CRÉATION D'UN TRAINER POUR CHEATER : ECRITURE DANS UN PROCESS.

albert0 Messages postés 249 Date d'inscription mercredi 27 novembre 2002 Statut Membre Dernière intervention 9 août 2008 - 26 juin 2004 à 10:28
jihednond Messages postés 143 Date d'inscription jeudi 27 mars 2008 Statut Membre Dernière intervention 3 septembre 2011 - 13 sept. 2009 à 19:01
Cette discussion concerne un article du site. Pour la consulter dans son contexte d'origine, cliquez sur le lien ci-dessous.

https://codes-sources.commentcamarche.net/source/24006-creation-d-un-trainer-pour-cheater-ecriture-dans-un-process

jihednond Messages postés 143 Date d'inscription jeudi 27 mars 2008 Statut Membre Dernière intervention 3 septembre 2011 1
13 sept. 2009 à 19:01
wow c'est génial comme tutoriel sa ressemble au cracking merci et bonne continuation 10/10
vazdah Messages postés 1 Date d'inscription samedi 5 septembre 2009 Statut Membre Dernière intervention 5 septembre 2009
5 sept. 2009 à 18:22
je suis membre privé e je peux pas télécharger les fichers comment je fait?
lapin3k Messages postés 1 Date d'inscription mardi 6 mars 2007 Statut Membre Dernière intervention 20 mars 2007
20 mars 2007 à 13:12
Ton code est bien mais tu quand tu ouvres un Handle, tu devrais le fermer par la suite sinon ça laisse des fuites de mémoire importantes.

Par exemple, avant d'exécuter WriteProcessMemory je te conseillerais avant d'exécuter SuspendThread, c'est plus sur et après avoir exécuter WriteProcessMemory, tu devrais peut-être y rajouter un FlushInstructionCache pour plus de sûreté.

Termine ensuite avec CloseHandle.
cs_NeoUmbrella Messages postés 104 Date d'inscription vendredi 5 novembre 2004 Statut Membre Dernière intervention 11 septembre 2008
23 oct. 2005 à 21:06
10/10 Merci à toi.
Mat_72005 Messages postés 2 Date d'inscription mardi 21 novembre 2000 Statut Membre Dernière intervention 12 juillet 2005
12 juil. 2005 à 16:19
c'est beaucoup plus rapide avec fscanf !!
cs_AlexMAN Messages postés 1536 Date d'inscription samedi 21 décembre 2002 Statut Membre Dernière intervention 24 mai 2009 1
14 juil. 2004 à 14:07
Ok merci krust ;)
cs_krust Messages postés 140 Date d'inscription mercredi 3 juillet 2002 Statut Membre Dernière intervention 19 novembre 2006
14 juil. 2004 à 13:57
Lors de l'éxecution d'un programme, l'os se charge de le mettre en mémoire, et donc de lui alloué une place en mémoire.
Depuis les pc multitaches, une séparation de la mémoire a été requise pour éviter que les processus se marche dessu.
De plus sur les processeur 16bits, on ne pouvait que stocké 1mo d'address, pour remédier à ces problèmes on a utilisé les segments.
Et les segment sont divisé en Offset.
Il suffit alors pour trouvé l'address linéaire de faire Segment + Offset
Par exemple :
08f10x0100 (Segment : 08f10 || offset : 0100)
donnera l'address linéaire : 09010h.
Donc , oui les jmp ne point pas le bonne address linéaire mais elles sont corrigé par le décalage de segment.
Car prend n'importe quelle série de nombres et ajoute x à tout ces nombres, leur décalage restera identique.

A puis, les hacks patch le jeu en mémoire car on a pas forcément envie de cheater toute sa vie ;)
Et donc si tu patch l'exe sur le disque, il sera hacké à tout les lancements et donc impossible de retrouver un jeu normal.

Voilà AlexMan ;)
cs_AlexMAN Messages postés 1536 Date d'inscription samedi 21 décembre 2002 Statut Membre Dernière intervention 24 mai 2009 1
13 juil. 2004 à 21:04
et puis pourquoi effectuer les changements a l'execution ? Ces modifications ne seront pas effectives, donc a chak chargement du prog, tu devras lancer le trainer...Donc pourquoi ne pas simplement faire un petit patch ?
cs_AlexMAN Messages postés 1536 Date d'inscription samedi 21 décembre 2002 Statut Membre Dernière intervention 24 mai 2009 1
13 juil. 2004 à 21:00
Kelk chose que jne comprends pas : les adresses de l'exe non executé et executé sont totalement differente, non ? RVA (Relative Virtual Address) si jne me trompe pas, donc je ne vois pas comment tu peux recuperer l'adresse ds l'exe desassemblé et ensuite effectuer les changements a l'execution...Si tu pouvais m'eclairer !

Merci ++

Alhexman
cs_krust Messages postés 140 Date d'inscription mercredi 3 juillet 2002 Statut Membre Dernière intervention 19 novembre 2006
28 juin 2004 à 18:51
Je ne te suis pas bien, toutes les adresses sont alloué dynamiquement (DMA), c'est donc le code que l'on patch qui lui ne peut pas changer aussi non tout les jump sont décallés et le prog perd completement les pédales,...
Aussi non, les jeux sont rarement packé (j'ai jamais vu un jeu packé) car les packs ralentissent leur execution.
cs_jG Messages postés 3 Date d'inscription samedi 3 avril 2004 Statut Membre Dernière intervention 28 juin 2004
28 juin 2004 à 18:45
Gerald a raison, le programme a bo etre decrypte en memoire, les adresses ne sont jamais les memes. Le packer decompresse le programmes dans des adresses aleatoires, on ne peut donc pas prevoir a l avance ou l'on doit ecrire (c'est le but des packer moderne, sinon un simple loader suffirait). Il faut pour cela soit unpacker soit faire du hard patching...
Mais nous sommes ici sur un site de programmation pas de cr**ing !!
cs_Gerald Messages postés 31 Date d'inscription dimanche 15 juillet 2001 Statut Membre Dernière intervention 8 janvier 2009
28 juin 2004 à 16:44
Oui, bien heureusement! :) ou alors on est sous un nouveau type de machine!
Le problème est que si mes souvenirs sont bons un packer comme aspack nécessite un changement des droits de la zone de mémoire du prog(voir VirtualProtect) pour l'écriture. Quand à UPX, il se décompacte très facilement avec un debugger(OllyDebug)
cs_krust Messages postés 140 Date d'inscription mercredi 3 juillet 2002 Statut Membre Dernière intervention 19 novembre 2006
28 juin 2004 à 16:06
les programmes packés (UPX, ASPACK, ...) sont des executables compressés par un packer qui y ajoute une routine de décompression.
L'executable n'est donc pas visible dans un désasembleur mais il l'est bien quand il est lancé, car la routine le décompresse et puis lui donne la main, donc en mémoire, on la l'executable telle qu'il a été compilé.
Il y a ce qu'on appel des Dumper, qui charge les processus en mémoire (donc unpacké), l'executable peut alors être lu dans le d"sasembleur ! Mais, il ne peut pas être lancé (sauf si le packer n'inverse pas des segments etc) Ce genre de dumpers s'appellent les dumpers Generiques, car il permettent juste de rendre l'executable lisible mais le fichier dumper ne peut pas être executer (errers...)
Ils y a d'autres unpackers plus performant qui eux, remettent les segments à leur place. Les exe unpacké par cette méthode peuvent normalement être éxécutés!
Après, il reste l'extraction manuel, mais il est beaucoup plus lent, sont avantage c'est qu'on peut enlever les codes qui vérifie la présence du pack, ce que ne fait pas les unpackers automatique ;)

Donc un fichier packé, est tout a fait lisible en mémoire aussi non, il ne pourrait pas être éxécuté ;)
cs_Gerald Messages postés 31 Date d'inscription dimanche 15 juillet 2001 Statut Membre Dernière intervention 8 janvier 2009
27 juin 2004 à 13:36
Oui c'est vrai que ici on a a faire à un tout petit jeu dont on connai la conception donc c un peu plus limite à faire sur des jeu du genre starcraft; on a tout de suite besoin d'un bon debugger...
par contre la partie d'insertion de code en mémoire est toujours interessante...sauf pour les programmes packés :-(
cs_krust Messages postés 140 Date d'inscription mercredi 3 juillet 2002 Statut Membre Dernière intervention 19 novembre 2006
26 juin 2004 à 14:12
Donc voilà, à votre demande j'ai changé le niveau à initié ;)
cs_krust Messages postés 140 Date d'inscription mercredi 3 juillet 2002 Statut Membre Dernière intervention 19 novembre 2006
26 juin 2004 à 14:00
j'aurais bien été plus long dans la partie patchage de code, mais ça relève plus de l'asm et donc n'a rien avoir avec cppfrance.
Mais c'est vrai qui si on évalue que le code c++, il n'est pas d'un très haut niveau, mais son utilisation demande un certain savoir faire.

Aussi non merci de vos commentaires, je vais sans doute poster d'autres trainers, mais plustot sur le réseau asm alors, où j'expliquerais mieux les étapes du debuging.
cs_jG Messages postés 3 Date d'inscription samedi 3 avril 2004 Statut Membre Dernière intervention 28 juin 2004
26 juin 2004 à 13:21
Bien non ,pas au niveau expert,

La partie de debugging et de recherche est une question d'habitude, mais dans le cas montré ici cela ne releve pas du niveau expert.

Que ferais tu d un prog packe par une rmp (ready made protection) et dont les adresses en memoire changent a chaque chargement, il faudrait trouvé d autre techniques d'approche, de plus, de nombreuses applications surveillent les accès en mémoire a leur segment de code ... Cela releve d un niveau expert.

Dans le cas du game hacking, le tutorial proposé reste a un stade debutant . De plus sur cppfrance, nous ne jugerons que la partie c++, qui ici n'est pas d une grande difficulté.

Je ne remet aucunement en cause l'utilité et l'originalité de cette source.
MoDDiB Messages postés 546 Date d'inscription mardi 26 novembre 2002 Statut Membre Dernière intervention 4 mai 2007 1
26 juin 2004 à 13:08
Pas au niveau expert?? attends va trouver une variable i dans ce charabia qu'est l'assembleur...Parce que la je vois pas comment tu trouves le i...
oBsEC Messages postés 14 Date d'inscription mardi 17 juin 2003 Statut Membre Dernière intervention 29 juin 2006
26 juin 2004 à 10:48
aucune critique particulière, tu montres en gros le principe, je trouve que c'est plutot interessant comme post.

mais quand meme, ce n'est pas selon moi a classer en niveau expert.
albert0 Messages postés 249 Date d'inscription mercredi 27 novembre 2002 Statut Membre Dernière intervention 9 août 2008
26 juin 2004 à 10:28
VIve T-Search ;)
Rejoignez-nous