CRÉATION D'UN TRAINER POUR CHEATER : ECRITURE DANS UN PROCESS.
albert0
Messages postés249Date d'inscriptionmercredi 27 novembre 2002StatutMembreDernière intervention 9 août 2008
-
26 juin 2004 à 10:28
jihednond
Messages postés143Date d'inscriptionjeudi 27 mars 2008StatutMembreDerniè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.
jihednond
Messages postés143Date d'inscriptionjeudi 27 mars 2008StatutMembreDernière intervention 3 septembre 20111 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és1Date d'inscriptionsamedi 5 septembre 2009StatutMembreDerniè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és1Date d'inscriptionmardi 6 mars 2007StatutMembreDernière intervention20 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és104Date d'inscriptionvendredi 5 novembre 2004StatutMembreDernière intervention11 septembre 2008 23 oct. 2005 à 21:06
10/10 Merci à toi.
Mat_72005
Messages postés2Date d'inscriptionmardi 21 novembre 2000StatutMembreDernière intervention12 juillet 2005 12 juil. 2005 à 16:19
c'est beaucoup plus rapide avec fscanf !!
cs_AlexMAN
Messages postés1536Date d'inscriptionsamedi 21 décembre 2002StatutMembreDernière intervention24 mai 20091 14 juil. 2004 à 14:07
Ok merci krust ;)
cs_krust
Messages postés140Date d'inscriptionmercredi 3 juillet 2002StatutMembreDernière intervention19 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és1536Date d'inscriptionsamedi 21 décembre 2002StatutMembreDernière intervention24 mai 20091 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és1536Date d'inscriptionsamedi 21 décembre 2002StatutMembreDernière intervention24 mai 20091 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és140Date d'inscriptionmercredi 3 juillet 2002StatutMembreDernière intervention19 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és3Date d'inscriptionsamedi 3 avril 2004StatutMembreDernière intervention28 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és31Date d'inscriptiondimanche 15 juillet 2001StatutMembreDerniè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és140Date d'inscriptionmercredi 3 juillet 2002StatutMembreDernière intervention19 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és31Date d'inscriptiondimanche 15 juillet 2001StatutMembreDerniè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és140Date d'inscriptionmercredi 3 juillet 2002StatutMembreDernière intervention19 novembre 2006 26 juin 2004 à 14:12
Donc voilà, à votre demande j'ai changé le niveau à initié ;)
cs_krust
Messages postés140Date d'inscriptionmercredi 3 juillet 2002StatutMembreDernière intervention19 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és3Date d'inscriptionsamedi 3 avril 2004StatutMembreDernière intervention28 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és546Date d'inscriptionmardi 26 novembre 2002StatutMembreDernière intervention 4 mai 20071 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és14Date d'inscriptionmardi 17 juin 2003StatutMembreDernière intervention29 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és249Date d'inscriptionmercredi 27 novembre 2002StatutMembreDernière intervention 9 août 2008 26 juin 2004 à 10:28
13 sept. 2009 à 19:01
5 sept. 2009 à 18:22
20 mars 2007 à 13:12
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.
23 oct. 2005 à 21:06
12 juil. 2005 à 16:19
14 juil. 2004 à 14:07
14 juil. 2004 à 13:57
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 ;)
13 juil. 2004 à 21:04
13 juil. 2004 à 21:00
Merci ++
Alhexman
28 juin 2004 à 18:51
Aussi non, les jeux sont rarement packé (j'ai jamais vu un jeu packé) car les packs ralentissent leur execution.
28 juin 2004 à 18:45
Mais nous sommes ici sur un site de programmation pas de cr**ing !!
28 juin 2004 à 16:44
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)
28 juin 2004 à 16:06
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é ;)
27 juin 2004 à 13:36
par contre la partie d'insertion de code en mémoire est toujours interessante...sauf pour les programmes packés :-(
26 juin 2004 à 14:12
26 juin 2004 à 14:00
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.
26 juin 2004 à 13:21
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.
26 juin 2004 à 13:08
26 juin 2004 à 10:48
mais quand meme, ce n'est pas selon moi a classer en niveau expert.
26 juin 2004 à 10:28