Как я могу #include файл с зашифрованной строкой? - PullRequest
0 голосов
/ 05 июня 2011

Я пишу приложение на C для Windows с MinGW / gcc. Мне нужно использовать директиву #include, чтобы включить файл, содержащий зашифрованную строку. Строка будет расшифрована во время выполнения. Я хочу сделать это, чтобы строка не была видна, если смотреть на исполняемый файл с помощью шестнадцатеричного редактора.

Я пробовал это, но это не работает. Вы поняли, хотя:

char *hidden_str =
#include "encrypted_text.dat"

Там могут быть неэкранированные вещи, которые запутывают компилятор. Я не знаю. Я не знаю, что с ним происходит после того, как он зашифрован.

Если есть лучший подход к этому, я открыт для этого.

Ответы [ 3 ]

4 голосов
/ 05 июня 2011

Если вы установили и настроили MSYS при установке MinGW, вы должны иметь доступ к команде с именем xxd, которая принимает шестнадцатеричный дамп файла.Используя флаг командной строки -i, вы можете получить его для вывода файла, дружественного к Си, который вы можете легко импортировать.

Пример вызова:

xxd -i in_file output.h

Содержимоеиз output.h будет выглядеть следующим образом:

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

Затем вы можете включить этот файл в исходный код C и получить к нему доступ:

#include "output.h"

unsigned int i;
for(i = 0; i < in_file_len; i++)
{
    printf("%c", in_file[i]);
}
1 голос
/ 05 июня 2011

Кодируйте его как шестнадцатеричное / восьмеричное.Я не уверен, какой самый простой способ был бы закодировать его - вы могли бы использовать, например, "\ xAB \ xCF ...", то же самое с восьмеричным, или вы могли бы использовать инициализатор массива что-то вроде (нецитируйте меня по этому поводу):

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

(Вы можете даже использовать десятичные значения для инициализатора.)

Очевидно, что что бы вы ни делали, вам придется предварительно обработать зашифрованный текст вшестнадцатеричное представление - легкая работа для «игрушечной» программы.

1 голос
/ 05 июня 2011

Компилятору не нравятся двоичные данные в файле.

Попробуйте сделать это вместо:

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

Не так сложно написать простую программу для генерации соответствующих строк данных из файла .dat с ограниченным количеством символов в строке.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...