因此我使用visual 2012制作了一个应用程序,用于处理图像和着色器(纯文本)。但实际上,我不希望人们打开图像和着色器并乱七八糟。如何将所有这些外部文件压缩为单个或多个文件,但仍可通过可执行文件读取?
答案 0 :(得分:5)
这个问题难以权威地回答,因为没有防篡改硬件,基本上不可能保护内容免受复杂的黑客攻击。但是,如果澄清一个简单的威慑力就足够了,那么embedding your content as resources in the executable怎么样呢?请注意,有一些工具可以免费从.exe文件中提取资源。
或者,您可以加密每个文件并在应用程序加载它时对其进行解密。加密可以像使用已知的常量字节对每个字节进行xor-ing一样简单,也可以使用像Microsoft CryptoAPI那样的真实加密算法。使用真实算法可以改善混淆,但仍然不会真正安全。
这是一个简单的程序,它使用this RC4 implementation(比CryptoAPI更容易使用)来加密或解密文件并将其写入stdout:
#include <algorithm>
#include <iostream>
#include <fstream>
#include <iterator>
#include <vector>
// insert RC4 implementation here
int main(int argc, char *argv[]) {
const std::string password = "no more secrets";
const std::string filename = argv[1];
// Read file into a buffer.
std::ifstream f(filename.c_str(), std::ios::in | std::ios::binary);
std::vector<char> buffer;
f >> std::noskipws;
std::copy(
std::istream_iterator<char>(f), std::istream_iterator<char>(),
std::back_inserter(buffer));
// Initialize the key from a password.
rc4_key key;
prepare_key((unsigned char *)password.data(), (int)password.size(), &key);
// Encrypt or decrypt (same operation).
rc4((unsigned char *)&buffer[0], (int)buffer.size(), &key);
// Write result to stdout.
std::cout.write(&buffer[0], buffer.size());
return 0;
}
请注意,这不是使用RC4的安全方式,RC4算法本身不再被视为安全。
答案 1 :(得分:2)
查看http://en.wikipedia.org/wiki/PAK_(file_format)
SourceForge上有一个用于Quake2 pak文件的库:http://sourceforge.net/projects/paklib/
但是,我建议直接转到源:https://github.com/id-Software/Quake-2/blob/master/qcommon/files.c
答案 2 :(得分:2)
使用源代码将文件编码到可执行文件中。创建一个数组,文件的每个字节一次编码一个字节。将数据包含在可执行文件中是一种非常简单的技术。