导航菜单
首页 » 攻略 » 正文

魔兽争霸三 单机游戏作弊器 系列一

以前有篇回答被删了。 最近做了war3的一些作弊功能去打防守图。 挺有意思的。

我大概做了技能快速冷却,技能少耗蓝,修改护甲(神圣护甲),攻击类型(混乱攻击),瞬移。

不过代码有点乱, 还在整理后加注释再把后面功能如何逆向的文章写一发……

然后把以前被删那篇回答的war3单独拿出来好了, 因为有些旧的逆向数据我懒得重新解释一遍了。

// by 8.17

论如何修改魔兽3的攻击为混乱攻击, 护甲是神圣护甲

改成

0x1:

在做之前要想好'切入点', 就是游戏在哪会调用到攻击类型这个玩意呢?

比如说可以在使用技能(包括普通攻击)之后, 造成伤害之前是需要获取的。

但是也不好入手, 因为使用技能的判断太多了, 不好区分。

又或者说。 可以这样!

把鼠标放到攻击上面, 他'应该'会获取当前的攻击类型,然后转换成Text

-> 到界面

, 好, 接下去就试试这招!

……………… 但是在获取这个攻击类型之前, 还要获取一个东西, 就是获取该英雄的.

如何在茫茫人海里面把该英雄找出来, 因为每一个英雄都有自己的攻击种类,

所以第一件事就是要找到自身的指针!

从人物HP入手, 买点装备丢装备来达到人物HP不断变化的目的.

最终找到了

一个是HP一个是MAXHP

随便掉点血就知道第一个是HP, 第二个是MAXHP.

附加OD, 在HP下访问断点

看上一层,

023C8C1B|.8BBE48020000movedi,dwordptr[esi+248];HP

ESI就是人物指针.

往上回溯, 看下ESI是怎么传递的

一直翻啊翻, 翻到函数头了

ESI=ECX. 一般ECX或者ESI传递的, 都是this指针,

就是类指针.

比如说

Class::AAA() 里面默认有一个参数传递this指针.

汇编自动生成, 但是代码省略.

同理, 顺便做个记号, 因为你总不可能记0x????? 老夫记忆力不行.

继续回溯!

函数头

继续回溯

发现了这样! 很明显就是一个递归嘛!

先不管这个递归, 直接先找到上一层, 因为如果你一直卡在这个递归里面, 万一你上一层也是N个递归或者说是一条死路呢? 所以你得先寻找到根源, 再做详细分析!

继续函数头部下断点, 那么你会发现

他的[ESP]=

也就是这里. 所以要过滤这个!使用条件断点!

[ESP]!=

总算找到Base了.

那么我们再来分析这个递归

好了。然后就可以动手了写代码了.

首先因为这个是在DLL里面的, 因为DLL的加载地址不同,

所以解析出的Base也不同, 这个需要知道PE文件的如何计算偏移的。

我就直接粗暴一点, 暴力搜索内存

MFC做个注入DLL…… 不要问我为嘛用MFC,因为它是VS自带的,方便立马用。反正关了灯都一样.

随便写一个。 不要太讲究了。

编译! 注入! 测试! 结果如下:

好啦。然后发现了辣么多个Base, 然后找名字!

从名字入手. 这个英雄叫'虚入梦'. 顺便这个游戏是UTF-8编码(略过如何求证的).

所以这个英雄名称对应的编码是=

打开CE, 搜一下

务必要记住把 扫'只读'内存勾上

然后直接一个一个修改这个Text, 看下哪个是对应的名称. 比如说

手动修改一个

运气好, 第一个就是。 如果没变化, 那就一个一个往下改。 记得如果不是的话, 要改回去.

再改下一个。 也可以用二分"修改"(查找)法, 直接一次性改一半.

如果不存在的话, 那肯定在另一半。时间复杂度O()=O(logn) 必须学以致用!!!

接下来就是开启OD, 附加游戏.

下一个访问断点.

断下来了, 就是一个字符串循环复制, 返回到上一层CALL

eax就是人物对象指针.

edi就是一个缓冲区, 把人物指针的Name复制到缓冲区.

继续回溯

这个CALL就可以用了。

PUSH0x200
PUSHBuffer
MOVECX,pObjectPointer
CALL235F640

然而我在观察地址的时候, 就观察出来

因为他们2个地址是一毛一样的!

ECX=[ESI+238]

=[+238]

其实往上跟也有可能可以关联起来, 但是我懒得继续回溯了……

所以……

发现了有些地址可能是其他分类的吧?

分类判断懒得写了。 干脆

结果就是

好啦。 至少有一个是对的.

因为刚才游戏不小心被我弄崩了。我就顺便重开而且换了个游戏.

暂时目的达到了. 获取到当前角色. (遍历所有英雄小兵之类的暂时没这个需求,不做)

下一步就是修改攻击种类:

按照刚才的步骤, 搜索显示的Text

2分搜索大法好, 3次即可到达。

下访问断点

惯例的字符串复制操作, 返回到上一个函数!

EAX就是Text,

上面的MOV EAX,

[ESP+14]. 就是从上一个函数传递过来的参数. 返回去看好一下.

上一层CALL看参数

第一个参数

第二个参数

就是上上张图, 就懒得复制了

第三个参数

就是这个玩意。 那么我们要找的是种类。 也就是第二个参数=[ESP+0BC]

然后往上分析……过程略, 多断点几次的事, 我就不废话了。

然后往上慢慢下断看参数, 直到……

mov edx, dword ptr [esp+10]

mov ecx, dword ptr [edx+]

接下去就找[ESP+34]

既然这样,那么我们试试.

首先

所以

[] + 1E8 = EDI

EAX = 攻击种类

= [EDI + 0 * 4 + 0xF4]. (已经探明EBX=0)

所以……

我们换一个有混乱攻击的号就知道。 混乱攻击的时候。 这个值是=5的。

所以我们改成5试试。

嘿嘿!

然后是不是有效。 最上面的那2张图有数值测试!

顺便…… 肯定是联网无效的, 因为有数值校验的。可以单机爽一下!

而且……哪怕你用各种作弊图, 暂时老夫还没发现哪个可以改攻击类型!

神圣护甲同理, 我就多此一举了。

还有几张图顺便贴了

评论(0)

二维码