syn*_*gma 7 c memory encryption gnu
Run Code Online (Sandbox Code Playgroud)void *memfrob(void *s, size_t n);所述memfrob()函数加密第一Ñ的内存区域的字节小号通过异或运算的每个字符与数字42.效果可以通过使用可以颠倒 memfrob()对加密存储区.
请注意,此函数不是正确的加密例程,因为XOR常量是固定的,并且仅适用于隐藏字符串.
关于这个memfrob功能我有以下问题:
memfrob没有将常数选择留给用户?的目的memfrob()(如果你要调用一个目的)是隐藏的字符串,所以你没有看到他们,当你运行strings。当您的二进制文件包含纯文本密码并且您想阻止管闲的人找出这些密码是什么时,这可能很有用。当然,用42破解XOR并不难,但总比没有好。
用于XOR的数字可以是任意的,但在连续发布的glibc中需要保持恒定,因此依赖数字为42的代码不会中断。
有人认为memfrob()这是一个玩笑功能,但我不确定是否确实如此。但是,您不应使用它,因为它不是标准功能(因此在非glibc平台上不可用),并且因为混淆不能替代适当的安全性。
开玩笑的是生命的意义。它与rot-13相似,因为它是最琐碎的加密,再次运行它将恢复字符串。Rot-13对明文中的空格不做任何操作,而memfrob却产生了交换空格和换行符的奇怪结果:
space = 100000 (32), 42 = 101010, 32^42 = 001010 (10 = LF, and 10^42 back to 32)
Run Code Online (Sandbox Code Playgroud)
尽管这些混淆不清,但它们的加密效果较差,因为仅通过查看结果就可以识别它们:大量的r和n则为rot13;许多CR,\和^,然后是memfrob。