在 Windows 中使用 EncodePointer / DecodePointer 有什么好处?
MSDN
说:现在的问题是:如果攻击者在我的程序之外,那么它的地址空间与我的地址空间不同,因此我的应用程序中的地址对其不可用。 如果它可以在我的地址空间中执行代码,它可以调用 DecodePointer 并使用该地址调用编码指针。
那么这个功能的用途是什么?它们如何帮助我提高安全性?
您错过了意图,EncodePointer() 可以防止恶意数据。在恶意代码变得有害之前,它需要首先开始运行。完成此操作的基本方法是覆盖函数调用的返回地址或覆盖函数指针。程序本身现在通过分别从函数返回或通过函数指针调用来激活代码。
EncodePointer 保护函数指针。攻击者无法猜测如何对他们写入的数据进行编码,以便在程序的 DecodePointer() 调用之后它仍然指向恶意代码。
数据无法调用EncodePointer。
具有提升权限的攻击者可以在您的进程中创建线程。内核代码还可以将进程的部分虚拟地址映射到另一个用户进程和/或系统进程。
使用 EncodePointer 只会让攻击者变得更困难,但不能保证任何东西。