首页
社区
课程
招聘
奕奕平台检测那点事
发表于: 2013-6-24 19:27 58482

奕奕平台检测那点事

2013-6-24 19:27
58482

如今的11平台已经外挂横行。尽管反作弊小组正在加紧研发新的反作弊手段,但是每天客服都会复制粘贴无数耳熟能出翔的句子,说明魔高一尺,道高一丈!
本帖会对11平台目前检测机制做详细分析并给出如何过检测,适合有辅助制作基础却苦于没有指导思路的业余码农。
本帖会不定时无限期更新。


[注意]传递专业知识、拓宽行业人脉——看雪讲师团队等你加入!

收藏
免费 5
支持
分享
最新回复 (99)
雪    币: 85
活跃值: (87)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
2
那我就坐个沙发等LZ更新吧...
2013-6-24 19:39
0
雪    币: 64
活跃值: (60)
能力值: ( LV5,RANK:60 )
在线值:
发帖
回帖
粉丝
3
半年之前我写过过当时的11平台外挂的帖子。
那时的11平台还很年轻,那时的我也很年轻。
当年11的检测只需要挂起线程就轻松搞定,而且检测有时根本不开,不需处理就能开图。
时光如水,岁月如锅。
现在的11平台已经今时不同往日,对外挂的检测力度堪称所有魔兽对战平台之首。
但是在作弊与反作弊这场游戏中,作弊者总是占据有利条件的,毕竟客户端在本地,所以调试起来就方便多了。
废话不多说,先介绍下调试工具。
肯定首选OD。
其实CE也可以调试,但是CE没有隐藏调试器(对IsDebugPresent的处理),调试起来多有不便,而且没有硬件断点功能。但是CE有另一个好处,数据,特征码搜索方便,并且拥有强大的汇编编写脚本,可以方便的对游戏原代码进行HOOK,所以在辅助开发阶段OD与CE工具要结合使用。
许多人制作过平台辅助时不知从何下手,不知11究竟检测了些什么。
在这里我提供一个思路,我们从修改代码的位置入手,逆向出11的检测函数。
本帖以后所有内容均以小地图显示单位功能在War3-1.24e-6387为例,内存地址为Game.dll+0x361f7c(其他功能地址可自行百度搜索,其偏移万年不变),该地址未经修改为1(4字节)。只要完成了这个功能的稳定开发,其他功能的实现只是多写几句代码而已。
通常Game.dll在War3进程中内存起始地址为6f000000。
在电信非强力反挂房天梯2房开一局游戏(不要在非天梯万人房间开单机测试,单机的检测会弱很多,这个以后会提到),用OD附加,在OD命令行 6f361f7c,数据窗口中将该地址的1改为0.
这时已经可以在小地图看见敌方单位(非隐身)了。
但是马上就会又看不见了。
回到OD发现6f361f7c地址内数据又变成1了。
到此我们应该意识到这不是单机游戏,我们的辅助之路才刚刚开始。
预知后事如何且看奕奕平台全图制作第二弹之初识“神捕”!
2013-6-24 19:42
0
雪    币: 196
活跃值: (96)
能力值: ( LV6,RANK:90 )
在线值:
发帖
回帖
粉丝
4
前排占坑
我写了4行代码用来最大化窗口结果被11鉴定为外挂把1550的号封了,正想学学搞点真正的外挂,再被封也不亏
2013-6-24 20:18
0
雪    币: 64
活跃值: (60)
能力值: ( LV5,RANK:60 )
在线值:
发帖
回帖
粉丝
5
很久以来一直不知道为啥11平台下11xp.dll里的字符是7F(7FWARDEN_)开头的,最近无聊百度“神捕”,总算知道原因了。
继续我们的外挂制作之旅。
上回说到dota开局后我们把6f361f7c里的4字节数据由1改成0之后,可以实现小地图显示敌方单位,但是立即又不会显示了。
这里普及一下外挂制作原理。
最普遍意义的外挂是修改程序内存数据。
这其中有两种形式:修改程序的数据(堆,栈,寄存器blablabla)和修改程序代码。
像小地图显示单位这种方式就是修改程序代码。修改数据的方式我们以后会提到。
根据矛盾双方一定条件下可以相互转换,反作弊也相对应有2种形式:对程序源代码校验(传说中的代码CRC校验)和对程序数据的检测(通常以HOOK的形式并且代码进行VM保护)。
调试阶段我们是使用的调试工具OD或者CE进行内存修改的,检测程序要想修改内存就必然要用到修改内存的api。
先隆重介绍一个修改内存比较霸道的函数:WriteProcessMemory()。
这个api的牛X之处在于不仅可以修改本程序的内存,还可以修改其他程序内存,一看这功能就是为做外挂准备的。
用OD定位到这个函数。
具体操作是附加War3.exe后游戏刚开局立即按Ctrl+G,输入函数名,在函数头按F2下软断点。
二十几秒后游戏断下来了,主要看OD的堆栈区,如下图。

当你接触魔兽外挂一段时间后就会对一些数据特别敏感。就如图中的6f001000,Game.dll代码的起始位置,在WriteProcessMemory函数中是要写入的内存地址,图中的8个F翻译过来就是-1(补码),这个参数是待写入内存的目标进程句柄,-1代表本进程(通常由GetCurrentProcess()获取,其实是多此一举的,直接用-1强制转换成HANDLE就行,但是习惯上大家都这么写),接下来看
87e000,这又是一个敏感数字,代表了Game.dll代码的大小(不是Game.dll的大小,Game.dll大小是bd4000)。
通过以上简单分析我们已经很明确11平台在做什么了。
在游戏开始时,11平台对War3进程的Game.dll代码部分进行了重新改写。所以我们之前的小地图显示单位功能会在游戏开始后20多秒消失了。
逢山开路,遇水搭桥。
就先从WriteProcessMemory下手。
下辑预告:在奕奕平台全图制作第三弹中,我将用讲解如何过掉本节中找到第一个的反作弊小程序,让大家对外挂制作有一个初步的了解。
上传的附件:
  • 1.jpg (83.98kb,326次下载)
2013-6-24 21:28
0
雪    币: 1392
活跃值: (5142)
能力值: ( LV13,RANK:240 )
在线值:
发帖
回帖
粉丝
6
不会最后发现?。嘿。。。过不了了。。。坐等
2013-6-24 21:54
0
雪    币: 102
活跃值: (2030)
能力值: ( LV4,RANK:50 )
在线值:
发帖
回帖
粉丝
7
留爪。。。。。。一直在VS平台玩,VS平台检查也很厉害,经常看到有人开挂被抓。
2013-6-24 22:23
0
雪    币: 1392
活跃值: (5142)
能力值: ( LV13,RANK:240 )
在线值:
发帖
回帖
粉丝
8
。。。。。。。VS闭着眼也能写出一万个挂来。。。
2013-6-24 22:31
0
雪    币: 102
活跃值: (2030)
能力值: ( LV4,RANK:50 )
在线值:
发帖
回帖
粉丝
9
哦,真的假的,你有么,求共享。。
2013-6-25 08:37
0
雪    币: 508
活跃值: (89)
能力值: ( LV8,RANK:130 )
在线值:
发帖
回帖
粉丝
10
绿色dota 从我做起
大家好,我是海涛
2013-6-25 10:28
0
雪    币: 6934
活跃值: (2760)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
11
MAKR,持续关注更新。
2013-6-25 10:57
0
雪    币: 255
活跃值: (207)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
12
期待楼主的更新, 11平台外挂之前也有研究过, 只要是那蛋疼的更新速度让人很无奈
2013-6-25 11:53
0
雪    币: 8835
活跃值: (2404)
能力值: ( LV12,RANK:760 )
在线值:
发帖
回帖
粉丝
13
11平台检测通杀:Reload Game.dll到其他地址,遍历线程,suspend自己之外的全部线程,然后修改所有eip在game.dll里的线程的Eip到新的game.dll区域,然后修改新的game.dll内存区域的代码。然后激活线程,继续走起。

同样的手段,其实也可以用于其他游戏,举一反三,请多思考。

TIGSO 专业网络游戏安全组织为您报道。
官方网站:
http://www.tigso.com/
2013-6-25 12:15
1
雪    币: 46
活跃值: (12)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
14
净化DOTA环境,从我做起,大家好,我是esport海涛~    话说11的更新确实比较烦人,不多,但是基本每次登录都会有。
2013-6-25 13:39
0
雪    币: 7309
活跃值: (3788)
能力值: (RANK:1130 )
在线值:
发帖
回帖
粉丝
15
你的maphack也要定制
2013-6-25 18:10
0
雪    币: 558
活跃值: (46)
能力值: ( LV2,RANK:16 )
在线值:
发帖
回帖
粉丝
16
火前留名
11这么大的市场份额确实吸引不少人研究破解啊
2013-6-25 18:33
0
雪    币: 64
活跃值: (60)
能力值: ( LV5,RANK:60 )
在线值:
发帖
回帖
粉丝
17
上回说到,我们找到了11平台第一个反作弊程序段:调用WriteProcessMemory()重写Game.dll代码。
这里介绍一种常用的过检测方法。
找到检测函数,修改代码头直接返回,不执行此函数。
从WriteProcessMemory这个断点我们能得到很多信息,看堆栈,寻找函数调用流程。[esp]里通常装的是call WriteProcessMemory()的下一条指令,这里我们在堆栈区esp位置右键,反汇编窗口跟随,会跟到如下代码段。

我们看到了GetCurrentProcess(),紧接着就是WriteProcessMemory(),很明显就是这段代码还原了Game.dll.
我们往上一直寻找,直到找到
mov edi,edi
push ebp
mov ebp,esp
代码,这是通常的代码头。也有可能没有mov edi,edi这一句(这里就没有)。
有关mov edi,edi这一句其作用等同于nop,nop,目的是和push ebp mov ebp,esp在一起凑成5字节可以写HOOK跳转。而之所以不用nop,nop据说是因为其代码执行效率比nop,nop快。
找到代码头先不能简单的写ret。为了维护栈平衡,我们要找到函数本身的代码尾巴,找到函数正常返回是返回多少。
具体找的过程我就不赘述了,实在找不到就在函数里下个断点,一直F8步过跟踪,或者Ctrl+F9执行到返回。总之,这里应该ret 8.
下面我们再开一局测试一下,验证我们的修改有没有效。
(开发辅助就是要有耐心,有了新的想法就一定要及时测试,好知道下一步是接着这个思路还是另辟蹊径。另外,测试时会被“囚”好多好多账号,所以提前一定要申请大量小号。申请小号如果申请一定数量之后就会总结一些小技巧,比如申请的账号不必验证邮箱,申请账号的邮箱不必是真的,随便写一个没注册过的就可以,姓名和身份证是不会验证的。。。我是不是说的有点多了。如果你还嫌麻烦可以自己写个小程序申请。)
测试时因为这个函数是在游戏开局1min以内就执行了,所以我们修改时一定要快。OD在等待游戏开局时最好就附加上,然后定位到刚才的代码头。
(OD是有断点记忆功能的,如果上次退出时在函数头下F2断,下次进入游戏OD会自动定位代码头并下断。该定位应该是模块地址+偏移找到的,因为每次魔兽11xp.dll加载的地址可能不同,在xp系统下有可能相同,但win7X64上一定不会相同,所以以后我们所有要修改的位置都要记住代码的相对位置,就是相对于11xp.dll的位置。)
当函数断下来时,看OD标题栏提示的信息,代表断点所在代码位于什么模块内(行话叫“领空”)。
至于相对位置怎么记,可以记下当前代码位置,再打开OD的可执行模块列表,找到该模块的起始位置(基地址,也就是模块句柄,用GetmoduleHandle("11xp.dll")获取的值),用十六进制计算器计算差就是偏移。我更喜欢在CE中找,因为CE的“视图”中有“显示模块地址”,直接显示的就是现对于某模块的地址。此处代码头相对位置是11xp.dll+6cd60.
测试结果:好消息和坏消息。
好消息是:对WriteProcessMemory下断会发现确实不调用了,这意味着我们对于6f361f7c写0不会被还原了。
坏消息:当不对6f361f7c修改,单纯只测试函数代码头ret 8进行游戏时,到4分半左右就会提示“作弊嫌疑”,被T下线了。
我们没修改6f361f7c,也就是说我们没“开图”,但是还是检测到了,什么原因?
假如我们是奕奕公司的,我们除了对Game.dll校验之外,还比较关心游戏哪里会被修改?
肯定是检测Game.dll的那一部分代码。
就是CRC之上的CRC,用来校验11xp.dll的代码是否被修改。
这个问题就有点棘手了。这里的代码只要一动,就会被T,更别说开图了。
欲知后事如何,且看奕奕平台全图制作第四弹之山人自有妙计。
上传的附件:
  • 1.jpg (89.19kb,139次下载)
2013-6-25 18:56
0
雪    币: 64
活跃值: (60)
能力值: ( LV5,RANK:60 )
在线值:
发帖
回帖
粉丝
18
有关这位童鞋说的,实现起来是有难度的。
当可以无压力完成以上代码时,我可以很负责任的告诉大家,100%还是会被11平台检测的。
至于原因我现在先不说,在我的帖子后面会提到。
这里可以发广告么?
不可以么?
2013-6-25 18:59
0
雪    币: 8835
活跃值: (2404)
能力值: ( LV12,RANK:760 )
在线值:
发帖
回帖
粉丝
19
话说,其实你搞复杂了,只是对war3初始化阶段的game.dll进行影子处理,非常简单,根本不复杂(11插入的东西,在初始化后面才有,你插的早就完事了,有些工作可以早的惊人)。
PS:我搞的时候,貌似没有检测,可能是时间上早了点,我在去年日了一次maphack,打了几场,没意思了,现在玩LOL了~

老人可以偶尔发发小广告。
2013-6-26 08:32
0
雪    币: 8835
活跃值: (2404)
能力值: ( LV12,RANK:760 )
在线值:
发帖
回帖
粉丝
20
重载大法各种妙用,任何代码,只要不是云的,都可以重载的说~~
2013-6-26 08:33
0
雪    币: 167
活跃值: (68)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
21
v大已经到了寂寞阶段了,佩服佩服
2013-6-26 10:50
0
雪    币: 442
活跃值: (43)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
22
复制一份shadow手法壳里面很常见。想用这招的人对于某个情况必须谨慎对待,小心处置
2013-6-26 10:53
0
雪    币: 7
活跃值: (11)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
23
留言学习~貌似目前还都能看懂
2013-6-28 11:29
0
雪    币: 200
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
24
牛X!!!佩服
2013-6-28 11:54
0
雪    币: 190
活跃值: (40)
能力值: ( LV3,RANK:20 )
在线值:
发帖
回帖
粉丝
25
火速留名,貌似牛掰
2013-6-28 12:06
0
游客
登录 | 注册 方可回帖
返回
//