Cacher le nom des fonctions dans exécutable

Coflix -  
 Coflix -
Bonjour,

j'ai une question au sujet de l'édition de fichier binaires. Comme vous devez le savoir, il est possible avec des éditeurs hexadécimaux (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 le fichier exécutable). 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 (protocole utilisé, chiffrage), 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 (en C, C++) pourrait résoudre l'affaire...

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

Config: WXP, Ubuntu 10

1 réponse

Coflix
 
Alors mes amis, aucune idée?

Étant donné que le programme en question est écrit en C, l'utilisation d'une macro définie dans le pré-processeur (instruction #define) peut faire l'affaire:

#define Ma_Fonction(string) MaFo(string)

- la fonction de nom explicite "Ma_Fonction" (que l'on veut masquer) devra malheureusement être renommée avec le nom tronqué "MaFo" (déclaration et définition):
int MaFo(char *strArg);
int MaFo(char *strArg) {...}

- MAIS l'appel de cette fonction "MaFo" se fera en utilisant le nom explicite "Ma_Fonction", via la macro précédemment créée:
int main()
{
int a=0;
...
a = Ma_Fonction("test");
...
}

Ceci permettra au pré-proc de remplacer les appels à "Ma_Fonction" par des appels à "MaFo" juste avant la compilation et uniquement MaFo sera présente dans l'exécutable final: le code reste lisible (sauf p.ê. la définition de la fonction "MaFo" qui devra bénéficier de bons commentaires) et l'exécutable demeure "obscur" en cas d'édition hexadécimale.

Je n'ai pas trouvé mieux pour l'instant... Toutes vos idées sont bien entendues bienvenues.

Coflix
0