我用MinGW / gcc在Windows上编写一个C应用程序。 我需要使用#include指令来包含一个包含encryptionstring的文件。 该string将在运行时解密。 我想要这样做,如果用hex编辑器查看可执行文件,string将不可见。
我试过这个,但是不行。 不过你明白了:
char *hidden_str = #include "encrypted_text.dat"
那里可能有些非转义的东西让编译器感到困惑。 我不知道。 我不知道encryption后会发生什么。
如果有更好的办法,我愿意接受。
如果您在安装MinGW时安装并配置了MSYS,则应该可以访问一个名为xxd
的命令,该命令将采用文件的十六进制转储。 通过使用-i
命令行标志,你可以得到它输出一个C友好的文件,你可以很容易地导入。
一个示例调用将是:
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]); }
编译器不喜欢文件中的二进制数据。
尝试这样做,而不是:
char hidden_str[] = { 65, 66, 67, ... };
编写一个简单的程序来生成.dat文件中的相关行数据并不难,每行字符数量有限。
将其编码为十六进制/八进制。 我不知道什么是最简单的方法来编码它 – 你可以使用,例如,“\ xAB \ xCF …”,与八进制一样,或者你可以使用一个数组初始化类似的东西(不要在这引用我):
char hidden_str[64] = {0xAB, 0xCf, ...};
(你甚至可以使用初始化器的十进制值。)
显然,无论你做什么,你都必须将加密文本预处理成十六进制表示形式,这对于“玩具”程序来说是一件容易的事情。