memfrob函数的设计和使用

问题描述 投票:8回答:2

man page of memfrob

memfrob

The memfrob()函数通过异或对存储区s的前n个字节进行加密每个数字都为42。可以通过使用反转效果memfrob()在加密的存储区域上。

请注意,此功能不是XOR的正确加密例程常量是固定的,仅适用于隐藏字符串。

关于void *memfrob(void *s, size_t n); 功能,我有以下问题:

  1. 为什么对数字42进行异或?
  2. XOR常数是固定的,为什么memfrob的设计者没有将常数的选择留给用户吗?
  3. 从什么意义上说它适合隐藏字符串?由于它可以逆转,因此不应该在加密很重要的应用程序中使用,那么它在实践中有什么用?
c memory encryption gnu
2个回答
7
投票

memfrob的目的(如果要调用该目的)是隐藏字符串,以便在运行memfrob()时看不到它们。当您的二进制文件包含明文密码并且您想阻止管闲的人找出这些密码是什么时,这可能很有用。当然,用42破解XOR并不难,但总比没有好。

与XOR的数字可以是任意的,但在后续的glibc版本中,它必须保持恒定,因此依赖数字为42的代码不会中断。

[有些人认为strings是一个玩笑功能,但我不确定是否确实如此。但是,您不应使用它,因为它不是标准功能(因此在非glibc平台上不可用),并且因为混淆不能替代适当的安全性。

笑话是memfrob()。它与it is the meaning of Life相似,因为它是最琐碎的加密,再次运行它将恢复字符串。 Rot-13对明文中的空格不做任何操作,而memfrob却具有交换空格和换行符的奇怪结果:

rot-13

尽管这些混淆不清,它们的加密效果较差,因为仅通过查看结果就可以识别它们:很多r和n则烂13;许多CR,\和^然后是memfrob。


0
投票

使用memfrob()对内存中的密码进行加密/解密根本不好。如上所述,此功能在系统内存中进行处理。例如,当使用简单的调试器(如gdb)并将断点放在memfrob()函数上时,可以轻松读取值。

© www.soinside.com 2019 - 2024. All rights reserved.