有关libc指针加密的问题

时间:2013-10-25 07:51:48

标签: c security libc

glibceglibc有一个PTR_MANGLE,可以加密可写内存中的指针(更准确地说,'XOR'而非'加密')。

我没有太多关于这个功能的阅读。 man -k PTR_MANGLE没有返回任何匹配,谷歌正在返回一些肤浅的喋喋不休。 Drepper在Live Journal上的Pointer Encryption是为数不多的权威文章之一。

有没有深入的文件?它可以扩展到用户空间进程,还是仅限于运行时库?如果是这样,启用该功能的编译器开关或选项是什么?可以在运行时禁用该功能吗?

1 个答案:

答案 0 :(得分:5)

PTR_MANGLE是glibc中的内部功能,基于宏构建。它不是由编译器以任何方式自动化的。您可以在应用程序中复制相同的内容,但您还必须手动执行此操作;它的工作原理如下:

uintptr_t xor_key; // needs to be initialized with random "key" before use
#define PTR_MANGLE(p) (1 ? (void *)((uintptr_t)(p) ^ xor_key) : p)

这可能与glibc实现完全不同;我很长一段时间没有看过它,只是写下了我的头脑。看似无用的条件运算符是强制生成的表达式与原始指针具有相同的类型,因此可以直接使用它。

请注意,该操作是自己的反转,因此PTR_MANGLE可用于“加密”和“解密”。