war3最常用秘籍(娱乐War3随机函数GetRandomInt)

war3最常用秘籍(娱乐War3随机函数GetRandomInt)(1)

眼睛一闭一睁,接触逆向6年过去了,技术一点没有长进,主要突出一个『』字。

不是什么高难技术,纯属分享。

起因最近被带动玩一款叫做“宠物小精灵防御战” 的 War3地图, 每个玩家“抓”精灵进行PK的游戏。

那么这里问题就来了, 抓精灵是有概率的,这就很气,很皮,似乎很大程度结果都要向运气看齐,说到这里不由想起了十连跑(小精灵逃跑)的悲伤。

于是我就想,抓精灵的概率是否和本地时间有关?还是和游戏时间有关? 不过这么猜那就对不起自己码农的身份了。

使用解包工具打开魔兽地图,提取出 JASS 脚本文件, 观察定位看到抓精灵的概率 GetRandomInt(1,'d')>=50 / 随机1到100的数据 大于XX时怎么怎么,就是你了。

那么魔兽的 GetRandomInt 是怎么随机呢, 种子怎么生成,算法是什么样, 应该做一个HOOK吗,搞个DLL注入还是搞个远程调用,好像问题很多。

进入到关键算法,准备提取算法

war3最常用秘籍(娱乐War3随机函数GetRandomInt)(2)

突然看到 程序使用了一块固定数据 参与计算, 要把这段数据复制出来再搞来搞去编程什么的,太麻烦了。

目前已知的信息, GetRandomInt 参数为两个数字, 其中种子保存在固定位置,且每次执行GetRandomInt后,种子会相应的变化,

那么,写个新程序加载game.dll ,通过搜索特征码也好,硬编码也好定位函数地址,从war3.exe内存中读取种子数据并写入自己的模块内,直接本进程调用GetRandomInt即可知道

war3下次执行GetRandomInt时的结果,从而知道,什么时候能抓到精灵,什么时候抓不到。

开始编写程序,找到war3窗口,打开进程,得到模块地址,搜索到GetRandomInt地址, $28 得到种子地址指针 , 同时自身加载 game.dll 并找到各地址。

然后每当需要时就读取远程内存并计算下一次随机数。

贴个简单的关键代码

/////////////////////////////////////////////////////////////////////////////

ReadProcessMemory(hWarPro,Pointer(pzhongzi),@dqbytes[0],8,size); //远程种子数据地址

asm

pushad

mov eax,my_zhongzi //本进程中的种子地址

mov ebx,Cardinal(dqbytes[0]) //远程war3读取到的种子前4字节

mov [eax],ebx //写入到本进程

mov ebx,Cardinal(dqbytes[4]) //远程war3读取到的种子后4字节

mov [eax 4],ebx //写入到本进程

push $64 //参数100

push $1 //参数1

call my_fun //本进程内 GetRandomInt 地址

mov c,eax //得到结果

add esp,8

popad

end;

lbl2.Caption:=IntToStr(c);

/////////////////////////////////////////////////////////////////////////

同步调试后,每次运算结果与war3相同。 立刻上线对战平台测试,什么稀有神兽想抓就抓,爽,艹翻一切。

每次GetRandomInt的数字越小,说明越容易抓到,稀有的50以下, 半神兽15以下, 神兽5以下, 每个玩家抓精灵时都会调用GetRandomInt,观察好数字决定自己抓精灵的时机就可以了,

我感觉我在这个游戏无敌了。

对了,去年还有个病毒利用魔兽jass漏洞,只要玩了后门地图就会在启动文件夹建立一个批处理文件, 批处理下载一个程序运行并感染用户的所有war3地图实现传播,太厉害了。

后记: GetRandomInt 应该可以利用得更多, 比如 Dota Imba 每个玩家开场获得一个宝箱,宝箱开出的东西是随机的,开到好东西决定了一个好的开局甚至碾压, 如果分析一下对应地图的jass文件,应该可以控制到想开什么开什么。

本文由看雪论坛 noNumber 原创,转载请注明来源:转自看雪论坛

如果你喜欢的话,不要忘记点个赞哦!

,

免责声明:本文仅代表文章作者的个人观点,与本站无关。其原创性、真实性以及文中陈述文字和内容未经本站证实,对本文以及其中全部或者部分内容文字的真实性、完整性和原创性本站不作任何保证或承诺,请读者仅作参考,并自行核实相关内容。文章投诉邮箱:anhduc.ph@yahoo.com

    分享
    投诉
    首页