使用EncodePointer/DecodePointer的好处

M.B*_*oss 13 c++ winapi

在Windows 中使用EncodePointer/DecodePointer有什么好处?

MSDN说:
编码全局可用指针有助于防止它们被利用.所述EncodePointer功能混淆与秘密,使得它不能由外部代理被预测的指针值.使用EncodePointer的秘密对于每个进程都是不同的.

现在的问题是:如果攻击者不在我的程序中,那么它的地址空间与我的地址空间不同,因此我的应用程序中的地址不可用.如果它可以在我的地址空间中执行代码,它可以调用DecodePointer并使用该地址来调用编码指针.

那么这些功能的用途是什么以及它们如何帮助我提高安全性?

Han*_*ant 13

您缺少意图,EncodePointer()可以防范恶意数据.在恶意代码变得有害之前,它需要先开始运行.完成这项工作的基本方法是覆盖函数调用的返回地址或覆盖函数指针.程序本身现在通过分别从函数返回或通过函数指针调用来激活代码.EncodePointer保护一个函数指针,攻击者没有办法猜测如何编码他写的数据,这样在程序的DecodePointer()调用之后它仍然指向他的代码.

数据无法调用EncodePointer.