• STATISTIQUES
  • Il y a eu un total de 2 membres et 13399 visiteurs sur le site dans les dernières 24h pour un total de 13 401 personnes!


    Membres: 2 433
    Discussions: 3 585
    Messages: 32 832
    Tutoriels: 78
    Téléchargements: 38
    Sites dans l'annuaire: 58


  • ANNUAIRE
  • [FR] Forum-Webmaster
    Une communauté webmaster pour apporter / recevoir de l'aide en création de site internet. Webmaster...
    Webmaster
    [EN] hax.tor
    50 level de challenges mélangés
    Challenges
    [FR] Asp-php
    Tutoriaux sur ASP, PHP, ASP.net, XML, SQL, Javascript, HTML, VML - Scripts et ressources pour webmasters - Forums d&#...
    Programmation
    [EN] Bright Shadows
    JavaScript: 13, Exploit: 27, Crypto: 69, CrackIt: 52, Stegano: 67, Flash: 3, Programming: 16, Java-Applet: 10, Logic: 20...
    Challenges
    [EN] Defcon
    Lancé en 1992 par Dark Tangent, DEFCON est la plus ancienne et la plus grande conférence underground de...
    Hacking
    [FR] frameip
    le site de partage des connaissances du monde TCPIP
    Protocole
    [EN] SecurityFocus
    SecurityFocus a été conçu pour faciliter la discussion sur des sujets liés la sécu...
    Vulnérabilités

  • DONATION
  • Si vous avez trouvé ce site internet utile, nous vous invitons à nous faire un don du montant de votre choix via Paypal. Ce don servira à financer notre hébergement.

    MERCI!




Note de ce sujet :
  • Moyenne : 0 (0 vote(s))
  • 1
  • 2
  • 3
  • 4
  • 5
[C] Comment protéger la mémoire ???
29-04-2013, 21h59
Message : #1
Sh4dows Hors ligne
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" Rolleyes puis bien entendu, avec 2 petites recherches je me suis retrouvé avec full level, argent etc.. avant même d'avoir terminé le prologue Dodgy 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 :

#include <stdio.h>
#include <stdlib.h>

int main()
{
    int i;

    i = 0;
    while(i < 10){
        i += 1;
        printf("Vous gagnez 1 point ! (%d/10)\n", i);
        system("Pause");
    }
    return 0;
}
 


Résultat :
[Image: 1367264844-capture.png]

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 Wink
Faites ce que je dis et non ce que je fais !
+1 (0) -1 (0) Répondre
30-04-2013, 00h54 (Modification du message : 30-04-2013, 00h56 par b0fh.)
Message : #2
b0fh Hors ligne
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 Smile vous les jeunes vous savez pas ce qu'est un jeu réellement difficile </troll>
+1 (0) -1 (0) Répondre
30-04-2013, 17h11
Message : #3
sakiir Hors ligne
[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
+1 (0) -1 (0) Répondre
30-04-2013, 20h07 (Modification du message : 30-04-2013, 20h50 par OverDreams.)
Message : #4
OverDreams Hors ligne
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;}
+1 (0) -1 (0) Répondre
30-04-2013, 20h16
Message : #5
supersnail En ligne
Éleveur d'ornithorynques
*******



Messages : 1,614
Sujets : 72
Points: 466
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 Wink

(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
+1 (1) -1 (0) Répondre
30-04-2013, 21h04 (Modification du message : 30-04-2013, 21h15 par Sh4dows.)
Message : #6
Sh4dows Hors ligne
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 :

while (i < 10)
{
     i ++;
}
 

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 :

while (1){
     i ++;
}
 

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 !
+1 (0) -1 (0) Répondre
30-04-2013, 21h15
Message : #7
Yttrium Hors ligne
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 Wink
BufferoverfloW

Всё минется, одна правда останется
+1 (1) -1 (0) Répondre
01-05-2013, 10h06
Message : #8
Machin Hors ligne
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 ?)
+1 (1) -1 (0) Répondre
01-05-2013, 11h05
Message : #9
Sh4dows Hors ligne
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 !
+1 (0) -1 (0) Répondre
01-05-2013, 11h08
Message : #10
Machin Hors ligne
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.
+1 (0) -1 (0) Répondre
01-05-2013, 11h13 (Modification du message : 01-05-2013, 11h54 par Sh4dows.)
Message : #11
Sh4dows Hors ligne
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 Smile

J'ai compris du coup Smile

Voici le code ASM de la boucle :
Citation :00401B9C |> 895C24 04 /MOV DWORD PTR SS:[ESP+4],EBX ; |||
00401BA0 |. C70424 7430400>|MOV DWORD PTR SS:[ESP],test.00403074 ; |||ASCII "Vous gagnez 1 point ! (%d/10)
"
00401BA7 |. E8 44FFFFFF |CALL <JMP.&msvcrt.printf> ; ||\printf
00401BAC |. C70424 9330400>|MOV DWORD PTR SS:[ESP],test.00403093 ; ||ASCII "Pause"
00401BB3 |. E8 40FFFFFF |CALL <JMP.&msvcrt.system> ; |\system
00401BB8 |. 43 |INC EBX ; |
00401BB9 |. 83FB 0A |CMP EBX,0A ; |
00401BBC |.^75 DE \JNZ SHORT test.00401B9C ; |

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 :

CMP EBX,0A ; On compare EBX avec 10
JNZ SHORT test.00401B9C ; Si comparaison diffère on reboucle
 

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 Smile
Faites ce que je dis et non ce que je fais !
+1 (0) -1 (0) Répondre


Sujets apparemment similaires…
Sujet Auteur Réponses Affichages Dernier message
  Comment connaitre le language d'un logiciel ou... ThomasYato 1 1,122 03-08-2019, 08h08
Dernier message: supersnail
  [ASM] Prologue Epilogue ou comment récupérer sa stack Junky 2 1,055 31-08-2014, 20h42
Dernier message: octarin

Atteindre :


Utilisateur(s) parcourant ce sujet : 8 visiteur(s)
N-PN
Accueil | Challenges | Tutoriels | Téléchargements | Forum | Retourner en haut