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 :

Cacher le nom des fonctions dans exécutable


Sujet :

C

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre à l'essai
    Homme Profil pro
    Inscrit en
    Juin 2011
    Messages
    4
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Juin 2011
    Messages : 4
    Par défaut Cacher le nom des fonctions dans exécutable
    Bonjour,

    j'ai une question au sujet de l'édition de fichier exécutables compilés. Comme vous devez le savoir, il est possible avec des éditeurs hexadécimaux (Strings, voire des outils d'édition de texte actuels comme Notepad++) d' "ouvrir" un programme/fichier exécutable et d'y "lire" des informations de type ASCII (string fixes, messages, noms de fonctions définies dans l'exe). Justement ma question porte sur le nom des fonctions que l'on peut ainsi lire: est-il possible de les masquer/cacher? Vous comprendrez que rien que le nom des fonctions peut renseigner un probable lecteur sur le comportement global d'un programme ou sur une implémentation particulière (en vrac: protocole de transfert utilisé, technique de chiffrage, fonction mathématique implémentée...), chose que je souhaite éviter idéalement.

    Je sais que la façon la plus simple consiste à -avant compilation- renommer les fonctions (déclaration et définition) et ainsi de générer un exe plus "obscur" au lecteur potentiel ("LireMotdePasse" deviendrait "LMDP" ou "titi" mais le comportement serait identique), mais je veux éviter ceci pour des raisons de maintenance et de lisibilité du code. Peut-être qu'un traitement de texte particulier avant compilation ou l'utilisation de macros (préprocesseur) pourrait résoudre l'affaire...

    Donc, j'attends vos suggestions sur cette affaire et vous remercie à l'avance.

  2. #2
    Membre à l'essai
    Profil pro
    Inscrit en
    Septembre 2007
    Messages
    5
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2007
    Messages : 5
    Par défaut
    Effectivement, un

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    #define LireMotdePasse titi
    pourrait bien résoudre le problème. Ceci dit, pour ma part je n'ai jamais eu à utiliser une bidouille de ce genre et je m'interroge sur l'intérêt de la manip.

  3. #3
    Membre éprouvé
    Avatar de TheGzD
    Homme Profil pro
    Ingénieur/ Docteur en Informatique
    Inscrit en
    Avril 2007
    Messages
    1 327
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 43
    Localisation : France, Puy de Dôme (Auvergne)

    Informations professionnelles :
    Activité : Ingénieur/ Docteur en Informatique
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Avril 2007
    Messages : 1 327
    Par défaut
    Dans cas d'une DLL tu peux te contenter de mettre des adresses sur les points d'entrée, après tu peux faire un exécutable qui se contente d'appeler la DLL en montant ces adresses. Toi tu sais ce que tu fais (même si niveau maintenabilité attention!) mais un guignol lambda aura du mal.
    Ça répond à ta question ?

  4. #4
    Modérateur
    Avatar de gangsoleil
    Homme Profil pro
    Manager / Cyber Sécurité
    Inscrit en
    Mai 2004
    Messages
    10 150
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Haute Savoie (Rhône Alpes)

    Informations professionnelles :
    Activité : Manager / Cyber Sécurité

    Informations forums :
    Inscription : Mai 2004
    Messages : 10 150
    Par défaut
    Bonjour,

    Je te conseille de faire des recherches sur les differentes techniques d'obfuscation de code.

    Pour le protocole, sache qu'il est extremement facile de le connaitre, via un simple analyseur de trames reseau.
    "La route est longue, mais le chemin est libre" -- https://framasoft.org/
    Les règles du forum

  5. #5
    Membre à l'essai
    Homme Profil pro
    Inscrit en
    Juin 2011
    Messages
    4
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Juin 2011
    Messages : 4
    Par défaut
    Je tiens à remercier CSKi, TheGzD et gangsoleil pour leur aide rapide et pertinente: c'est sympa!

    Si je peux me permettre de faire une réponse groupée:

    * CSKi: en effet, c'est la solution que j'avais en tête. Je pensais même être en mesure de passer à gcc durant la compil un argument du type -DSHOWFUNC qui afficherait/masquerait les noms, genre:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    #if defined(SHOWFUNC)
    int LireMotDePasse(char*);
    #else
    int titi(char*);
    #endif
    => avantage: permet de générer un exe masqué ou pas (en fonction de l'utilisation de -DSHOWFUNC)
    => inconvénient: il faut se taper les déclarations, définitions et appels (macro supplémentaire par fonction masquée) des N fonctions à masquer (pas toutes les fonctions de l'exe mais un bon quart). La maintenance devient aussi plus compliquée.

    * TheGzD: je ne connaissais pas cette intéressante particularité des DLLs, mais le problème reste entier puisque le quidam qui veut éditer l'exe peut tout aussi bien éditer la DLL et retrouver ce que l'on cherche à cacher. De plus, le programme en question est un standalone multi-plates-formes (au moins Linux, Windows), ce qui -je présume- complexifie l'utilisation des DLL.

    * gangsoleil: en effet, on peut appeler ça de l'obfuscation de code (de niveau élémentaire), bien que je ne cherche pas à rendre le code incompréhensible à la décompilation (juste à décourager des petits malins). Bien entendu, si une personne avait du temps et de l'argent à mettre pour décompiler l'exe (encore faudrait-il que cette personne soit), la simple modification du nom de certaines fonctions ne tiendrait pas longtemps.

    Je pensais à la base qu'il y aurait pu exister une option gcc qui aurait pu faire le travail, mais ça ne semble pas exister. Je vais peser le pour et le contre (certains avantages, beaucoup d'inconvénients) et prendre a priori la technique des macros. Je vous remercie quand même beaucoup!

  6. #6
    Membre éprouvé
    Avatar de TheGzD
    Homme Profil pro
    Ingénieur/ Docteur en Informatique
    Inscrit en
    Avril 2007
    Messages
    1 327
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 43
    Localisation : France, Puy de Dôme (Auvergne)

    Informations professionnelles :
    Activité : Ingénieur/ Docteur en Informatique
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Avril 2007
    Messages : 1 327
    Par défaut
    Que veux-tu exactement cacher ?
    Il nous en faudrait la liste exhaustive pour t'en dire plus je pense.

  7. #7
    Expert confirmé
    Avatar de diogene
    Homme Profil pro
    Enseignant Chercheur
    Inscrit en
    Juin 2005
    Messages
    5 761
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Essonne (Île de France)

    Informations professionnelles :
    Activité : Enseignant Chercheur
    Secteur : Enseignement

    Informations forums :
    Inscription : Juin 2005
    Messages : 5 761
    Par défaut
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    #if defined(SHOWFUNC)
    int LireMotDePasse(char*);
    #else
    int titi(char*);
    #endif
    Si tu utilises cette méthode des macros, il va falloir remplacer aussi les noms dans tous les appels des fonctions dans le code.
    Peut-être avec
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    #if defined(SHOWFUNC)
    #define  LireMotDePasse LireMotDePasse
    #define  AutreFonction  AutreFonction
    #else
    #define  LireMotDePasse f000001
    #define  AutreFonction  f000002
    #endif
    Ceci n'affecterait pas la lisibilité du source.

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. Réponses: 13
    Dernier message: 03/05/2006, 13h15
  2. Cacher le nom des pages dans l'URL
    Par Prue dans le forum Balisage (X)HTML et validation W3C
    Réponses: 5
    Dernier message: 07/12/2005, 10h18
  3. Réponses: 1
    Dernier message: 05/11/2004, 17h15
  4. Enchainer des fonctions dans un onclick d'un bouton
    Par jpg dans le forum Général JavaScript
    Réponses: 4
    Dernier message: 26/10/2004, 16h51
  5. [VBA-E] Ajouter des fonctions dans Excel
    Par Clezio dans le forum Macros et VBA Excel
    Réponses: 3
    Dernier message: 06/03/2004, 01h18

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