我正在尝试从该二进制文件中获取一些
struct
定义(或任何被称为的定义)。经过一段时间的摆弄之后,我收集了一些数据,我确定这些数据属于我感兴趣的struct
之一。但是,在仔细检查后,我注意到这些“零件”的地址数据”散布在此二进制文件中的各处,而不是像struct
那样散布在一个连续的块中。对此问题的快速Google搜索表明,可能由于“指针”而发生了加密”,这显然更像
xor
ing,而不是cryptoring(?)...,然后对该主题进行搜索,结果一无所获。这促使我问:“指针加密”到底是什么? ?可以撤消吗?而且,如果是这样,我该如何解密呢?
#1 楼
指针加密
没有这样的东西。只有指针混淆。从本质上讲,这就是Microsoft销售几种功能的方式,并且
EncodePointer
上的文档对此非常开放。编码全局可用的指针有助于保护它们免遭利用。 EncodePointer
函数使用机密混淆指针值,以便外部代理无法预测它。 EncodePointer
所使用的秘密在每个过程中都是不同的。从2006年的一个Microsoft博客中摘录的所有这些功能就是
XOR
具有随机数的指针;前两个函数使用每个应用程序的过程信息块中保存的随机数,并且系统版本使用与每次系统重新引导相关联的值,并且盒子上运行的每个应用程序都可以访问该值。 [...]指针不是经过直接使用,而是经过编码并保持编码状态,直到您将要使用它为止。这使攻击者更加困难,因为他必须用XOR
操作后可以正确计算的值覆盖函数指针。不是不可能,但极不可能。
评论
当前版本的Windows具有比XOR稍微聪明的算法,因为如果同时具有普通和混淆的指针,则很容易破解。
– mrexodia
18年5月26日在12:12