如何混淆二进制代码中的字符串
有时需要保护二进制可执行文件中的敏感数据,例如隐藏加密密钥以防止其被检索。但是,在二进制文件中以纯文本形式存储字符串会使它们容易受到攻击。这就提出了一个问题:我们可以在保持功能的同时隐藏字符串吗?
传统的隐藏方法
一种简单但低效的方法是手动单独存储每个字符,如下所示:
char encryptionKey[30]; int n = 0; encryptionKey[n++] = 'M'; encryptionKey[n++] = 'y'; ...
但是这个解决方案比较麻烦而且不Ideal.
Boosting 字符串混淆
为了改进之前的方法,我们可以利用 Boost 预处理器库来实现更无缝、更高效的字符串混淆。考虑以下代码:
#include "HideString.h" DEFINE_HIDDEN_STRING(EncryptionKey, 0x7f, ('M')('y')(' ')('s')('t')('r')('o')('n')('g')(' ')('e')('n')('c')('r')('y')('p')('t')('i')('o')('n')(' ')('k')('e')('y')) DEFINE_HIDDEN_STRING(EncryptionKey2, 0x27, ('T')('e')('s')('t')) int main() { std::cout << GetEncryptionKey() << std::endl; std::cout << GetEncryptionKey2() << std::endl; return 0; }
在此更新的代码中:
这个解决方案采用加密来隐藏字符,使其更难以通过简单扫描检测到。此外,它比手动构造字符数组更加简洁和可维护。
混淆数据示例
生成的混淆字符串“My Strong Encryption Key”如下所示二进制代码:
0x00B0200C 32 07 5d 0f 0f 08 16 16 10 56 10 1a 10 00 08 2.]......V..... 0x00B0201B 00 1b 07 02 02 4b 01 0c 11 00 00 00 00 00 00 .....K.........
此数据现在呈现出看似随机的值,这使得更难
结论
虽然此技术不能针对确定的攻击者提供万无一失的保护,但它可以显着增加发现敏感数据所需的时间和精力在二进制可执行文件中,提供额外的安全层。
以上是如何有效混淆二进制代码中的字符串以保护敏感数据?的详细内容。更多信息请关注PHP中文网其他相关文章!