魔兽争霸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更新,我再把成品上传。

C++实现11平台魔兽全图外挂相关推荐

  1. 【11平台天梯】【原理分析】11平台天梯原理分析

    写作缘由 (Elo Ratings) ELO排名制度是当今对弈水平评估的公认的权威方法.它最初由物理学教授 Arpad Elo 创立,故命名为埃罗排名.埃罗排名最早应用于国际象棋和围棋,目前已广泛用于 ...

  2. 程序员版--致青春(二)——11平台dota胜负预判器

    程序员版--致青春(二)--11平台dota胜负预判器 之所以取"致青春"这个名,是因为我的大学要结束了.想起之前写了一些小工具,但没写博客,因此现在补上,以此纪念我即将逝去的青春 ...

  3. 11语音(11平台语音) v2.1.2 官方版

    11语音(11平台语音) v2.1.2 官方版 软件大小:30.6MB 软件语言:简体中文 软件类别:网络聊天 更新时间:2015-01-21 应用平台:/Win8/Win7/WinXP 11语音是1 ...

  4. win7下11平台玩,魔兽画面掉帧或不流畅的解决办法

    只要在运行参数里加上-opengl即可,怎么 加不用我说了吧~~~~~~~~~~~~ 嗨吧众屌丝~~~~~~~~~~~~~~~~~~

  5. UP对战平台DOTA全图 炸图 踢人

    该软件可实现 UP平台的DOTA模式全图,以及炸图(踢人) 本身不具备防炸效果,但是额外有功能,让防炸的玩家进入异次元空间(异步) 进入异次元的空间,就如同失去了灵魂,变成比电脑更加像电脑! 网盘链接 ...

  6. DeforGAN:用GAN实现星际争霸开全图外挂!

    点击上方"机器学习与生成对抗网络",关注"星标" 获取有趣.好玩的前沿干货! 文章来源:机器之心 作者:Yonghyun Jeong等 参与:李诗萌.Geek ...

  7. moodle 3.11平台安装与迁移

    2021年3月. moodle 是在线学习平台,在官方网站下载window平台安装包的基本是一键式打包安装了. 先将安装和使用心得如下. 一.安装 下载地址: moodle安装包下载地址:https: ...

  8. 11平台doat自动命令

    C:\WC3\config.lod : 82行. 添加想要的命令即可.

  9. war3_memory

    最近编写了个11平台的全图挂,主要用的是处理线程的办法.今后再慢慢学习干crc以及reload game.dll的办法来处理吧.. // 1.24E 大地图去除迷雾 patch(0x74D1B9,&q ...

  10. 关于魔兽改键。。。类似11的

    事情是这样的--闲的无聊玩了一盘卡尔的DOTA,结果发现卡尔的按键真的是十分XX啊--于是就在各个网站找那种类似于11的魔兽改键工具,不是改快捷键,而是直接按照技能的位置来改键的.可是没有找到,而11 ...

最新文章

  1. python3 编译优化 --enable-shared --enable-optimizations
  2. python之celery简单使用
  3. mysql备份时候事务日志_SQLSERVER备份事务日志的作用
  4. java开发简介_Java Web开发介绍
  5. ASP.NET Core MVC 源码学习:MVC 启动流程详解
  6. 形容人的内核是什么意思_那些对你忽冷忽热的人到底什么意思?
  7. python 怎么得到图像深度图 软件_Python为8bit深度图像应用color map
  8. 微信JSAPI支付返回缺少参数total_fee
  9. python tenacity用装饰器方式重试用例,提高测试用例的健壮性
  10. Teambition是什么软件?优缺点是什么?
  11. python开三次方_python 3次方
  12. 【机器学习 - 8】:随机梯度下降法
  13. jupyter能debug了,使用vscode的jupyter插件进行debug
  14. 微信机器人康小博来了!!!
  15. .net 邮箱验证码 邮箱验证码实现用户注册
  16. 执一不二 跬步千里-王子密码10月份月会心得(四)
  17. Docker11_2:Docker腾讯云仓库
  18. office2018自动图文集_学会使用Word自动图文集,让你事半功倍
  19. 单因素方差分析与卡方检验有什么区别,能否举个例子?
  20. Alluxio Paper

热门文章

  1. 艾索特DSP电脑调音软件
  2. JAVA 实现《超级玛丽》游戏
  3. 单片机c语言案例教程,单片机C语言案例教程
  4. VB.Net视频教程和VBA简单介绍下载
  5. 操作系统-UNIX三级索引技术
  6. Jmeter压力测试样例
  7. SQL必知必会知识点总结
  8. mysql 系统序列号_mysql 序列号
  9. python粘贴代码到word_python怎么粘贴代码
  10. 记一次Springboot 启动错误(三) xxx.jar中没有主清单属性