如何绕过或阻止 GetSystemTime?

逆向工程 艾达 ollydbg
2021-06-19 16:28:09

我有一个 DLL 调用GetSystemTimeAsFileTime并将其设置为检查时间以防止程序运行现在我想用固定的日期和时间替换它,例如 07/25/2017 而不是实时和动态时间

这可能吗 ?

截屏

哪一个应该改变,什么?

2个回答

我将在不做任何假设的情况下回答这个问题。之前我不得不为一个客户做这件事,因为它是关于非版权放弃软件的。您的结果可能会有所不同。

至于您的具体问题,是的,这是可能的,但可能不是您想要实现的最佳(或最简单)解决方案。无论如何,请考虑以下事项,记住这些只是潜在的解决方案:

1.读入codecaves这种非常常见的技术可以利用内存和功能来制作、注入、重定向和执行您编写的自定义代码。

2.跟踪该例程的执行。请注意驻留在寄存器和/或堆栈中的任何您感兴趣的值,尤其是call指令的返回值根据您发现的内容,您可以创建仅修改现有字节的注入。

例如,也许来自1009A467-的字节1009A474足以创建一个自定义mov指令,eaxmov指令之前将您想要的值放入1009A477

或者,如果您已经对那部分代码进行了足够的研究,也许您可​​以在另一个寄存器中指定某些内容 at 1009A477、 iemov [ebp+var_4], ebxmov [ebp+var_4], edx等。

3.如果你nop这两jz条指令会发生什么看看他们是如何跳转到那段代码的loc_1009A467请注意,可能会出现意外结果,例如立即触发试用期结束或损坏数据。这是它可以帮助在安装应用程序时监控应用程序的足迹的时候,以便您可以确定它如何通过激活等功能保持持久性。也许它是一个临时文件、一个注册表项或其他东西。

最后,两个and你指向的指令1009A4421009A446被引用时被清零的内存地址[ebp+offsets]分别。这只是将它们设置为以后在某处使用。任何and带有 0 的值都将等于 0。这是 Assembly 中用于清除寄存器的常用方法,就像您xor自己注册时一样,即xor eax, eax. 您可以and 在此处阅读有关二元运算的更多信息

这是一个例子。

我和一个朋友很久以前就做了这个,以绕过对某个程序的试用(不命名)。它修改GetSystemTimeAsFileTime返回的值

GetSystemTimeAsFileTime 热补丁