Como esconder uma string no código binário?

Às vezes, é útil ocultar uma string de um arquivo binário (executável). Por exemplo, faz sentido ocultar as chaves de criptografia dos binários.

Quando eu digo "esconder", quero dizer dificultando encontrar strings no binário compilado.

Por exemplo, este código:

const char* encryptionKey = "My strong encryption key";
// Using the key

após a compilação produz um arquivo executável com o seguinte na sua seção de dados:

4D 79 20 73 74 72 6F 6E-67 20 65 6E 63 72 79 70   |My strong encryp|
74 69 6F 6E 20 6B 65 79                           |tion key        |

Você pode ver que nossa string secreta pode ser facilmente encontrada e / ou modificada.

Eu poderia esconder a corda ...

char encryptionKey[30];
int n = 0;
encryptionKey[n++] = 'M';
encryptionKey[n++] = 'y';
encryptionKey[n++] = ' ';
encryptionKey[n++] = 's';
encryptionKey[n++] = 't';
encryptionKey[n++] = 'r';
encryptionKey[n++] = 'o';
encryptionKey[n++] = 'n';
encryptionKey[n++] = 'g';
encryptionKey[n++] = ' ';
encryptionKey[n++] = 'e';
encryptionKey[n++] = 'n';
encryptionKey[n++] = 'c';
encryptionKey[n++] = 'r';
encryptionKey[n++] = 'y';
encryptionKey[n++] = 'p';
encryptionKey[n++] = 't';
encryptionKey[n++] = 'i';
encryptionKey[n++] = 'o';
encryptionKey[n++] = 'n';
encryptionKey[n++] = ' ';
encryptionKey[n++] = 'k';
encryptionKey[n++] = 'e';
encryptionKey[n++] = 'y';

… Mas não é um método legal. Alguma idéia melhor?

PS: Eu sei que apenas esconder segredos não funciona contra um atacante determinado, mas é muito melhor que nada…

Além disso, eu sei sobre criptografia assimétrica, mas não é aceitável neste caso. Estou refatorando uma aplicação existente que usa criptografia Blowfish e passa dados criptografados para o servidor (o servidor descriptografa os dados com a mesma chave).

I não pode alterar o algoritmo de criptografia porque preciso fornecer compatibilidade com versões anteriores. Eunão pode até mesmo alterar a chave de criptografia.

questionAnswers(20)

yourAnswerToTheQuestion