我想修补应用程序以避免它使用/创建特定的互斥锁,因为这会阻止应用程序在多个实例中运行。我已经能够使用一个名为 Process Explorer 的程序关闭互斥锁的句柄,但我不想每次都这样做......
你有什么想法可以帮助我吗?我对互斥锁、信号量和类似的东西真的很陌生,我不知道如何从应用程序中删除它。
我想修补应用程序以避免它使用/创建特定的互斥锁,因为这会阻止应用程序在多个实例中运行。我已经能够使用一个名为 Process Explorer 的程序关闭互斥锁的句柄,但我不想每次都这样做......
你有什么想法可以帮助我吗?我对互斥锁、信号量和类似的东西真的很陌生,我不知道如何从应用程序中删除它。
有两种方法可以做到这一点:
CreateMutex互斥锁名称的调用并更改互斥锁名称(例如将其随机化)。CreateMutex使用十六进制编辑器创建调用和搜索互斥锁名称的可执行文件或 dll 的副本(搜索 ANSI 和 Unicode 字符串并修改字符串。确保您没有更改字符串的长度。您需要找到创建互斥锁的代码。即调用 CreateMutex/OpenMutex API 函数。然后通过覆盖操作码来修补它。因此,您需要学习如何反汇编以及如何修补可执行文件的代码。如果它对你来说是新的,你应该尝试一些crackme教程,它会教你这样做。
我做的。首先我用这个函数的“ret”替换了调用Windows API的CreateMutex的子程序的第一条指令(它不仅是“ret”,而且是“ret xxxh”,我不知道为什么)。然后,我通过简单的“jz”到“jmp”更改避免了句柄为 0(空)时的错误调用。
编辑:我也可以 nopped 调用和它之前的 3 个参数,而不是用 ret 替换调用的第一条指令。