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 :

Binaire auto modifiable


Sujet :

C++

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre averti
    Homme Profil pro
    Inscrit en
    Juin 2007
    Messages
    55
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Juin 2007
    Messages : 55
    Par défaut Binaire auto modifiable
    Bonjour,

    Comment faut il s'y prendre pour qu'un exécutable puisse s'auto-éditer?

    Je voudrais tagger un exe lors de sa première exécution pour qu'il ne puisse plus être exécuté sur une autre machine par la suite.

    Je pensais déclarer une constante bien identifiable qqpart dans le code:
    const long int id = 0xf81f81f81f81.
    Lors de l'execution :
    soit le code est égale à 0xf81f81f81f81 -> on le remplace par un id généré par rapport au hardware de la machine.

    Le code correspond à l'id hardware, on continue l'exécution du programme sinon exit.

    Évidement tout est piratable, etc...

    Connaissez vous des sites qui expliquent des techniques s'y rapportant?

  2. #2
    yan
    yan est déconnecté
    Rédacteur
    Avatar de yan
    Homme Profil pro
    Ingénieur expert
    Inscrit en
    Mars 2004
    Messages
    10 035
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 43
    Localisation : France, Ille et Vilaine (Bretagne)

    Informations professionnelles :
    Activité : Ingénieur expert
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Mars 2004
    Messages : 10 035
    Par défaut
    le plus simple est d'utiliser un tableau de char d'une certaine taille et d'y aller à la bourrin.
    dans un .cpp que tu link
    static const char myTab[256] ="hello";
    Ainsi en cherchant hello directement dans le binaire, tu trouvera la mémoire de myTab (ici c'est 256 octets) et tu peut la modifier.

    C'est comme cela que fait Qt pour pouvoir patcher les binaires lors de l'installation.

  3. #3
    Rédacteur
    Avatar de 3DArchi
    Profil pro
    Inscrit en
    Juin 2008
    Messages
    7 634
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2008
    Messages : 7 634
    Par défaut
    Citation Envoyé par yan Voir le message
    le plus simple est d'utiliser un tableau de char d'une certaine taille et d'y aller à la bourrin.
    J'avais pensé à quelque chose comme ça aussi (modification d'une zone identifiée dans le ficher .exe), mais je me demande dans quelle mesure tu ne risques pas d'avoir des problèmes sur des OS récents ou avec des anti-virus pointilleux.

  4. #4
    Membre éclairé
    Profil pro
    Inscrit en
    Juillet 2004
    Messages
    410
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2004
    Messages : 410
    Par défaut

    Là tu vas modifier une zone mémoire... si une autre machine load le programme c'est à partir de ce qui est sur disque, donc tu reload le binaire d'origine.

  5. #5
    Rédacteur

    Avatar de Davidbrcz
    Homme Profil pro
    Ing Supaéro - Doctorant ONERA
    Inscrit en
    Juin 2006
    Messages
    2 307
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 33
    Localisation : Suisse

    Informations professionnelles :
    Activité : Ing Supaéro - Doctorant ONERA

    Informations forums :
    Inscription : Juin 2006
    Messages : 2 307
    Par défaut
    "HS": La solution la plus simple consiste à utiliser l'outil le plus adapté pour faire cela, donc oublier le C++ et embrasser le lisp

    PS: y'avait eu y'a quelques semaines une série de post dans un topic où le sujet était abordé (Mac LAK participait de mémoire). A fouiller
    "Never use brute force in fighting an exponential." (Andrei Alexandrescu)

    Mes articles dont Conseils divers sur le C++
    Une très bonne doc sur le C++ (en) Why linux is better (fr)

  6. #6
    Membre émérite
    Profil pro
    Inscrit en
    Mai 2006
    Messages
    780
    Détails du profil
    Informations personnelles :
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations forums :
    Inscription : Mai 2006
    Messages : 780
    Par défaut
    static const char myTab[256] ="hello";
    et aussi faire ce qu'il faut pour éviter que le compilateur te l'optimise allègrement

    bon si c'est un truc sécurisé qu'il te faut, bon ben voilà quoi.

  7. #7
    yan
    yan est déconnecté
    Rédacteur
    Avatar de yan
    Homme Profil pro
    Ingénieur expert
    Inscrit en
    Mars 2004
    Messages
    10 035
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 43
    Localisation : France, Ille et Vilaine (Bretagne)

    Informations professionnelles :
    Activité : Ingénieur expert
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Mars 2004
    Messages : 10 035
    Par défaut
    Citation Envoyé par nikko34 Voir le message
    et aussi faire ce qu'il faut pour éviter que le compilateur te l'optimise allègrement

    bon si c'est un truc sécurisé qu'il te faut, bon ben voilà quoi.
    ben faut juste qu'il soit utilisé quelque part. Je ne pense pas que le compilateur à le droit de modifier la taille.
    En tous cas je ne connais pas d'autre solution, je trouve cela moche mais ca marche... .
    Du moment que tu ne touche qu'à cette mémoire ton prog ne risque rien.
    Bien penser au \0 quand c'est une string


    Citation Envoyé par reptils Voir le message

    Là tu vas modifier une zone mémoire... si une autre machine load le programme c'est à partir de ce qui est sur disque, donc tu reload le binaire d'origine.
    quand je parle mémoire ici, je parle de modifier la zone de ce tableau dans le binaire. Ouvre n'importe quel exe, tu verra que toute les chaînes du code écrit avec des "" sont visible dans le binaire.

    Citation Envoyé par 3DArchi Voir le message
    J'avais pensé à quelque chose comme ça aussi (modification d'une zone identifiée dans le ficher .exe), mais je me demande dans quelle mesure tu ne risques pas d'avoir des problèmes sur des OS récents ou avec des anti-virus pointilleux.
    De ce que je connait aucun. Tant que ton exe ne fait rien de dangereux, y as pas de problème.
    J'ai déjà fait bien pire, mettre des NOP au lieu du teste de la version de windows pour faire marcher une dll sous vista.. pas eu un seule problème.

    Comme je l'ai dit, c'est la méthode qu'utilise Qt pour redistribuer des binaire car il y as des path absolue en dure dans certaine dll et dans qmake.

Discussions similaires

  1. Exemple de code auto-modifiant
    Par n5Rzn1D9dC dans le forum Contribuez
    Réponses: 11
    Dernier message: 27/05/2025, 07h15
  2. Code auto modifiable x64
    Par fig77 dans le forum x86 32-bits / 64-bits
    Réponses: 6
    Dernier message: 04/02/2011, 17h59
  3. Code auto-modifié => sérialiser
    Par - Robby - dans le forum Assembleur
    Réponses: 2
    Dernier message: 11/05/2008, 13h23
  4. Réponses: 12
    Dernier message: 07/06/2006, 16h13
  5. Modifier la valeur courante de l'auto-increment
    Par Matth_S dans le forum SQL Procédural
    Réponses: 2
    Dernier message: 09/03/2006, 14h02

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