对 *.exe 进行十六进制处理 - 时间戳是否也会被修改?

对 *.exe 进行十六进制处理 - 时间戳是否也会被修改?

我正在尝试对*.exe文件进行十六进制转换,以将字体从 更改为ArialTahoma我已经这样做了,问题是程序注意到有些东西已经发生了变化。

我对十六进制还比较陌生,所以我不确定每当你对 exe 进行十六进制处理时,某些日期是否也会改变(程序可能就是这样注意到的)。有人可以确认这一点吗?如果可能的话,可以提出解决方案吗?

答案1

通常,可执行文件上的日期时间戳毫无意义,因为时间戳不是原始编译时间,而是安装时间。可执行文件不可能依赖外部时间戳来验证其是否完整。

一些可执行文件是经过数字签名的。这意味着使用发布者的密钥对文件应用加密函数,并将其附加到可执行文件中。此签名可以由操作系统(例如 Windows)或可执行文件本身验证。

由于签名与计算值不匹配,因此可执行文件的二进制结构的任何更改都会被注意到。通常,没有原始密钥就无法生成正确的签名,原始密钥是一种防止篡改(例如破解软件或病毒感染)的安全功能。

除此之外,还有 CRC(例如 CRC-32),它也可以简单地检测可执行文件的更改。在这种情况下,可执行文件可能正在内部验证检查,您可以通过跟踪可执行文件代码来绕过它,直到找到检查例程并将函数调用置为无操作(0x90)以检查函数。

答案2

看起来该 exe 具有自我保护逻辑,这在当今很正常。但是,实现这种保护的方法并不相同。有些使用数字签名,有些使用 CRC 校验,有些使用第三方模块保护工具等等。但我认为第三方工具不适合您,因为通常这些工具生成的模块是压缩和/或加密的,因此您无法直接找到信息。

然而,虽然可以使用时间戳信息来检测修改,但仅使用时间戳进行保护的情况应该很少见,因为任何人都可以使用这类工具。如果您有原始属性,您可以恢复属性,因为这不会造成损害,但可能不会起作用。

那么,下一步是什么?为了解决这个问题,我们需要知道对修改检测进行了什么样的检查,这肯定比对模块进行十六进制处理要复杂得多。在完成这些之后,我们可能会采取一些高级方法,如进程内内存修改、破解检测例程或挂接 Windows API 调用来实现字体替换的目标,但这些都不能仅通过十六进制处理来实现。您至少需要学习如何使用调试器。也许有人已经破解了该文件用于不同的目的,例如 NO-CD 补丁,然后您可以将其抓取进行十六进制处理,并且可能会成功,因为逻辑已经被停用。但在采取任何行动之前,请始终考虑合法性。

但是,您只是试图更改正在使用的字体。这对我来说似乎有点合法 - 您为什么不要求应用程序供应商提供更改字体的选项?

相关内容