我正在分析一些裂缝,其中一个将重定位表地址和大小更改为 0。破解者试图用这个实现什么?
为了提供更多信息,破解的目的是加载另一个 DLL,将加载表中以前的 windows DLL 名称更改为自定义的名称。
我正在分析一些裂缝,其中一个将重定位表地址和大小更改为 0。破解者试图用这个实现什么?
为了提供更多信息,破解的目的是加载另一个 DLL,将加载表中以前的 windows DLL 名称更改为自定义的名称。
删除重定位表保证 DLL 不能被重定位。
所以新代码(破解代码)不需要计算DLL中的任何地址,可以使用常量地址值。
也经常重定位表实际上不是必需的,因此可以将其删除以减小模块的大小,或者用一些数据替换它。
根据Portable Executable Specification,仅当必须将库加载到其首选加载地址之外的另一个地址时才需要重定位表。所以,从目录中删除重定位表不会有任何影响,只要库是在其首选地址加载的(事实上,这是在映像不支持 ASLR 时发生的)。
要更改要加载的 DLL 的名称,您通常只需更改导入表。剩下的只是猜测工作,不知道相关二进制文件的细节。
我相信重要的是要意识到并不是所有的“破解者”都知道他们到底在做什么,也许你正在分析一些根本不应该分析的东西。
也就是说,您可能出于以下几个原因想要删除重定位: