[C] Comment protéger la mémoire ???
|
29-04-2013, 21h59
Message : #1
|
|
Sh4dows
Tweetos Messages : 293 Sujets : 5 Points: 49 Inscription : Dec 2012 |
[C] Comment protéger la mémoire ???
io,
Récemment (hier), j'ai joué à Dead Island 2 et je me suis dis pourquoi ne pas essayé d'ajouter de la money, de l'xp, des munitions etc.. J'ai alors pris "Cheat Engine" puis bien entendu, avec 2 petites recherches je me suis retrouvé avec full level, argent etc.. avant même d'avoir terminé le prologue Bref de l'édition mémoire pour ceux qui ne l'avaient pas encore compris. J'ai fais quelques tests, par exemple celui ci : Code C :
Résultat : On remarque que ma variable est supérieur à 10 logique puisque je viens de l'éditer 42 => +1, le problème est que mon programme fais comme si cela n'était pas le cas ! J'me retrouvre avec un genre de while(1) au lieu du "i<10" .. Du coup, savez vous-pourquoi cela fais ça ? Et ensuite est il possible de bloquer l'édition mémoire (windows/linux) sans avoir recours un un truc du genre "tuer le processus cheat engine" Merci d'avance
Faites ce que je dis et non ce que je fais !
|
|
30-04-2013, 00h54
(Modification du message : 30-04-2013, 00h56 par b0fh.)
Message : #2
|
|
b0fh
Membre actif Messages : 210 Sujets : 17 Points: 309 Inscription : Jul 2012 |
RE: [C] Comment protéger la mémoire ???
Hello,
Pour être certain il faudrait regarder la sortie asm du compilo, il y a toutes sortes d'optimisations qui pourraient causer un problème comme ça. Pour se protéger de l'édition mémoire, ça dépend qui est l'adversaire. Tu peux essayer d'empêcher les debuggers de s'attacher a ton processus, mais il restera toujours possible de tricher, par exemple en faisant tourner le programme dans une VM avec un debugger attaché sur la VM. En théorie, avec les puces TCPA présentes dans les machines récentes, il est possible de stocker des clefs de chiffrement dedans, et d'avoir un mécanisme de DRM avec lequel le programme sera chiffré, et qui ne pourra être déchiffré que si l'OS et le bootloader sont d'origine. Evidemment c'est supposer que l'OS et le bootloader sont exempts de bugs, ce qui est complètement irréaliste. Mais ça permettrait quand même de s'assurer que le programme ne tourne pas dans une VM et qu'il n'y a pas eu d'attaque low-level sur l'intégrité de l'OS pour contourner sa sécurité. PS y'a pas besoin de cheater à Dead Island, il est déja assez facile comme ça vous les jeunes vous savez pas ce qu'est un jeu réellement difficile </troll> |
|
30-04-2013, 17h11
Message : #3
|
|
sakiir
[sakiir@Ubuntu]:~$ ./ExploitMe ShellC0de Messages : 411 Sujets : 51 Points: 34 Inscription : Sep 2012 |
RE: [C] Comment protéger la mémoire ???
Je e suis mis pas mal a l'edition memoire , au cheating etc ..
Et pour ca , c'es le programme qui peut verifier la memoire de lui meme. En Jeu video c'est anti-cheat , qui vérifie les nom de processus etc .. Il y a plusieurs sécurité differente |
|
30-04-2013, 20h07
(Modification du message : 30-04-2013, 20h50 par OverDreams.)
Message : #4
|
|
OverDreams
Membre actif Messages : 68 Sujets : 3 Points: 4 Inscription : Oct 2012 |
RE: [C] Comment protéger la mémoire ???
Cheat Engine modifie les adresses de la mémoire tu peux pas protéger parfaitement comme ça il me semble
Code : While (1) {Orgasm;} |
|
30-04-2013, 20h16
Message : #5
|
|
supersnail
Éleveur d'ornithorynques Messages : 1,609 Sujets : 71 Points: 465 Inscription : Jan 2012 |
RE: [C] Comment protéger la mémoire ???
Ben si, tu peux par exemple foutre les variables d'état du jeu dans une structure, calculer un checksum de ce qui est contenu dans la structure à chaque "tour", et si le checksum diffère de celui de la fin du tour précédent, on détecte un cheat
(Bon la protection n'est pas parfaite, étant donné qu'on peut aussi modifier le checksum, mais bon faut avoir des compétences en RE pour comprendre comment est foutu l'algo de calcul du checksum). Ensuite on peut toujours coupler ça à des anti-debug/recherche de process, ou pour les plus hardcore, aller directement hooker les APIs de debug au niveau du kernel (même si ça devient de plus en plus difficile avec PatchGuard/les drivers qui doivent être signés sous win7 x64). Anyway, comme le dit b0fh y'a toujours la possibilité de faire tourner le bordel dans une VM & de manipuler la mémoire de la VM directement (ou d'agir au kernel debugger, mais là c'est sortir la bombe atomique pour tuer une mouche)
Mon blog
Code : push esp ; dec eax ; inc ebp ; and [edi+0x41],al ; dec ebp ; inc ebp "VIM est merveilleux" © supersnail |
|
30-04-2013, 21h04
(Modification du message : 30-04-2013, 21h15 par Sh4dows.)
Message : #6
|
|
Sh4dows
Tweetos Messages : 293 Sujets : 5 Points: 49 Inscription : Dec 2012 |
RE: [C] Comment protéger la mémoire ???
Merci pour vous réponses, c'est très intéressant par contre un problème se pose !
Citation :...si le checksum diffère de celui de la fin du tour précédent, on détecte un cheat..Cela fonctionne il en pratique car déjà en faisant un truc du genre : Code C :
Puis en modifiant ma variable i (Cheat Engine > on lui attribut 42 comme valeur par exemple), et bien je ne peux plus sortir de ma boucle !!! Le programme fais comme si j'avais ceci : Code C :
Pourtant i (vaut 42) et est bien plus grand que 10 ... Et là je me demande pourquoi cela fais ça ? @supersnail : Ce que je veux dire, c'est comment tu veux faire un checksum d'une variable qui dit toujours "Cey bon" et ceci peut importe les opérateurs de comparaison ?? Je vous invite à essayé pour vous rendre compte de la chose ><
Faites ce que je dis et non ce que je fais !
|
|
30-04-2013, 21h15
Message : #7
|
|
Yttrium
Membre actif Messages : 106 Sujets : 14 Points: 48 Inscription : Jul 2012 |
RE: [C] Comment protéger la mémoire ???
Si tu regarde le code en assembleur avec ollydbg ou autre tu comprendra surement pourquoi
|
|
01-05-2013, 10h06
Message : #8
|
|
Machin
Membre actif Messages : 60 Sujets : 1 Points: 16 Inscription : Apr 2013 |
RE: [C] Comment protéger la mémoire ???
Oui moi je pense que ton compilo a put, par exemple, déplier ta boucle. Du coup meme en mettant 42 à un moment, il va faire le contenu de la boucle 10 fois tout de même (tu as testé pour vérifier si c'etait equivlant à un while(1) ou juste un nombre de boucle fixe ?)
|
|
01-05-2013, 11h05
Message : #9
|
|
Sh4dows
Tweetos Messages : 293 Sujets : 5 Points: 49 Inscription : Dec 2012 |
RE: [C] Comment protéger la mémoire ???
C'est équivalent à un while(1) !!!
Faites ce que je dis et non ce que je fais !
|
|
01-05-2013, 11h08
Message : #10
|
|
Machin
Membre actif Messages : 60 Sujets : 1 Points: 16 Inscription : Apr 2013 |
RE: [C] Comment protéger la mémoire ???
bah alors faut regarder le code ASM pour comprendre pourquoi.
|
|
01-05-2013, 11h13
(Modification du message : 01-05-2013, 11h54 par Sh4dows.)
Message : #11
|
|
Sh4dows
Tweetos Messages : 293 Sujets : 5 Points: 49 Inscription : Dec 2012 |
RE: [C] Comment protéger la mémoire ???
Citation :Si tu regarde le code en assembleur avec ollydbg ou autre tu comprendra surement pourquoi Wink Citation :bah alors faut regarder le code ASM pour comprendre pourquoi.J'vais fais ça alors J'ai compris du coup Voici le code ASM de la boucle : Citation :00401B9C |> 895C24 04 /MOV DWORD PTR SS:[ESP+4],EBX ; ||| Quand on dit, "tant que i < 10", le compilo lui traduit ça en : tant que ma variable (ici registre EBX) n'est pas égale à 10, je dois reboucler. Code ASM :
Du coup, si par malheur, notre variable passe a une valeur supérieur à 10 (0A ou A), la condition ne pourra jamais être remplie et le programme continuera à jump indéfiniement. D'ou le while (1) .. Merci à tous pour vos réponses
Faites ce que je dis et non ce que je fais !
|
|
« Sujet précédent | Sujet suivant »
|
Sujets apparemment similaires… | |||||
Sujet | Auteur | Réponses | Affichages | Dernier message | |
Comment connaitre le language d'un logiciel ou... | ThomasYato | 1 | 111 |
03-08-2019, 08h08 Dernier message: supersnail |
|
[ASM] Prologue Epilogue ou comment récupérer sa stack | Junky | 2 | 262 |
31-08-2014, 20h42 Dernier message: octarin |
Utilisateur(s) parcourant ce sujet : 2 visiteur(s)