IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

C++ Discussion :

Protéger un compteur


Sujet :

C++

  1. #1
    Membre averti
    Profil pro
    Inscrit en
    Juillet 2007
    Messages
    23
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2007
    Messages : 23
    Par défaut Protéger un compteur
    Quelle technique utiliser pour obfusquer une variable qui sert de compteur afin qu'elle ne soit pas facilement repérée par un hacker ?

    Merci.

  2. #2
    Alp
    Alp est déconnecté
    Expert confirmé

    Avatar de Alp
    Homme Profil pro
    Inscrit en
    Juin 2005
    Messages
    8 575
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 36
    Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

    Informations forums :
    Inscription : Juin 2005
    Messages : 8 575
    Par défaut
    Tu pourrais détailler un peu plus le contexte ?
    Parce que bon un hacker qui va juste allé incrémenter une fois de trop un compteur dans un programme...

  3. #3
    Membre averti
    Profil pro
    Inscrit en
    Juillet 2007
    Messages
    23
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2007
    Messages : 23
    Par défaut
    Le contexte ? Eh bien je veux que en version démo mon soft soit limité à un certain nombre d'itérations. Si je fais un simple

    n++; if (n>100) {break;}

    il est facile de repérer en mémoire la variable qui s'incrémente et ensuite patcher le code pour faire sauter l'incrémentation ou faire sauter le if. Bref, le b-a ba du hacking. Je veux donc compliquer un peu les choses.

  4. #4
    Membre éclairé

    Profil pro
    Étudiant
    Inscrit en
    Juin 2006
    Messages
    78
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Juin 2006
    Messages : 78
    Par défaut
    Si je cherchais à cacher le fonctionnement, j'utiliserai des appels de fonctions polymorphiques plus qu'un simple branchement. Le hacker peut toujours trouver l'emplacement mémoire qui fait l'appel par déréférencement, avant qu'il ne trouve la bonne adresse relative sur laquelle brancher, il va s'en passer du temps...

  5. #5
    Membre Expert
    Avatar de Klaim
    Homme Profil pro
    Développeur de jeux vidéo
    Inscrit en
    Août 2004
    Messages
    1 717
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Développeur de jeux vidéo
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Août 2004
    Messages : 1 717
    Par défaut
    Est-ce qu'utiliser plusieurs "objets" ayant différents états, avec un ensemble d'état correspondant a la fin du compte rendrais les choses plus difficile a lire aussi?

  6. #6
    Expert éminent
    Avatar de Médinoc
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Septembre 2005
    Messages
    27 395
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 41
    Localisation : France

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Septembre 2005
    Messages : 27 395
    Par défaut
    Et aussi, obfusquer le compteur en le stockant XOR quelque chose...
    SVP, pas de questions techniques par MP. Surtout si je ne vous ai jamais parlé avant.

    "Aw, come on, who would be so stupid as to insert a cast to make an error go away without actually fixing the error?"
    Apparently everyone.
    -- Raymond Chen.
    Traduction obligatoire: "Oh, voyons, qui serait assez stupide pour mettre un cast pour faire disparaitre un message d'erreur sans vraiment corriger l'erreur?" - Apparemment, tout le monde. -- Raymond Chen.

  7. #7
    Membre averti
    Profil pro
    Inscrit en
    Juillet 2007
    Messages
    23
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2007
    Messages : 23
    Par défaut
    Merci pour vos réponses.

    Si je cherchais à cacher le fonctionnement, j'utiliserai des appels de fonctions polymorphiques plus qu'un simple branchement. Le hacker peut toujours trouver l'emplacement mémoire qui fait l'appel par déréférencement, avant qu'il ne trouve la bonne adresse relative sur laquelle brancher, il va s'en passer du temps...
    Hum, oui, je vais y réfléchir, merci pour l'idée.

    Est-ce qu'utiliser plusieurs "objets" ayant différents états, avec un ensemble d'état correspondant a la fin du compte rendrais les choses plus difficile a lire aussi?
    Pas bête !

    Et aussi, obfusquer le compteur en le stockant XOR quelque chose...
    effectivement le résultat d'une encryption xor n'est pas linéaire.


    De mon côté j'ai trouvé la bibliothèque OBCODE-1.0.5 ici : http://echelon.pl/pubs/

    ou alors utiliser une fonction non linéaire.

  8. #8
    Expert confirmé
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Décembre 2003
    Messages
    3 549
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Essonne (Île de France)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels

    Informations forums :
    Inscription : Décembre 2003
    Messages : 3 549
    Par défaut
    Quelle technique utiliser pour obfusquer une variable qui sert de compteur afin qu'elle ne soit pas facilement repérée par un hacker ?
    Le seul moyen d'empêcher cela est d'empêcher l'exécution de programmes non signés.
    C'est-à-dire faire du Trusted Computing.

  9. #9
    Membre Expert Avatar de gnto
    Homme Profil pro
    Ingénieur système logiciel
    Inscrit en
    Janvier 2006
    Messages
    923
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 42
    Localisation : France, Gironde (Aquitaine)

    Informations professionnelles :
    Activité : Ingénieur système logiciel
    Secteur : Aéronautique - Marine - Espace - Armement

    Informations forums :
    Inscription : Janvier 2006
    Messages : 923
    Par défaut
    n++; if (n>100) {break;}

    Quand le cracker va désassembler ton binaire, et qu'avec quelques outils, connaitre l'endroit de la dite séquence de saut, il n'aura plus qu'a inverser le saut conditionnel

  10. #10
    Membre expérimenté Avatar de Twindruff
    Inscrit en
    Janvier 2005
    Messages
    216
    Détails du profil
    Informations forums :
    Inscription : Janvier 2005
    Messages : 216
    Par défaut
    Pour moi c'est plutôt le test qu'il faut obfusquer, parce que pour cracker, le plus simple est de partir du message d'erreur et de regarder quelle en est l'origine et on va forcément tomber sur ce test (en se fichant de comment on en est arrivé là).

  11. #11
    Membre averti
    Profil pro
    Inscrit en
    Juillet 2007
    Messages
    23
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2007
    Messages : 23
    Par défaut
    Oui, oui, je suis bien d'accord que le 'if' est un gros point faible. Je vais essayer de mettre des instructions indispensables dedans.

  12. #12
    Membre Expert
    Avatar de Klaim
    Homme Profil pro
    Développeur de jeux vidéo
    Inscrit en
    Août 2004
    Messages
    1 717
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Développeur de jeux vidéo
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Août 2004
    Messages : 1 717
    Par défaut
    Dans ce cas, autant en faire une conséquence de variation d'état des données? J'imagine que c'est possible mais difficile a concevoir.

  13. #13
    Membre averti
    Profil pro
    Inscrit en
    Juillet 2007
    Messages
    23
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2007
    Messages : 23
    Par défaut
    Tu veux dire imbriquer le contenu du 'if' avec ce qui se trouve à l'extérieur peut être ?

    Par ce que "en faire une conséquence de variation d'état des données" c'est justement le propre d'un 'if'...

  14. #14
    Membre averti
    Profil pro
    Inscrit en
    Juillet 2008
    Messages
    28
    Détails du profil
    Informations personnelles :
    Âge : 42
    Localisation : France, Rhône (Rhône Alpes)

    Informations forums :
    Inscription : Juillet 2008
    Messages : 28
    Par défaut
    Bon je suis pas spécialiste des cracks et autres désassemblages, mais si je voulais protéger un truc, je le rendrai indispensable à l'exécution correcte du programme, si ils sont modifiés le programme tournera pas (ou mal )

    en l'occurrence un truc tout con rends ton problème incraquable.
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    int tab[100];
     
    n=-1;
    i = 14064//clé aléatoire bien sur
    tab[i - 14064] = true;
    i++;
    n++;if(tab[n] == true){break;}
    Craquer n ne suffit plus, définir que i fait partie du système de sécurité devient difficile et craquer la condition du if provoque une seg fault ...

  15. #15
    Membre Expert Avatar de gnto
    Homme Profil pro
    Ingénieur système logiciel
    Inscrit en
    Janvier 2006
    Messages
    923
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 42
    Localisation : France, Gironde (Aquitaine)

    Informations professionnelles :
    Activité : Ingénieur système logiciel
    Secteur : Aéronautique - Marine - Espace - Armement

    Informations forums :
    Inscription : Janvier 2006
    Messages : 923
    Par défaut
    Citation Envoyé par ThePiiX Voir le message
    Craquer n ne suffit plus, définir que i fait partie du système de sécurité devient difficile et craquer la condition du if provoque une seg fault ...
    seg fault et en quoi une inversion de l'égalité provoque un segfault

  16. #16
    Membre averti
    Profil pro
    Inscrit en
    Juillet 2008
    Messages
    28
    Détails du profil
    Informations personnelles :
    Âge : 42
    Localisation : France, Rhône (Rhône Alpes)

    Informations forums :
    Inscription : Juillet 2008
    Messages : 28
    Par défaut
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    n = 99;
     
    n++;
     
    n = 100;
     
    (tab[100] != true)
    index out of array bounds ... (au pire si la condition est rappelée if(1), tab[i - 14064] plantera à la place ...)

  17. #17
    Membre Expert
    Avatar de Klaim
    Homme Profil pro
    Développeur de jeux vidéo
    Inscrit en
    Août 2004
    Messages
    1 717
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Développeur de jeux vidéo
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Août 2004
    Messages : 1 717
    Par défaut
    ZCode> Je pensais à un moyen de faire varier des valeurs de manières a ce que la conséquence induite soit le blocage du jeu. Plus il y aurait de variables plus ça serait complexe d'arriver a ce résultat mais aussi de le cracker.


    Maintenant, je vois bien le concept, mais c'est difficile d'imaginer une imlpémentation. Peut être un exemple simple serait ce qu'ont fait certains jeux par le passé : la qualitée de controle du personnage joué se dégrade avec le temps par exemple, de manière irreversible. Attention aux conséquences sur le joueur par contre - toujuors néfaste.
    Si tu ajoutes à ça un message dont la valeur alpha est dépendente dans le temps d'une fonction exponentielle, tu peux rendre ce message visible au bout d'un certain temps sans if.

    Je ne suis pas expert, mais pas mal de mecs expérimentés disent aussi que l'idéal d'une protection, si il doit y en avoir une, c'est d'obliger le cracker a jouer longtemps pour arriver a voir la protection. De cette manière tu te fais un client potentiel.

  18. #18
    Expert confirmé

    Homme Profil pro
    Ingénieur systèmes et réseaux
    Inscrit en
    Février 2007
    Messages
    4 253
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : Ingénieur systèmes et réseaux
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Février 2007
    Messages : 4 253
    Billets dans le blog
    3
    Par défaut
    Haaaa... donc on parle d'un jeu...
    Dans ce cas, il ne sert à rien d'obfusquer la valeur (c'est se prendre le choux pour rien, et perdre son temps face à des milliers de pseudo-hackers qui eux ont tout leur temps, puisqu'il ont rien d'autre à f...re).

    Par contre, avoir un système que vérifie le comportement de la valeur et adapte le jeu en conséquence (voir crashe de temps en temps), ça c'est bien plus difficile à vérifier.

    Exemple: Une valeur "gold" qui, si elle augmente brusquement alors qu'aucun évenement pouvant en générer n'ai eu lieu, fait que plus aucun marchand n'accepte d'acheter/vendre... ou des ennemis plus nombreux/aggressifs...

    Pour ton idée d'utilisations limitée... c'est pareil...
    Stocke les valeurs à plusieurs endroits différents, avec des xor différents (par exemple avec le code lui-même), et vérifie leur cohérence.... Si pas cohérent, alors fait adopter au programme une attitude... mesquine (surtout ne dit pas tout de suite 'espece de hacker', il vaut mieux lui faire perdre 2h à comprendre que ca ne marche pas, plutôt que lui réveler tout de suite qu'on l'a repéré).

Discussions similaires

  1. Protéger une disquette contre la copie
    Par benzaza dans le forum Assembleur
    Réponses: 20
    Dernier message: 16/01/2005, 10h42
  2. protéger une table
    Par david60 dans le forum Bases de données
    Réponses: 3
    Dernier message: 24/12/2004, 16h54
  3. Comment protéger ses sources?
    Par Titeuf21121 dans le forum Autres Logiciels
    Réponses: 7
    Dernier message: 25/03/2004, 06h47
  4. Remise à 0 d'un compteur automatique
    Par missllyss dans le forum SQL
    Réponses: 4
    Dernier message: 15/12/2003, 16h46
  5. Migration Access > SQL Server (suite) : Compteur
    Par LadyArwen dans le forum MS SQL Server
    Réponses: 3
    Dernier message: 06/03/2003, 14h08

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo