我对逆向工程非常陌生,所以请耐心等待...

我正在尝试从该二进制文件中获取一些struct定义(或任何被称为的定义)。经过一段时间的摆弄之后,我收集了一些数据,我确定这些数据属于我感兴趣的struct之一。但是,在仔细检查后,我注意到这些“零件”的地址数据”散布在此二进制文件中的各处,而不是像struct那样散布在一个连续的块中。

对此问题的快速Google搜索表明,可能由于“指针”而发生了加密”,这显然更像xor ing,而不是cryptoring(?)...,然后对该主题进行搜索,结果一无所获。

这促使我问:“指针加密”到底是什么? ?可以撤消吗?而且,如果是这样,我该如何解密呢?

#1 楼


指针加密


没有这样的东西。只有指针混淆。从本质上讲,这就是Microsoft销售几种功能的方式,并且EncodePointer上的文档对此非常开放。编码全局可用的指针有助于保护它们免遭利用。 EncodePointer函数使用机密混淆指针值,以便外部代理无法预测它。 EncodePointer所使用的秘密在每个过程中都是不同的。


从2006年的一个Microsoft博客中摘录的所有这些功能就是XOR具有随机数的指针;前两个函数使用每个应用程序的过程信息块中保存的随机数,并且系统版本使用与每次系统重新引导相关联的值,并且盒子上运行的每个应用程序都可以访问该值。 [...]指针不是经过直接使用,而是经过编码并保持编码状态,直到您将要使用它为止。这使攻击者更加困难,因为他必须用XOR操作后可以正确计算的值覆盖函数指针。不是不可能,但极不可能。


评论


当前版本的Windows具有比XOR稍微聪明的算法,因为如果同时具有普通和混淆的指针,则很容易破解。

– mrexodia
18年5月26日在12:12

#2 楼

我认为没有进行任何加密。该程序可能使用多个结构来存储完全正常的数据。