我正在尝试将*.exe
文件从16 进制更改Arial
为Tahoma
。我已经做到了,问题是程序注意到某些更改。
我是hexing的新手,所以我不确定是否每次您将exe十六进制化时,某些日期也会发生变化(可能是程序注意到了这一点)。任何人都可以确认这一点,如果可能的话可以提出解决方案?
我正在尝试将*.exe
文件从16 进制更改Arial
为Tahoma
。我已经做到了,问题是程序注意到某些更改。
我是hexing的新手,所以我不确定是否每次您将exe十六进制化时,某些日期也会发生变化(可能是程序注意到了这一点)。任何人都可以确认这一点,如果可能的话可以提出解决方案?
Answers:
通常,可执行文件的日期时间戳是没有意义的,因为时间戳不是原始的编译时间,而是安装时间。可执行文件无法依靠外部时间戳来验证其是否完整。
一些可执行文件经过了数字签名。这意味着使用发布者的密钥对文件应用加密功能,并将其附加到可执行文件上。该签名可以通过操作系统(例如Windows)或可执行文件本身进行验证。
由于可执行文件的签名与计算值不匹配,因此将注意到可执行文件的二进制结构的任何更改。如果没有原始密钥,通常是无法生成正确签名的,这是一项防止篡改(例如,破解软件或感染病毒)的安全功能。
除此之外,还可以有CRC(例如CRC-32),它们也可以简单地检测到可执行文件的更改。在这种情况下,可执行文件可能会在内部验证检查,您可以通过在可执行代码中进行跟踪,直到找到检查例程,然后无操作(0x90)退出对检查函数的调用,才能绕过该检查。
似乎该exe具有自我保护逻辑,这在当今很正常。但是,实现此保护的方法并不相同。一些使用数字签名,一些使用CRC检查,一些使用第三方模块保护工具等等。但是我相信第三者不是您的情况,因为通常这些工具生成的模块经过压缩和/或加密,因此您无法直接找到信息。
但是,尽管可以使用该时间戳记信息来检测修改,但是很少将时间戳记仅用于保护,因为任何人都可以使用此类工具对其进行更改。如果您拥有原始属性,则可以还原属性,因为它不会造成损害,但可能无法正常工作。
那么,下一步是什么?为了克服这个问题,我们需要知道对修改检测进行了哪种检查,这比混合模块要复杂得多。在此之后,我们可能会采用一些高级方法,例如进程内内存修改,破解检测例程或挂钩Windows API调用以实现字体替换的目标,但只有通过混合才能实现这些方法。您至少需要学习如何使用调试器。也许有人已经出于不同目的(例如,NO-CD补丁)破解了该文件,然后您可以抓取它进行混合,并且由于逻辑已被停用,因此它可能会起作用。但是,请在执行任何操作之前始终考虑合法性。
但是,您试图仅更改使用的字体。这对我来说似乎合法-您为什么不要求应用程序供应商选择更改字体?