魔兽世界 WowBee魔蜂辅助插件原理分析

dxdn_dxdn 2012-02-12 10:26:55
Tag: wow 魔兽世界 wowbee 魔蜂 辅助 外挂 原理 破解

此篇文章是对WowBee魔蜂辅助插件实现原理的简单分析.供插件爱好者学习参考,不计版权,欢迎转载.

假定读者拥有一些lua语言基础 wow插件基础 还有些数据结构的基础知识.

众所周知暴雪在wow2.0的时候就封掉了脚本释放法术...释放法术宏的写法也被修改了.
比如你可以使用宏 /cast [harm,nodead] 火球术 但是你要是写成 /run CastSpellByName("火球术") 这个就不让你用了. 还有类似很多函数都被blz标记成了 PROTECTED 仅准许blz内部插件调用.

魔蜂是怎么突破这个限制的呢.答案是宏. 就是前边说的 /cast [harm,nodead] 火球术 这个.因为这是blz准许的释放法术宏写法.并且blz插件使这种宏不可自动执行,必须要有按键或者鼠标点击才可以.魔蜂的实现办法就是在游戏内建立一个宏.通过hack内存的办法去修改这个宏的内容.并且模拟键盘按键调用使其发挥作用.

接下来仔细说下过程.

起点还是魔蜂的内置插件,这部分我就不仔细解释了,写插件的同行都应该很了解,功能就是构造你在wow运行时候看到的小地图图标,魔蜂的那个界面,脚本编辑器之类的.因为魔蜂的脚本也是lua语言,所以并不需要什么处理,直接wow就可以调用.当魔蜂需要执行一个施法指令比如BeeRun("火球术")的时候.插件里调用CastSpellByName是不可能的了.它其实是生成了一个字符串"/cast 火球术" 当然字符串是没办法当作宏执行的.插件这时会把这个字符串进行一下编码,并且存到一个指定的内存中.这之后魔蜂的客户端就该出来干活,客户端侵入wow进程,不断扫描事先约定好的这部分内存一旦发现了这个变化就会将这部分数据提取出来,并且解码成原始字符串"/cast 火球术",然后也是侵入wow进程中魔蜂事先准备好的一个wow宏,将其内容替换掉.再之后就简单了,模拟键盘按键按一下. 好了.你的小法师应该已经开始唱火球术了.


这之中的几个要点解释下

------------------指定内存:----------------------------
老玩家都应该知道当年的FPE,金山游侠.这类东西吧.扫描内存,改写内存数据的工具.魔蜂也是这样指定与wow通信的内存的.实现起来也很简单.就3个api:OpenProcess,ReadProcessMemory,WriteProcessMemory. 具体用法google下很简单. 魔蜂在Library\FAIAP.lua里设了这么个数组local specialCharacters2 = {} 用其作为通信内存.并且在wow中对其进行了初始化 赋值680000000010,680000000020,680000000030直到6800000001000一共100个 lua是个C基础的语言.这个数在内存中是用double类型来存储的,680000000010转成double型式是0x4263CA6512014000 在内存中高位在后低位在先 扫描内存很容易发现一块00 40 01 12 65 CA 63 42 数据:
09140300h: 88 00 40 01 12 65 CA 63 42 03 00 00 00 A0 93 C5 ; ?@..e蔯B....爴?

09140310h: 0D 00 80 02 12 65 CA 63 42 03 00 00 00 A0 93 C5 ; ..€..e蔯B....爴?

09140320h: 0D 00 C0 03 12 65 CA 63 42 03 00 00 00 A0 93 C5 ; ..?.e蔯B....爴?

09140330h: 0D 00 00 05 12 65 CA 63 42 03 00 00 00 A0 93 C5 ; .....e蔯B....爴?

09140340h: 0D 00 40 06 12 65 CA 63 42 03 00 00 00 A0 93 C5 ; ..@..e蔯B....爴?

09140350h: 0D 00 80 07 12 65 CA 63 42 03 00 00 00 A0 93 C5 ; ..€..e蔯B....爴?

09140360h: 0D 00 C0 08 12 65 CA 63 42 03 00 00 00 A0 93 C5 ; ..?.e蔯B....爴?

09140370h: 0D 00 00 0A 12 65 CA 63 42 03 00 00 00 A0 93 C5 ; .....e蔯B....爴?

09140380h: 0D 00 40 0B 12 65 CA 63 42 03 00 00 00 A0 93 C5 ; ..@..e蔯B....爴?

09140390h: 0D 00 80 0C 12 65 CA 63 42 03 00 00 00 A0 93 C5 ; ..€..e蔯B....爴?

091403a0h: 0D 00 C0 0D 12 65 CA 63 42 03 00 00 00 A0 93 C5 ; ..?.e蔯B....爴?
托内存对齐的福.超级整齐的.
接下来是魔蜂内置宏的代码是这样的
sllder:SetAttribute("macrotext", "/macrotext" .. string.rep(" ", 245)) ;
呃.字符串...也很容查找..
17bbfcc0h: 0D 04 00 00 72 23 B3 81 BD FF 00 00 00 2F 6D 61 ; ....r#硜?.../ma
17bbfcd0h: 63 72 6F 74 65 78 74 20 20 20 20 20 20 20 20 20 ; crotext
17bbfce0h: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 ;
17bbfcf0h: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 ;
17bbfd00h: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 ;
17bbfd10h: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 ;
17bbfd20h: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 ;
恩..这是32bit的客户端数据.. 如果64bit客户端数据存储会不太一样.

记下这两个地址之后.就可以不断监控前一个地址,发现数据变化就解码处理下存入第二个内存地址去.

-----------------模拟按键-------------------------------
这个很容易的.windows是消息机制,只要发送个SendMessage就可以了,恩模拟一个按键是两个消息 WM_KEYDOWN和WM_KEYUP..默认魔蜂使用的是F12键. 如果你在魔兽的按键设置中改动F12键的功能会收到个提示噢~~魔蜂也就不好用了.

------------------编码解码--------------------------

恩魔蜂的编码方式是这样, 比如要编码 /cast [harm]
先按ascii转成10进制 C语言字符串结束符是个\0 lua一样
/ c a s t [ h a r m ]
47 99 97 115 116 32 91 104 97 114 109 93 0
3位规整下
047 099 097 115 116 032 091 104 097 114 109 093 000
之后5个一组 不足补0
047099097115116
032091104097114
109093000000000
得到这么3个数,挨个按double型转换
047099097115116 = 0x42C56B0E79F4F600
032091104097114 = 0x42BD2FCADC335A00
109093000000000 = 0x42D8CE0C60CC8000
监控内存的时候在数据区读出来就是这么个内容了..要记得高位在后低位在前

解码过程就是倒过来...我就不废话了..

=====================下载=======================================
代码是用vs2010 C#写的..我不怎么会用这东西,都是临时抱佛脚,大家看看就好,表拍砖了.变量命名代码结构啥的..明白人就当没看见吧.编译出的exe我也一并发了,有条件完全可以自己重新编译.我人格保证肯定不带木马病毒.转发我就无能为力.
由于魔蜂更新很可能会变更具体的通信数据.压缩包内附带了可用魔蜂插件.
代码中简单实现了魔蜂连接校验.不过当前版本的魔蜂不进行连接校验也是可以工作的.

代码
http://115.com/file/e7wxqp4b
视频
http://115.com/file/c2m8owhj

=====================我用到的工具===================================
MS官方SysinternalsSuite中的Process Explorer工具可以dump进程内存
dump出来的文件用十六进制编辑器查看 比如我用的ultraedit
double类型的十进制与十六进制转换我用的是FloatConvert



======================写在最后======================================
准确的说,魔蜂还是外挂,毕竟改写了wow的内存数据. 只不过暴雪没法检测你是否用了魔蜂,而封禁这个漏洞也有点不那么容易.
...全文
17282 5 打赏 收藏 转发到动态 举报
写回复
用AI写文章
5 条回复
切换为时间正序
请发表友善的回复…
发表回复
demigod123 2012-06-05
  • 打赏
  • 举报
回复
跪求与两位大神交流,求魔蜂破解最新版。。。
我QQ是171768367
hqvrrsc4 2012-02-17
  • 打赏
  • 举报
回复
wow在执行每个protected函数的时候,会先对其进行一次判断,方法就是跳过这个判断过程直接执行
dxdn_dxdn 2012-02-17
  • 打赏
  • 举报
回复
解锁PROTECTED 这个真能实现?? 求原理...
hqvrrsc4 2012-02-16
  • 打赏
  • 举报
回复
我采取了另一种方法,解锁了所有protected函数
可能部分功能没有他的函数库强大,但是解锁了protected函数就代表可以通过lua控制游戏中几乎所有的行为包括移动转向点击等等
比如MoveForwardStart() MoveForwardEnd() 之类的函数
试着做了一个移动到(X,Y)坐标点和一个无限距离跟随的功能,还是比较复杂的。 因为算法需要频繁检测距离和夹角并且根据他们的关系来控制人物的动作。
hqvrrsc4 2012-02-16
  • 打赏
  • 举报
回复
老兄,这是你自己研究出来的吗?
碰巧我也在研究这个玩意的原理,并且研究了wow中protected函数的机制.
我这里有一些关于解锁protected函数的源码,也许可以交流一下

588

社区成员

发帖
与我相关
我的任务
社区描述
提出问题
其他 技术论坛(原bbs)
社区管理员
  • community_281
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧