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 :

Checksum dans un exe


Sujet :

C++

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre éprouvé Avatar de uriotcea
    Homme Profil pro
    Ingénieur / physicien
    Inscrit en
    Septembre 2003
    Messages
    1 301
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Ingénieur / physicien
    Secteur : Service public

    Informations forums :
    Inscription : Septembre 2003
    Messages : 1 301
    Par défaut Checksum dans un exe
    Bonjour,

    J'ai déjà évoqué ce probléme d'une maniére un peu différente mais sans arriver à la solutionner. J'ai un executable sous windows (gcc, C++) que je veux protéger. Je fait un checksum sur l'ensemble de l'exe, excepté une zone ou je vais ecrire ce résultat via un code externe. Cette zone est une chaine static qui est quelquepart dans le code. peut-importe ou. Elle est crée via une variable static, comme ci-dessous.
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
     
    char *Name_CS()
    {
      static char name_CS[]={"-ZONE_OU_JE_VAIS_ECRIRE_MON_CS"};
    }
    Au démarrage du code, je refais un checksum et je lis dans la chaine name_cs, le checksum intial. En cas de différence, le code a été modifié et est donc corrompu.
    Tous ca marche trés bien sous linux, mais sous windows lorque via mon programme externe je viens modofier la chaine pour y inscrire le checksum, cela rend le programme carrément instable.

    Qui a t-il dans les exe windows qui interdit de modifier une chaine static de la structure de l'executable?

  2. #2
    Membre Expert
    Homme Profil pro
    Étudiant
    Inscrit en
    Juin 2012
    Messages
    1 711
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Juin 2012
    Messages : 1 711
    Par défaut
    Hello,

    La protection me semble très légère et facile à bypasser.
    On peut très bien lancer le programme original, puis le modifier en mémoire une fois que le checksum à été validé, ou modifier le binaire et mettre à jour le checksum.
    On peut aussi attaquer la plus grosse faiblesse de ce genre de protection : laisser le calcul de checksum, laisser le cheksum original dans l'exe,
    mais virer le if(checksumCalcule != checksumStocke) { exit(1); }C'est seulement quelques je/jne à nop ou à remplacer par des jmp.

    (Sinon pas de réponse à ta question dsl ^^)

    edit: à moins que ce soit juste une vérification pour éviter les téléchargements corrompus et pas une protection contre le piratage

  3. #3
    Membre éprouvé Avatar de uriotcea
    Homme Profil pro
    Ingénieur / physicien
    Inscrit en
    Septembre 2003
    Messages
    1 301
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Ingénieur / physicien
    Secteur : Service public

    Informations forums :
    Inscription : Septembre 2003
    Messages : 1 301
    Par défaut
    Effectivement, ce n'est pas imparable. Cela dit, c'est un peu plus complexe que ca en réalité. Cela dit, ma question n'est pas liée à la qualité de la protection mais au plantage quelle provoque sans raison apparente

  4. #4
    Membre Expert
    Homme Profil pro
    Étudiant
    Inscrit en
    Juin 2012
    Messages
    1 711
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Juin 2012
    Messages : 1 711
    Par défaut
    Citation Envoyé par uriotcea Voir le message
    Qui a t-il dans les exe windows qui interdit de modifier une chaine static de la structure de l'executable?
    A priori je dirais "rien", je viens de tester avec la même fonction et ça ne pose pas de problèmes. (VS2010, testé en debug et release)

    Est-ce que ton checksum a la même taille que la chaîne de caractères que tu remplaces ? Si ce n'est pas le cas, l'optimisation du programme peut éventuellement poser des problèmes (taille de la chaîne codée en dur par exemple).

  5. #5
    Membre éprouvé Avatar de uriotcea
    Homme Profil pro
    Ingénieur / physicien
    Inscrit en
    Septembre 2003
    Messages
    1 301
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Ingénieur / physicien
    Secteur : Service public

    Informations forums :
    Inscription : Septembre 2003
    Messages : 1 301
    Par défaut
    Le checksum est codé sur 8 bits au milllieu de la chaine d'unr vingtaine de char.

  6. #6
    Membre chevronné
    Inscrit en
    Décembre 2010
    Messages
    290
    Détails du profil
    Informations forums :
    Inscription : Décembre 2010
    Messages : 290
    Par défaut
    Comment fait ton programme externe pour localiser l'endroit où se trouve la chaîne à modifier ?

  7. #7
    Membre éprouvé Avatar de uriotcea
    Homme Profil pro
    Ingénieur / physicien
    Inscrit en
    Septembre 2003
    Messages
    1 301
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Ingénieur / physicien
    Secteur : Service public

    Informations forums :
    Inscription : Septembre 2003
    Messages : 1 301
    Par défaut
    Il connait la chaine initiale et scute tout l'exe à sa recherche. Il l'a trouve plutot au début (30% de la taille taille totale) pour la version windows et vraiment à la fin pour linux. Je suppose que ca dépend ou son ranger les variables suivant les OS.

  8. #8
    Membre chevronné
    Inscrit en
    Décembre 2010
    Messages
    290
    Détails du profil
    Informations forums :
    Inscription : Décembre 2010
    Messages : 290
    Par défaut
    Quand tu dis "programme carrement instable", tu entends quoi par la ??
    Je ne serais pas surpris (mais je n'ai pas de machine sous windows pour tester) que le systeme a lui aussi un CRC ou un checksum qqconque et refuse de lancer ton binaire parce que ce CRC ne correspond plus.
    Edit : En fait, il me semble que la librarie imagehlp propose des fonctions pour mettre a jour ce checksum et d'une maniere generale manipuler des binaires.

Discussions similaires

  1. Inclure une DLL dans le .exe final?? possible?
    Par xavmax dans le forum C++Builder
    Réponses: 9
    Dernier message: 22/08/2005, 17h00
  2. Copier un fichier inclut dans le ".exe"
    Par xavmax dans le forum C++Builder
    Réponses: 5
    Dernier message: 18/08/2005, 15h12
  3. [VB.NET] lecture dans un exe
    Par cyrcroix dans le forum Windows Forms
    Réponses: 12
    Dernier message: 05/07/2005, 17h31
  4. Réponses: 1
    Dernier message: 05/10/2004, 15h51
  5. modifier l'adresse d'un dll dans un .exe
    Par Mr Meuble dans le forum Windows
    Réponses: 4
    Dernier message: 02/03/2004, 16h39

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