我如何#包含加密字符串的文件?
我正在用MinGW/gcc在Windows上编写一个C应用程序。我需要使用#include指令来包含一个包含加密字符串的文件。该字符串将在运行时解密。我想这样做,所以如果用十六进制编辑器查看可执行文件,字符串将不可见。我如何#包含加密字符串的文件?
我试过这个,但它不起作用。但你有这样的想法:
char *hidden_str =
#include "encrypted_text.dat"
有可能是非转换的东西,那里是混淆编译器。我不知道。加密后我不知道它会发生什么。
如果有更好的方法来解决这个问题,我愿意接受。
如果您在安装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文件生成数据的相关行,每行的字符数量有限。
[xd](https://www.fourmilab.ch/xd/)和[xxd](http://man.cx/xxd)可以生成这些类型的文件。 – icktoofay 2011-06-05 00:56:50
将其编码为十六进制/八进制。我不知道最简单的方法是编码它 - 你可以使用,例如,“\ xAB \ xCF ...”,与八进制一样,或者你可以使用一个数组初始化器类似的东西(不要可以引用我这一点):
char hidden_str[64] = {0xAB, 0xCf, ...};
(你甚至可以使用十进制值初始化)
显然,不管你做什么,你必须预先处理的加密文成十六进制表示 - - 一个“玩具”计划的简单工作。
您是否尝试将其添加为资源? – 2011-06-05 00:44:36
您可以在运行时将文件作为文件打开并读入吗? – marnir 2011-06-05 00:44:59
在这种情况下,您不会使用预处理器include指令。 – Doug 2011-06-05 00:45:24