我如何#包含加密字符串的文件?

问题描述:

我正在用MinGW/gcc在Windows上编写一个C应用程序。我需要使用#include指令来包含一个包含加密字符串的文件。该字符串将在运行时解密。我想这样做,所以如果用十六进制编辑器查看可执行文件,字符串将不可见。我如何#包含加密字符串的文件?

我试过这个,但它不起作用。但你有这样的想法:

char *hidden_str = 
#include "encrypted_text.dat" 

有可能是非转换的东西,那里是混淆编译器。我不知道。加密后我不知道它会发生什么。

如果有更好的方法来解决这个问题,我愿意接受。

+3

您是否尝试将其添加为资源? – 2011-06-05 00:44:36

+0

您可以在运行时将文件作为文件打开并读入吗? – marnir 2011-06-05 00:44:59

+0

在这种情况下,您不会使用预处理器include指令。 – Doug 2011-06-05 00:45:24

如果您在安装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文件生成数据的相关行,每行的字符数量有限。

+0

[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, ...}; 

(你甚至可以使用十进制值初始化)

显然,不管你做什么,你必须预先处理的加密文成十六进制表示 - - 一个“玩具”计划的简单工作。