c - memfrob函数的设计与使用

标签 c memory encryption gnu

来自 man page of memfrob :

void *memfrob(void *s, size_t n);

The memfrob() function encrypts the first n bytes of the memory area s by exclusive-ORing each character with the number 42. The effect can be reversed by using memfrob() on the encrypted memory area.

Note that this function is not a proper encryption routine as the XOR constant is fixed, and is only suitable for hiding strings.

我对 memfrob 函数有以下疑问:

  1. 为什么要对数字 42 进行异或运算?
  2. XOR 常数是固定的,以及为什么 memfrob 的设计者没有将常数的选择权留给用户,有什么原因吗?
  3. 在什么意义上它适合隐藏字符串?由于它可以反转,因此不应该在加密很重要的应用程序中使用,它在实践中用于什么?

最佳答案

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

XOR 的数字可以是任意的,但它需要在 glibc 的后续版本中保持不变,因此依赖于数字 42 的代码不会中断。

有些人认为 memfrob() 是一个笑话函数,但我不确定是否真的如此。尽管如此,您不应该使用它,因为它不是标准功能(因此在非 glibc 平台上不可用),而且混淆不能替代适当的安全性。

它的笑话是it is the meaning of Life .类似于 rot-13因为它是最简单的加密,再次运行它会恢复字符串。 Rot-13 不会对纯文本中的空格做任何事情,而 memfrob 有交换空格和换行的奇怪结果:

space = 100000 (32), 42 = 101010, 32^42 = 001010 (10 = LF, and 10^42 back to 32)

虽然这些混淆了它们,但它们的加密效果很差,因为它们可以通过查看结果来识别:很多 r 和 n,那么它就是 rot13;很多 CR,\和 ^ 然后是 memfrob。

关于c - memfrob函数的设计与使用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27207768/

相关文章:

java - 遵循Netbeans JNI基础教程时出错

c - 除了turbo c++之外,还有什么更好、更合适的编译器来运行c中的基本图形程序呢?

c - 如何逐位打印 C double 以查看低级表示?

c - 奇怪的数组错误 C

c# - 内存中的虚拟数据库

ios - 在 iOS 上一个接一个地保存大图像内存释放

python - python2.7有内存分析器吗?

python - 使用 Django + Postgres 进行加密的策略?

php - php 和 perl 3DES CBC 中的返回值相同

linux - Linux 端点之间的加密隧道