2016-02-15 2 views
-2

Tout d'abord, j'ai fait beaucoup de recherches auparavant mais je dois vous demander quelque chose qui peut être simple ... ou pas, mais je préfère vous demander Afin d'être sûr ...Cacher quelque chose comme une clé ou un fourCC dans le programme compilé

J'ai deux types de clés, l'une mise en place par moi et l'autre est un simple code FourCC. Cependant, il est assez simple de les trouver dans le code du fichier .exe en utilisant HxD par exemple. Je voudrais cacher la clé dans le fichier .exe, mais pas de le changer, voici l'exemple de ma clé:

BYTE * pbData = new BYTE[dwDataSize]; 
file.Read(pbData, dwDataSize); 

CLZObject zObj; 

static DWORD mykey[4] = 
{ 
    000000, 
    11111111, 
    222222222, 
    33333333 
}; 

if (!CLZO::Instance().Decompress(zObj, pbData, mykey)) 
{ 
    delete[] pbData; 
    return false; 
} 

Comme vous pouvez le voir, je l'utilise LZO mais il est toujours facile de trouver la clé comme nous le savons habituellement où elle est ...

Alors, voici le FourCC (il est tout à fait facile à trouver car il suffit de taper la lettre, par exemple:. DXT1

case MAKEFOURCC('D','X','T','1'): 
    strncpy_s(strPixelFormat, 512, "DXT1", 31); 
    m_CompFormat = PF_DXT1; 
    break; 

donc je pensais cacher la clé en utilisant la mémoire (je n'ai pas d'exemple mais je pourrais en fournir un) ou crypter t la clé afin de le cacher du programme, mais je ne sais pas (ou je ne suis pas sûr) comment chiffrer quelque chose comme ça:

000000, 
    11111111, 
    222222222, 
    33333333 

Merci, bonne journée! :)

+0

Je ne vois pas de *** question ***. – abelenky

+0

Comment les crypter dans le programme compilé – Gurgarath

Répondre

0

Ce sera bien si vous avez dit pourquoi vous voulez le cacher. FourCC est de 4 octets donc peut être vu comme int. Vous pouvez le xoriser, ou le crypter d'une autre manière. Mais évidemment, cela ne servira pas contre des adversaires sérieux, car la clé sera dans le code de toute façon. N'oubliez pas que les pirates sérieux scruteront le code et les données lors de l'exécution du programme en plus du programme sur disque.

EDIT:

est ici un peu rapide et sale de code pour obtenir votre fourcc XOR. Vous appliqueriez la même chose en cours d'exécution pour revenir à la valeur d'origine. L'utilisation de 0x55555555 est pratique car les caractères imprimables restent imprimables, donc vous pouvez utiliser la chaîne de sortie plutôt que le nombre:

int main(int argc, char* argv[]) { 
    char s[5]; 
    *(unsigned int*)s = *(unsigned int*)argv[1]^0x55555555u; 
    s[4] = '\0'; 
    printf("\"%s\" ==> \"%s\" (0x%08xu)\n", argv[1], s, *(unsigned int*)s); 
    return 0; 
} 

$ ./a.exe xvid 
"xvid" ==> "-#<1" (0x313c232du) 
$ ./a.exe mpeg 
"mpeg" ==> "8%02" (0x32302538u) 
$ ./a.exe avc1 
"avc1" ==> "4#6d" (0x64362334u) 
+0

Je veux juste obscurcir ce type de clé afin d'ajouter un peu de sécurité à mon programme, il n'y a rien de malicieux – Gurgarath

+0

Ajouter un petit peu de code rapide et sale à la réponse ... – BitWhistler

+0

Merci beaucoup! Mais au lieu de faire n'importe quelle ordure avec mon programme (je ne pourrais pas le modifier atm) je préfère vous poser une question, que dois-je faire avec le code s'il vous plaît? – Gurgarath