Comment puis-je inclure un fichier avec une chaîne cryptée?

J’écris une application C sous Windows avec MinGW / gcc. Je dois utiliser la directive #include pour inclure un fichier contenant une chaîne chiffrée. La chaîne sera déchiffrée au moment de l’exécution. Je veux faire cela pour que la chaîne ne soit pas visible si vous regardez l’exécutable avec un éditeur hexadécimal.

J’ai essayé ça, mais ça ne marche pas. Vous avez l’idée, cependant:

char *hidden_str = #include "encrypted_text.dat" 

Il peut y avoir des éléments non échappés qui déroutent le compilateur. Je ne sais pas. Je ne sais pas ce qu’il advient après le cryptage.

S’il existe une meilleure approche à cet égard, je suis ouvert à cela.

Si vous avez installé et configuré MSYS lorsque vous avez installé MinGW, vous devez avoir access à une commande appelée xxd , qui effectue un vidage hexadécimal d’un fichier. En utilisant l’indicateur de ligne de commande -i , vous pouvez le générer un fichier facile à importer que vous pouvez importer.

Un exemple d’appel serait:

 xxd -i in_file output.h 

Le contenu de output.h ressemblerait alors à output.h :

 unsigned char in_file[] = { 0x68, 0x65, 0x6c, 0x6c, 0x6f }; unsigned int in_file_len = 5; 

Vous pouvez ensuite inclure ce fichier dans votre code source C et y avoir access:

 #include "output.h" unsigned int i; for(i = 0; i < in_file_len; i++) { printf("%c", in_file[i]); } 

Le compilateur n’aime pas les données binarys dans le fichier.

Essayez de faire ceci à la place:

 char hidden_str[] = { 65, 66, 67, ... }; 

Ce n’est pas si difficile d’écrire un simple programme pour générer les lignes de données pertinentes à partir du fichier .dat, avec un nombre limité de caractères par ligne.

Encodez-le au format hex / octal. Je ne sais pas quel serait le moyen le plus simple de l’encoder – vous pouvez utiliser, par exemple, “\ xAB \ xCF …”, la même chose avec octal, ou vous pourriez utiliser un initialiseur de tableau comme cite moi sur ceci):

 char hidden_str[64] = {0xAB, 0xCf, ...}; 

(Vous pouvez même utiliser des valeurs décimales pour l’initialiseur.)

Évidemment, quoi que vous fassiez, vous devrez prétraiter le texte crypté en une représentation hexadécimale – un travail facile pour un programme “jouet”.