首页
社区
课程
招聘
[旧帖] 我就是想问问腾讯的游戏多开到底是限制在哪里了 0.00雪花
发表于: 2014-11-14 19:25 5920

[旧帖] 我就是想问问腾讯的游戏多开到底是限制在哪里了 0.00雪花

2014-11-14 19:25
5920
收藏
免费 0
支持
分享
最新回复 (5)
雪    币: 1088
活跃值: (30)
能力值: ( LV3,RANK:20 )
在线值:
发帖
回帖
粉丝
2
大概跟驱动有关
2014-11-14 19:54
0
雪    币: 43
活跃值: (10)
能力值: ( 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)就没有问题了。

实验证明此种方法可行,并且没有什么副作用。

分析到此为止,为什么网上有那么多的多开补丁存在,确实腾讯使用的这种方法是比较简单的,也容易被破解。
2014-11-15 16:13
0
雪    币: 208
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
4
有没有大佬收山不做的,告诉我一下啊。
2014-12-17 18:09
0
雪    币: 44
活跃值: (186)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
5
顶lz  不知道是否已经找到方法了
2014-12-20 22:48
0
雪    币: 7
活跃值: (12)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
6
ip和电脑配置
2014-12-21 15:03
0
游客
登录 | 注册 方可回帖
返回
//