如何用二进制代码隐藏字符串?
有时,从二进制(可执行)文件中隐藏字符串很有用。例如,从二进制文件中隐藏加密密钥是有意义的。
当我说“隐藏”时,我的意思是在编译的二进制文件中更难找到字符串。
例如,这段代码:
const char* encryptionKey = "My strong encryption key";
// Using the key
编译后生成一个可执行文件,其数据部分中包含以下内容:
4D 79 20 73 74 72 6F 6E-67 20 65 6E 63 72 79 70 |My strong encryp|
74 69 6F 6E 20 6B 65 79 |tion key |
您可以看到我们的秘密字符串可以轻松找到和/或修改。
我可以隐藏字符串......
char encryptionKey[30];
int n = 0;
encryptionKey[n++] = 'M';
encryptionKey[n++] = 'y';
encryptionKey[n++] = ' ';
encryptionKey[n++] = 's';
encryptionKey[n++] = 't';
encryptionKey[n++] = 'r';
encryptionKey[n++] = 'o';
encryptionKey[n++] = 'n';
encryptionKey[n++] = 'g';
encryptionKey[n++] = ' ';
encryptionKey[n++] = 'e';
encryptionKey[n++] = 'n';
encryptionKey[n++] = 'c';
encryptionKey[n++] = 'r';
encryptionKey[n++] = 'y';
encryptionKey[n++] = 'p';
encryptionKey[n++] = 't';
encryptionKey[n++] = 'i';
encryptionKey[n++] = 'o';
encryptionKey[n++] = 'n';
encryptionKey[n++] = ' ';
encryptionKey[n++] = 'k';
encryptionKey[n++] = 'e';
encryptionKey[n++] = 'y';
......但这不是一个好方法。有更好的想法吗?
PS:我知道仅仅隐藏秘密并不能对付坚定的攻击者,但它总比没有好......
另外,我知道非对称加密,但在这种情况下它是不可接受的。我正在重构现有的应用程序,它使用Blowfish加密并将加密数据传递给服务器(服务器使用相同的密钥解密数据)。
我无法更改加密算法,因为我需要提供向后兼容性。我甚至无法更改加密密钥。
四季花海
当年话下
相关分类