能力值:
( LV3,RANK:20 )
|
-
-
2 楼
大概跟驱动有关
|
能力值:
( LV2,RANK:10 )
|
-
-
3 楼
1、通过枚举进程的方法检查;
2、通过FindWindow查找窗体类检查;
3、通过CreateMutex建立内核对象检查。
方法1:检查进程,然后判断是否有重名的进程,此方法相当不可靠最容易破解,通常不会采用,并且枚举进程在不同系统上API差别比较大,通常不会用这样的方法。
方法2:FindWindow,这是很常用的一种方法,但是通过分析QQ游戏发现,QQ游戏窗口的窗体类名不同版本并不一样,所以估计腾讯使用这种方法防止多实例比较麻烦
方法3:这种方法是建立一个内核对象,如果内核对象已经存在,那么在创建以后马上使用GetLastError检查的话,会返回一个ERROR_ALREADY_EXIST,十六进制值是0xB7,这种方法很通用,而且不同Windows版本基本上都支持,是一种很好的方法。
在破解之前,显然不知道QQ游戏使用哪种方法,所以,单步跟踪的时候都要注意,方法1的一个办法就是在QQ游戏启动以后看看是否加载了psapi.dll这个库,如果没有,就不会,另外两个方法可以在kernel32.dll和user32.dll里增加断点来实现。
实际调试表明,腾讯使用第三种方法,它的检查函数位于Utility.dll里,在我使用的这个版本里,反汇编内容如下:
.text:10012F3C call ds:CreateMutexA
.text:10012F42 test eax, eax
.text:10012F44 mov [esi+4Ch], eax
.text:10012F47 jz short loc_10012F6D
.text:10012F49 call ds:GetLastError
.text:10012F4F cmp eax, 0B7h
.text:10012F54 mov ecx, esi
.text:10012F56 jnz short loc_10012F5F
这里用了一个很“标准”的方法:CreateMutex然后GetLastError,如果返回值等于0xB7则跳转到某个地址返回。
所以,索性全部改掉它,jnz的意思是,如果不相等,就跳转到某地址,那么,也不要判断相等不相等了,把10012F56到10012F5E全部改成nop(0x90)就没有问题了。
实验证明此种方法可行,并且没有什么副作用。
分析到此为止,为什么网上有那么多的多开补丁存在,确实腾讯使用的这种方法是比较简单的,也容易被破解。
|
能力值:
( LV2,RANK:10 )
|
-
-
4 楼
有没有大佬收山不做的,告诉我一下啊。
|
能力值:
( LV2,RANK:10 )
|
-
-
5 楼
顶lz 不知道是否已经找到方法了
|
能力值:
( LV2,RANK:10 )
|
-
-
6 楼
ip和电脑配置
|
|
|