指针解密可能吗?

逆向工程 视窗 二元分析 C++ 指针
2021-07-04 07:48:43

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

我试图struct从这个二进制文件中获得一些定义(或它们的名字)。经过一段时间的摆弄,我收集了一些我很确定属于struct我感兴趣的数据。但是,经过仔细检查,我注意到这些“数据片段”的地址” 分散在这个二进制文件中的各个地方,而不是像 astruct应该的那样位于一个连续的块中。

在这个问题上的快速谷歌搜索表明它可能是由于“指针加密”而发生的,这显然更像是xoring 而不是加密(?)......并且对该主题的以下搜索导致任何结果。

这让我不禁要问:“指针加密”究竟是什么?可以撤销吗?而且,如果是这样,我该如何解密?

2个回答

指针加密

哪有这回事。只有指针混淆。这本质上是微软如何推销几个功能,他们从文档中对此非常开放EncodePointer

编码全局可用的指针有助于保护它们不被利用。EncodePointer函数使用秘密混淆指针值,使其无法被外部代理预测。EncodePointer每个进程使用的秘密都不同。

来自 2006 年Microsoft 博客之一

所有这些函数所做的都是XOR一个带有随机数的指针;前两个函数使用一个随机数保存在每个应用程序的进程信息块中,系统版本使用一个与每次系统重新启动相关联的值,并且每个在机器上运行的应用程序都可以访问。[...] 不是直接使用指针,而是对指针进行编码并保持编码状态,直到您将要使用它为止。这使得攻击者更加困难,因为他必须用一个在XOR操作后可以正确计算的值来覆盖函数指针并非不可能,但极不可能。

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