工具介绍
保证编译时字符串常量混淆的头文件库,适用于 C++14
源代码可在 GitHub 中找到
伪装
针对 C++14 的保证编译时字符串常量伪装的头文件库。
问题是什么? 当在 C++ 程序中使用纯文本字符串常量时,它们会被原样编译成最终的二进制文件。这使得它们极其容易被发现。只需在文本编辑器中打开二进制文件,即可清晰地看到所有嵌入的字符串常量。还有一个名为 strings 的特殊工具,可用于在二进制文件中搜索纯文本字符串。
这个库做什么? 这个只包含头文件的库旨在使二进制文件中的嵌入式字符串字面量难以被发现(但不是不可能),通过在编译时使用常量表达式对其进行 XOR 加密,迫使编译器使用加密的字符串而不是明文字面量。使用 AY_OBFUSCATE 还可以消除对字符串的常量指针的需求,这通常(对于小字符串)会让编译器将加密字符串内联,在一系列汇编操作中运行时构建它,从而保护二进制图像免受简单的 XOR 解密攻击。运行时将解密加密的字符串,以便在程序中使用。
- 编译时保证混淆 - 字符串通过 constexpr 表达式进行编译。 * 全局生命周期(每个线程) - 混淆后的字符串存储在一个唯一的 lambda 中的线程局部变量中。 * 可隐式转换为 char* - 易于集成到现有代码库中。 * 随机 64 位密钥 - 每次都使用随机密钥进行混淆。