首页
社区
课程
招聘
[原创]C++实现11平台魔兽全图外挂
发表于: 2012-11-19 13:31 30391

[原创]C++实现11平台魔兽全图外挂

2012-11-19 13:31
30391
上周学校考试,《随机过程》随机过,考过的人都知道。
小白也很愿意玩dota,但是技术拙计,只能靠全图作为辅助。一直用着别人的外挂,所以考完试花了2天时间研究了一下,现在和大家分享一下。
魔兽争霸1.20E本来是一个很稳定的版本,但是国人似乎不热衷于开发游戏而更青睐于研发外挂,所以最先出现了dota“互通图”,这种技术比较低端,自己修改J文件,在HF建主挂机2天,让大家几乎都下载他的盗版图。后来玩家知道了不和进去需要下载地图的主机玩,这些人又发现了bcc校验,一中略显低端的异或校验,再简单的绕过平台地图检测,他们发现竟可以肆意修改J文件并且进别人主机不需要读图。
这里要说一下暴雪研发魔兽争霸时就设计了同步机制,每个玩家的动作会发送给其他玩家,仅仅是动作,比如我打了你一下,但是爆不暴击还是miss就由每个玩家本地运算,为了使大家运算结果相同,游戏开始时会发给每个玩家相同的随机种子。大家运算之后再将结果存在Game Cache(GC),这是公用的地方,如果你的和别人的不同,数据不同步,就会发生网上大家一直在问的“11平台检测到不匹配”。
但是修改J文件之后你的异常数据是通过魔兽的合法函数修改GC的,别人也会按照这个数据计算,就出现了“不读主机地图,却可以剑圣无限无敌斩”的情况。
这本身没什么,但是牛逼的程序猿们又发现1.20的致命bug,J文件里可以运行任意机器码。通俗点就是我修改了地图你如果下载了我的地图和我一起玩,我就可以通过这张地图格式化你的硬盘!
暴雪还是很负责任的公司,立即推出了1.22,1.23过渡版本,几次测试后终于在1.24彻底解决互通地图问题,冰蛙的地图不支持新版本魔兽(因为他还使用的是GC),也随着魔兽的更新立即更改GC为现在的哈希表。
其实没有破解不了的程序,但是对于低玩的我们或者说外挂还不够发展的1.24E版本,目前为止刷钱秒杀修改属性等还不是很容易,因为不好突破魔兽的同步机制。但是互通还是可以实现的,虽然魔兽争霸3摒弃了bcc换了高级一点的校验,但md5都能没破解,过地图校验没什么。
既然同步不好过,那就干点不同步的事————开图!
你在这里开个全图是不会发送给别人的,所以不会出现 数据异常。值得注意的一点就是:开了图可以选中敌方阴影中的单位,这个选中动作会发送出去,记录在录像中,所以举报的话铁证如山。
有些魔兽地图本身自带反mh的,比如在不可见区域建立一个魔法特效,谁看见了就证明谁开图。但dota从没见谁打-AntiHack(-ah),冰蛙也不主修反mh,所以地图反mh这一关就算过了。
那剩下的就是过平台检测。
11平台的检测机制我没有研究,我是win7的电脑,没开XT研究钩子,但从我用的外挂来看有一点可以肯定:各个房间的检测机制不一样。我在教育房玩从未被检测,但一去双线房立马被关小黑屋。
刚开始我用CE直接修改人物属性,金钱,很开心,可是我修改过的数据一旦需要上传立即被T,我还天真的想怎么能做到修改,后来一查资料心就凉了:以我目前的水平所能理解的唯一办法就是所有人同一时间修改数据,这不是废话么!
马上我就改变思路了,既然做外挂的都做不出来我一个外行更不可能研究出来,于是就很现实的把目标转向全图。
目前网上能搜到的全图代码不多,百度文库有一份修改单机版的,还是修改game.dll的,修改完了以后每次都是开全图,想不开都不行。我的目的是想开的时候才开。
于是我就打起了我使用的这个外挂的主意,没学过破解,不知道怎么分析汇编代码,但是好在他没有壳,我知道这类外挂主要就是修改内存,不会涉及注入线程之类的,所以直接OD附加对“写内存”函数下断,花了半天时间找到了所有需要修改的内存地址,并记录了修改之后的值。
我在网上查到说魔兽的不可见区域存在一个位于本地内存中的2维数组里,修改那里可以达到效果。
但据我“破译”的我这款外挂修改的内存来看,他修改的应该是函数,我看见了许多“e9”“90”字节。
以上是对我2天来搜索以及思考的结果有个交代,下面来说说怎么用C++实现开图。
第一步,打开魔兽进程。
这里我用我之前帖子里提过的万能开头发现不好用了!网上一查发现权限不够,我就搜了一段提升权限的代码,之后就可以打开魔兽进程了(魔兽争霸3的窗口标题是“Warcraft III”,那个三可不好打了!)。
	HWND hwnd = ::FindWindow(NULL,"Warcraft III");
	if (!hwnd)
	{
		MessageBox("请先运行游戏!");
		return;
	}
	DWORD processid;
	::GetWindowThreadProcessId(hwnd,&processid);

	//提升打开魔兽争霸的权限
	TOKEN_PRIVILEGES tkp; 
	HANDLE hToken; 
	OpenProcessToken(GetCurrentProcess(),TOKEN_ADJUST_PRIVILEGES | TOKEN_QUERY,&hToken);
	LookupPrivilegeValue(NULL, SE_DEBUG_NAME,&tkp.Privileges[0].Luid); 
	tkp.PrivilegeCount = 1; 
	tkp.Privileges[0].Attributes = SE_PRIVILEGE_ENABLED; 
	AdjustTokenPrivileges(hToken, FALSE, &tkp, 0,(PTOKEN_PRIVILEGES) NULL, 0); 


	HANDLE handle = OpenProcess(PROCESS_ALL_ACCESS,false,processid);
	if (!handle)
	{
		MessageBox("进程打开失败!");
		return;
	}
	

提升权限那里我也没弄得特别清楚,主要就是先查看权限,在获得本进程访问令牌的句柄,之后提升权限。
第二步,获取基地址。
这个基地址是什么2天时间里我也没去研究,是我从外挂里反汇编出来的,用ce在魔兽里搜得到的。刚开始走了个弯路,ce里显示这个基地址是“ntdll.dll+102480”,要先查到nedll.dll的基地址。这可闹心了,我最烦的就是枚举进程,没办法,硬着头皮搜遍互联网,发现大部分人都喜欢注入dll使用getmodulehandle,我讨厌dll,终于找到我认为最方便的查找目标进程里模块地址的方法(后来在编写外挂时舍弃了,这里还是贴出来,因为有些外挂还是需要枚举进程的)。
//枚举魔兽争霸进程获取ntdll.dll基地址
	MODULEENTRY32 me32        = {0};  //枚举到的模块存在这里
	me32.dwSize = sizeof(MODULEENTRY32); 
	HANDLE hModuleSnap = ::CreateToolhelp32Snapshot(TH32CS_SNAPMODULE,processid);//为目标进程照个快 //照,返回“照片”句柄
	CString modulename;
	if (Module32First(hModuleSnap, &me32))//这条命令是把照片里的第一个模块放进、//me32里,没有就不执行if
	{
		do 
		{
			modulename=me32.szExePath;   //找到的模块全路径,最后几位是模块名
			if(modulename.Right(9)=="ntdll.dll")//取全路径后9位
				break;

		} while (Module32Next(hModuleSnap, &me32));//与Module32First相对,   //继续寻找快照中下一个模块

	}
	CloseHandle (hModuleSnap);

后来我发现ntdll.dll+102480这个基址中不一定每次都是+102480,我无奈了。后来又找到另一基址:War3.exe+0X6A4DC,这个好,因为war3.exe每次都是00400000,所以我们的基址直接取46a4dc.
第三步就是修改内存了。
因为要想达到理想的全图即大地图迷雾,显示单位,显示隐形,分辨幻想,显示神符等等需要修改20多处内存,这里我只举个大地图迷雾的例子。
要达到去除大地图迷雾共需要修改1处内存:
[46a4dc]+0x74D1BA
这里原来的值我忘了,改过之后应该是:7015,修改2个字节。
下面我们用代码实现。
/*******************************大地图迷雾************************************/
	::ReadProcessMemory(handle,(LPCVOID)(0X46A4DC),(LPVOID)&addr,4,NULL);
//读取基址中的数据到addr中
        base11=addr+0x74D1BA;  //偏移74D1ba是大地图迷雾,修改2字节     	
	char ch11[2]={0x15,0x70};
	::ReadProcessMemory(handle,(LPCVOID)base11,(LPVOID)&re11,2,NULL);
/*这一句为了关闭全图,我设置了char re11[2]为类成员变量保存原来的2字节,以便还原,         base11也是类成员变量,记录了修改的地址*/
	::WriteProcessMemory(handle,(LPVOID)base11,(LPVOID)&ch11,2,NULL);

最后清理现场就好了。
	CloseHandle(handle);
	MessageBox("开启成功!");



新建MFC添加个按钮,复制代码进去就ok了,我就不上传exe了,主要是被封了我也用不了了。等我如果把它的运作原理研究出来,可以随着11更新,我再把成品上传。

====================================================================================================================

看了下评论,不明真相而盲目装懂的群众好多,我就再更新一下此贴。

1.后来经过研究发现,代码的偏移量没变,偏移的基址是Game.dll的基地址。直接遍历进程找到Game.dll模块地址就行,文中我多此一举的又读取了模块内的偏移来找这个地址。

2.文中代码确实可以在11平台使用,现在也可以!凡是留言说我发单机代码骗人blablabla的全是自己没有亲自复制代码去测试的,这里我小鄙视一下,实践是检验真理的唯一标准!

3.下面说下大家都关心的妖妖平台检测问题。我文中提到,当时时间紧,就没研究检测原理,只知道在教育房可以用。后来我用XT看了下平台没有驱动保护,用od附加对比了一下教育房与双线房间的不同,发现教育房间是没有检测的,而双线房间dota开始后会加载一个叫11xp.dll的模块,启动一个新的检测线程,这个线程先是重写了整个Game.dll代码,又不停调用读内存api进行代码校验,起初我以为Hook这两个读写内存api就能过掉检测,后来发现是徒劳,查了下网上过检测的一般思路,发现过妖妖检测其实很简单,只要挂起检测线程就行。
检测线程的起始地址会随11的更新而变化,但无论如何变,都会在11xp.dll模块内,所以我写的挂是不需要更新的,只要11不改变检测手段。
挂起检测线程的步骤就很简单了,先遍历魔兽进程内线程,并使用OpenThread打开每个线程,获取线程起始地址,写if语句判定该地址是否在11xp.dll模块内部,如果是就调用SuspendThread挂起线程。
挂起线程之后再使用文中代码就可以在双线房间使用了。注意教育房间不加载11xp.dll.
关于过检测我想我已经说得够多了,明白的人自然会自己写代码,考虑到各种因素,我就不上传源代码和exe了,不明白的可以去淘宝买VK,那个比较火,性价比不错,还有其他附加功能,作者会持续更新,不必担心封号。
说到封号,其实理论上过检测就不会封号。但是开图要低调,如果被玩家发现并且举报了你,因为你必定会有 点击迷雾中单位 的行为,所以铁证如山,replay检测开图是电脑检测的,准确率基本是100%。

4.最后说下开图的问题。
这个社会除了社会主义核心价值体系,其他的都不是主流价值观,绝无对错之分。
开图的人付出了金钱,或者至少付出了搜索外挂的辛苦,承受着被封的危险,自然理应享受到开图的乐趣。没开图的人坚持了自己的原则,提高了游戏的水平与素质,享受了所谓的尊重与维护正义的快感。
相对论告诉我们没有任何一个参考系可以比其他参考系更优越,更值得被参考。每个人都会有自身的价值观,我们无权否认他人的思想。
仔细思考一下为什么大家仇视贪官,却又对于考公务员趋之若鹜?
当我们是百姓时我们讨厌官民的不平等,而当我们为官时却又渴望获得更多特权。所代表的利益阶层变了,对同一问题的看法也会变。
贪与不贪,都是在为自身利益说话。开图又何尝不是?
技术的落后不可怕,可怕的是思想的冥顽不灵。
某人说:不能走封固僵化的老路。我们的思想观念不能总停滞不前!
我小时很幸运,还能学习到鲁迅的文章。鲁迅指出的问题是绝对存在的,也是大部分人不肯承认不敢面对的。
我并非为了开图而胡诌出这么多“歪理邪说”,只是从对开图这一小问题大家的看法就能看出大部分人的固步自封,也仿佛看到了有几千年文明的大国历史的某个阶段。
扯的有点多了。

最后,最近11平台教育房真的很卡!很卡!

[课程]Linux pwn 探索篇!

上传的附件:
  • 1.jpg (107.22kb,82次下载)
收藏
免费 6
支持
分享
最新回复 (58)
雪    币: 2105
活跃值: (424)
能力值: ( LV4,RANK:50 )
在线值:
发帖
回帖
粉丝
2
。。你这个只能单机玩玩
2012-11-19 13:43
0
雪    币: 1905
活跃值: (1542)
能力值: ( LV5,RANK:60 )
在线值:
发帖
回帖
粉丝
3
你一个人开的话。11是不会检测的。你试下你去多人游戏用你这个就知道了。直接小黑屋。
2012-11-19 14:27
0
雪    币: 64
活跃值: (60)
能力值: ( LV5,RANK:60 )
在线值:
发帖
回帖
粉丝
4
话说我玩了这么多年dota还不知道啥叫多人游戏呢,惭愧!
2012-11-19 14:51
0
雪    币: 85
活跃值: (37)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
5
......兄台,还是光明正大的玩吧,我从来没开过挂,虽然很菜,但菜得很正直.
2012-11-19 15:39
0
雪    币: 64
活跃值: (60)
能力值: ( LV5,RANK:60 )
在线值:
发帖
回帖
粉丝
6
当今社会从找工作就能看出,明显二代们开了他们老爹研发的外挂,而屌丝们只能干着急。社会风气如此,游戏亦如此。有些人喜欢花时间练技术,有些人喜欢用技术省时间。
价值观不同,多说无益!
2012-11-19 15:47
0
雪    币: 24
活跃值: (25)
能力值: ( LV3,RANK:20 )
在线值:
发帖
回帖
粉丝
7
LZ小有进步了!!
2012-11-19 16:54
0
雪    币: 179
活跃值: (12)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
8
打开魔兽进程
2012-11-19 16:56
0
雪    币: 120
活跃值: (18)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
9
高端, 开头的背景介绍我没看明白,因为我没玩过dota,呵呵.
2012-11-19 17:51
0
雪    币: 36
活跃值: (31)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
10
楼主很棒。现在11平台还能过么?希望可以交流一下。
2012-12-2 02:00
0
雪    币: 1392
活跃值: (4872)
能力值: ( LV13,RANK:240 )
在线值:
发帖
回帖
粉丝
11
单机内存修改网上一把一把的。麻烦把11平台几个字去掉,误人啊
2012-12-2 09:43
0
雪    币: 42
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
12
学习了。。。
2012-12-2 11:30
0
雪    币: 9
活跃值: (27)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
13
只能单机。多开就进小黑屋了。不过研究下还是可以
2012-12-2 15:55
0
雪    币: 64
活跃值: (60)
能力值: ( LV5,RANK:60 )
在线值:
发帖
回帖
粉丝
14
没文化真可怕!
2012-12-3 12:07
0
雪    币: 64
活跃值: (60)
能力值: ( LV5,RANK:60 )
在线值:
发帖
回帖
粉丝
15
“单机”?“多开”?
2012-12-3 12:08
0
雪    币: 36
活跃值: (31)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
16
所以说看雪也不都是高手。还是那啥居多。
2012-12-5 16:51
0
雪    币: 1
活跃值: (14)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
17
搜索了一下,没有找到显示单位的内存值
2012-12-8 14:04
0
雪    币: 24
活跃值: (30)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
18
很不错的帖子 可以拿来参考下 谢谢
2012-12-8 14:17
0
雪    币: 346
活跃值: (129)
能力值: ( LV6,RANK:90 )
在线值:
发帖
回帖
粉丝
19
以前经常玩 现在跑去 英雄联盟去了
2012-12-8 14:30
0
雪    币: 45
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
20
这种修改法,只能单机吧,如果换种修改法,或许能联网
2012-12-8 14:39
0
雪    币: 11
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
21
话说天坑遇到一个开图TF,各种犀利,隐形直接钩,不知道最后有没有被举报
2012-12-10 09:23
0
雪    币: 0
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
22
11的反外挂并不是太厉害
2012-12-10 10:06
0
雪    币: 7
活跃值: (11)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
24
这么改,肯定是不行的,起码要有个过保护的模块吧
2012-12-22 00:14
0
雪    币: 0
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
25
楼主抱着研究的心态我还是比较赞赏的,但是如果游戏开挂,我是相当鄙视的,特别是DOTA,因为我也是一位DOTA玩家。
2012-12-22 01:06
0
游客
登录 | 注册 方可回帖
返回
//