立即注册

Zenity Fargo

查看: 788|回复: 0

魔蜂原理解析

[复制链接]

89

主题

186

帖子

1145

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
1145
发表于 2019-8-12 09:04:33 | 显示全部楼层 |阅读模式
假定读者拥有一些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
监控内存的时候在数据区读出来就是这么个内容了..要记得高位在后低位在前

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

代码中简单实现了魔蜂连接校验.不过当前版本的魔蜂不进行连接校验也是可以工作的.


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

回复

使用道具 举报

游客
回复
您需要登录后才可以回帖 登录 | 立即注册

Lust|手机版|小黑屋|Archiver| Zenity Fargo

GMT+8, 2021-12-7 02:06 , Processed in 0.013977 second(s), 18 queries .

Powered by Lust Gang!

© 2019 Innerpeace.

快速回复 返回顶部 返回列表