avatar

目录
植物大战僵尸(2)


怎么秒杀

  1. 提升植物攻击力,达到一击扣完僵尸血量
  2. 使僵尸血量直接归0

什么是CALL指令

按照我的理解

汇编中的CALL指令,就像C语言调用函数一样

Code
1
豌豆攻击函数(攻击伤害,攻击对象)
Code
1
2
3
4
5
0053186D - 7E 08                 - jle 00531877
0053186F - 53 - push ebx 0
00531870 - 50 - push eax 14
00531871 - 56 - push esi 1AC252E0
00531872 - E8 59FAFFFF - call 005312D0 豌豆攻击CALL

如果要使用豌豆攻击call,首先就要先传入他的三个值。

怎么看一个CALL要传入几个值,我是通过这个CALL上面 push 指令,比如上面那个

CALL 005312D0 上面 先是三个push ,然后才有 jle 这些其他指令,所以这个call 是有三个值的。

其余的可以通过百度搜索。

了解CE内存浏览器按键功能

按键

  • Toggle Breakpoint :下断点
  • 运行:断下的地方继续运行
  • Step Into:步入
  • 步过:跳过,比如你跟数据时候,跟到了有CALL的地方,你不想跟进去,就可以点这个
  • Step Out:跳出CALL,比如你跟数据时候,你觉得这个CALL里面没你想要的东西了。你就可以点一下直接跳过这个CALL。

僵尸血量寻找

打开CE,附加游戏。

先查找僵尸血量

第一步

等僵尸出现 —》选择数据类型四字节 —》 搜索未知值

血量未知值

第二步

在豌豆攻击到僵尸后,搜索减少的数值。因为我们现在不知道豌豆攻击一次扣多少血量,所以不能选择精确的减少数值。

减少数值

第三步

重复第二步,直到搜索出来的值比较少,往下拉,查看哪个值比较像血量

查找出来

尽量避免不要让僵尸那么快死亡,不然后续就比较麻烦。通常血量就是红框框柱的地方,但没打到僵尸时候,他不会是动态的,只有僵尸被攻击到,才会发生变化。

秒杀功能实现1

将这个地址添加到列表中,对其进行查找访问,可以使用快捷键F5

Code
1
2
3
4
5
005312FE - 8B BD C8000000  - mov edi,[ebp+000000C8]
0052D71B - 8B B0 C8000000 - mov esi,[eax+000000C8]
00531319 - 89 BD C8000000 - mov [ebp+000000C8],edi
0052A527 - 39 8B C8000000 - cmp [ebx+000000C8],ecx
00531783 - 83 BD C8000000 00 - cmp dword ptr [ebp+000000C8],00 比较血量

查找访问

会出现两个CMP, 我们重点关注

Code
1
00531783 - 83 BD C8000000 00 - cmp dword ptr [ebp+000000C8],00   比较血量

这一个,因为他是在判断现在的血量是否等于 0.我们选择他,显示反汇编程序进入内存浏览器。

点击 CMP 那一段 ,快捷键F5对其下断

下断

让豌豆攻击一下僵尸,发现游戏断下了,回到CE。

点击 Step Into 跟一下

Step Into

Step

但你一步一步跟下去时候会发现

Code
1
2
3
4
5
执行到 jg 005317A9 后 
mov ecx,[esp+24] 这一段会直接跳过,不执行,
跳到 pop edi 处

jg 005317A9 --》 pop edi

建议修改之前,先复制一下原指令建议修改之前,先复制一下原指令建议修改之前,先复制一下原指令

现在开始,我们可以尝试着让 jg 不跳转 ,就是 nop 掉,转为空地址,看下会怎样。

Nop打法

Nop 后,等豌豆在攻击到僵尸,游戏断下,在重新 Step Into 跟下去,就会发现,被跳过的代码正常执行了。

把CMP 下了断点那处 在按 F5 取消断点,点击运行,回到游戏中就会发现,普通僵尸已经被秒杀。

头盔僵尸秒杀功能实现1

除了普通僵尸,还有带头盔的僵尸,当头盔僵尸出现时候,就发现秒杀功能失效了。

头盔

重新对 CMP 那里下断,当豌豆攻击到头盔僵尸时候,会发现断不下来,说明这个CALL里面不是对他血量判断的,我们就跳出去进行跟。

首先等豌豆攻击到普通僵尸时,游戏断下。

在内存浏览器中点击 Step Out

Step Out

跳出这个CALL

Code
1
00531877 - 5F                    - pop edi

来到了这里。先运行游戏。并且把断点取消。

快捷键Ctrl +B 删除断点

删除断点

运行游戏后,在这个CMP 中 按 F5 下断点,看下能不能断下

Code
1
00531838 - 83 BE D8000000 00     - cmp dword ptr [esi+000000D8],00 { 0 }

当豌豆攻击到头盔僵尸时,会发现断下了。

按 步过 慢慢跟下去。会发现

Code
1
2
3
0053183F - 74 15                 - je 00531856

0053186D - 7E 08 - jle 00531877

这两个地方,都会跳过中间的代码,直接运行到下面,和上面普通僵尸的很像。可以按照刚才处理普通僵尸的试试,对其跳转设置成不跳转。

最后发现

Code
1
0053186D - 7E 08                 - jle 00531877

处理这一段才有用

将其Nop 掉

Nop 大法果然好用。

秒杀功能实现2

除了把判断跳转Nop 。

还可以把豌豆攻击力修改实现秒杀功能

回到一开始普通僵尸判断血量的地方

Code
1
00531783 - 83 BD C8000000 00 - cmp dword ptr [ebp+000000C8],00   比较血量

下断,等豌豆攻击僵尸时,注意右下方堆栈窗口

堆栈窗口

注意返回地址的参数

双击进去

Code
1
2
00531872 - E8 59FAFFFF           - call 005312D0
00531877 - 5F - pop edi

会来到这个地址

按照上面的经验,也是找一个CMP 指令进行下断分析

Code
1
0053185A - 83 BE C4000000 00     - cmp dword ptr [esi+000000C4],00 { 0 }

我选了这个。

断下后,按Step Into 一路跟下去,

来到那个CALL时候,观察右方寄存器的值

寄存器

都是十六进制

Code
1
2
先看EAX
EAX = 000000014 十六进制转成十进制 = 20

细心的会发现,豌豆攻击普通僵尸,每一下就是扣血20.那不放大胆猜测,这里的EAX就是 豌豆的攻击力。

怎么改

Code
1
2
3
4
0053186F - 53                    - push ebx
00531870 - 50 - push eax
00531871 - 56 - push esi
00531872 - E8 59FAFFFF - call 005312D0

寄存器的EAX的值,就是通过 push eax 传进去的。

那么熟悉hook 的可以通过 hook 传进去。但是懒人有懒人的法

观察右方寄存器。ESI,EDI等的值都非常大。我们可以 将 push eax 修改成 push esi传进去

push

头盔僵尸秒杀功能实现2

继续在CMP处下断

Code
1
0053185A - 83 BE C4000000 00     - cmp dword ptr [esi+000000C4],00 { 0 }

通过step into 跟进去

Code
1
00531866 - E8 75F7FFFF           - call 00530FE0   头盔僵尸血量CALL

会跟进这个call里面

头盔僵尸CALL

继续Step into 跟下去。来到

Code
1
2
3
00530FEF - C7 45 54 19000000     - mov [ebp+54],00000019 { 25 }
00530FF6 - 8B BD D4000000 - mov edi,[ebp+000000D4] { 头盔僵尸最大血量}
00530FFC - 8B 8D D0000000 - mov ecx,[ebp+000000D0] { 头盔僵尸现在的血量}

这里。观察右方的寄存器

右方寄存器

Code
1
2
EDI = 00000172  十六进制转十进制 = 370
ECX = 0000014A 十六进制转十进制 = 330

既然知道存放头盔僵尸血量的地方,那么就可以进行秒杀处理了

秒杀处理1

可以对僵尸最大血量置0,然后让僵尸现在的血量指向存放最大血量的EDI

wrp

这样子只要一攻击,头盔僵尸就会被秒杀

秒杀处理2

第二种比第一种更简单。就是直接把当前血量置0

wrp

也可以达到秒杀效果

结尾

植物大战僵尸的却很适合练手,每一次分析都会发现新的玩意,很有意思。

借用一句看到很不错的话:

技术不分对错.人性才分善恶.

学习逆向的人必须身心放正.

身心放正之人手握屠龙刀,也是保家卫民.

文章作者: KeyboArd
文章链接: https://www.wrpzkb.cn/ReadZhiwu2/
版权声明: 本博客所有文章除特别声明外,均采用 CC BY-NC-SA 4.0 许可协议。转载请注明来自 KeyboArd's Blog
打赏
  • 微信
    微信
  • 支付寶
    支付寶

评论