吾爱破解 - 52pojie.cn

 找回密码
 注册[Register]

QQ登录

只需一步,快速开始

查看: 37865|回复: 59
收起左侧

[游戏安全] 植物大战僵尸之植物种植无CD

  [复制链接]
Roachsa 发表于 2019-2-16 23:26
本帖最后由 Roachsa 于 2019-2-24 20:39 编辑

继续分析植物大战僵尸,第四篇,这次的目标是植物无CD效果。

准备

  • 系统:Windows 10 x64 专业版
  • 软件:植物大战僵尸中文版
  • 工具:CheatEngine v6.8.2、吾爱破解专用版OllyDbg
  • 目标:植物无CD

分析

整理思路。

在游戏中多次实验可以发现,当点击植物卡片时,会触发两种情况,一种是装填完毕,一种是未装填完毕。

猜测游戏中对植物装填状态有一个判断,而且是发生在点击植物卡片之后,所以,目标可以分为两个部分:

  • 寻找植物卡片点击事件处理
  • 寻找植物装填状态判断

进行分析。

1. 寻找植物卡片点击事件

第一个目标,可以将第三篇的植物种植函数来作为切入点。

搜索当前阳光存储地址,找出减少阳光值指令。

单步执行出种植函数。

004121FE  |.  8B4D 0C       mov ecx,[arg.2]                          ;  kernel32.772887DD
00412201  |.  8B55 08       mov edx,[arg.1]
00412204  |.  51            push ecx
00412205  |.  52            push edx
00412206  |.  57            push edi
00412207  |.  8BCB          mov ecx,ebx
00412209  |.  E8 22DBFFFF   call Plants_v.0040FD30                   ;  0x0040FD30-种植植物函数
0041220E  |.  E8 0DC3FFFF   call Plants_v.0040E520
00412213  |.  5F            pop edi                                  ;  0019FD00
00412214  |.  5E            pop esi                                  ;  0019FD00
00412215  |.  5B            pop ebx                                  ;  0019FD00
00412216  |.  8BE5          mov esp,ebp
00412218  |.  5D            pop ebp                                  ;  0019FD00
00412219  |.  C2 0C00       retn 0xC

向上找到函数头部,下断,就可以发现该函数就是植物卡片点击事件处理函数。

2. 寻找植物装填状态判断

点击植物分为可种植和不可种植两种状态,所以从种植函数开始逆向分析点击事件处理函数。

种植函数上方就是一个判断跳转,简单分析可以猜测其功能是判断本次点击是否为放下植物。

004121F3  |.  8BC7          mov eax,edi
004121F5  |.  E8 E6AAFFFF   call Plants_v.0040CCE0                   ;  猜测-判断本次鼠标点击是否为放下植物
004121FA  |.  84C0          test al,al
004121FC  |.  74 1E         je short Plants_v.0041221C

而且可以发现,无论植物是否装填完毕,都会运行到该函数位置。

对该函数的参数与返回结果进行比较分析。

确定无论是否装填完毕,同一植物情况下参数与返回结果都相同。

所以装填状态判断还在后面,继续单步分析。

跳转后出现两个函数,

0041221C  |> \83FA 04       cmp edx,0x4                              ;  Switch (cases 1..F)
0041221F  |.  75 28         jnz short Plants_v.00412249
00412221  |.  8B4424 10     mov eax,dword ptr ss:[esp+0x10]          ;  Case 4 of switch 0041221C
00412225  |.  8B48 04       mov ecx,dword ptr ds:[eax+0x4]
00412228  |.  80B9 64010000>cmp byte ptr ds:[ecx+0x164],0x0
0041222F  |.  0F85 EB000000 jnz Plants_v.00412320
00412235  |.  50            push eax
00412236  |.  E8 55630700   call Plants_v.00488590                   ;  冷却判断函数
0041223B  |.  E8 E0C2FFFF   call Plants_v.0040E520
00412240  |.  5F            pop edi                                  ;  0019FD00
00412241  |.  5E            pop esi                                  ;  0019FD00
00412242  |.  5B            pop ebx                                  ;  0019FD00
00412243  |.  8BE5          mov esp,ebp
00412245  |.  5D            pop ebp                                  ;  0019FD00
00412246  |.  C2 0C00       retn 0xC

同样对齐进行参数比较后,发现 0x00488590 函数的参数与返回结果出现了变化。

以向日葵为对象(左为装填完毕,右为装填中)。

参数比较:

函数参数比较.png

返回结果比较:

函数返回结果比较.png

修改执行后的eax返回值,发现在装填状态下可以种植植物,确定该函数就是装填状态判断函数。

F7进入分析,确定关键跳转位置。

00488684  |.  807D 48 00    cmp byte ptr ss:[ebp+0x48],0x0           ;  冷却判断
00488688  |.  0F85 79010000 jnz Plants_v.00488807                    ;  成功跳转

猜测 [ebp+0x48] 指向的内存地址为装填状态标志,0x00为装填中,0x01为装填完毕。

在标志上下内存写入断点,运行游戏,确定标志设置指令。

设置为装填中。

00488E71  |> \33C0          xor eax,eax                              ;  Default case of switch 00488E3B
00488E73  |.  C645 48 00    mov byte ptr ss:[ebp+0x48],0x0           ;  修改装填标志为装填中
00488E77  |.  8945 24       mov [arg.8],eax
00488E7A  |.  8945 28       mov [arg.9],eax

设置为装填完毕。

00487298  |.  C747 24 00000>mov dword ptr ds:[edi+0x24],0x0
0048729F  |.  C647 49 00    mov byte ptr ds:[edi+0x49],0x0
004872A3  |.  C647 48 01    mov byte ptr ds:[edi+0x48],0x1           ;  设置装填标志为装填完毕
004872A7  |.  E8 E4FEFFFF   call Plants_v.00487190
004872AC  |>  8B47 3C       mov eax,dword ptr ds:[edi+0x3C]

分析完毕,只需要将设置为装填中的指令,修改为设置为装填完毕,即可实现植物无CD的目标。

效果如图:

实现效果.png

免费评分

参与人数 24吾爱币 +31 热心值 +21 收起 理由
cmhchu + 1 + 1 我很赞同!
b1ackie + 1 + 1 鼓励转贴优秀软件安全工具和文档!
sunny26155 + 1 + 1 热心回复!
b1ackie + 1 + 1 我很赞同!
coollee + 1 鼓励转贴优秀软件安全工具和文档!
a11023637 + 1 不错挺好
Hmily + 7 + 1 感谢发布原创作品,吾爱破解论坛因你更精彩!
Ganlv + 3 + 1 欢迎分析讨论交流,吾爱破解论坛有你更精彩!
YS123456 + 1 + 1 好厉害,可以分享给我吗
酷爱腾讯 + 1 + 1 我很赞同!
ddw9988 + 1 + 1 我很赞同! 热心回复!
baqifw + 1 + 1 谢谢@Thanks!
sayhi1984 + 1 + 1 我很赞同!
kun... + 1 + 1 我很赞同!
皮皮鲲 + 1 + 1 谢谢@Thanks!
liuyj209 + 1 我很赞同!
kxszj + 1 + 1 用心讨论,共获提升!
twl2018 + 1 用心讨论,共获提升!
guxuanming + 1 + 1 我很赞同!
尔乖吾爱 + 1 + 1 我很赞同!
wwwio + 1 + 1 欢迎分析讨论交流,吾爱破解论坛有你更精彩!
jwt123 + 1 + 1 有没有成品,打发下时间
smart622019 + 1 + 1 我很赞同!
smhbhsg + 1 + 1 谢谢@Thanks!

查看全部评分

发帖前要善用论坛搜索功能,那里可能会有你要找的答案或者已经有人发布过相同内容了,请勿重复发帖。

jimo 发表于 2019-2-17 12:12
我觉得楼主可以出视频教程,这样动态讲解断点,以及猜测的过程,比较清晰。 根据阳光改变下断点返回上一层 找到种植call,判断call,这种思路很厉害。
还不算晚 发表于 2019-2-16 23:50
mzhsohu 发表于 2019-2-17 00:07
成国大吉大利 发表于 2019-2-17 02:12
感谢大佬分享分析
支持大佬
b7155887 发表于 2019-2-17 04:45
感谢大佬分享分析过程!支持大佬!
andobear 发表于 2019-2-17 05:10
感谢大佬分享分析
chen4321 发表于 2019-2-17 06:26 来自手机
植物大战僵尸这游戏真是游戏修改好教程
h522240486 发表于 2019-2-17 08:57
牛啊这分析的牛啊这分析的
nestle2019 发表于 2019-2-17 09:14
感谢大佬详细的分析
2623666 发表于 2019-2-17 10:00
感觉是在虐待僵尸了
您需要登录后才可以回帖 登录 | 注册[Register]

本版积分规则

返回列表

RSS订阅|小黑屋|处罚记录|联系我们|吾爱破解 - LCG - LSG ( 京ICP备16042023号 | 京公网安备 11010502030087号 )

GMT+8, 2024-12-21 22:59

Powered by Discuz!

Copyright © 2001-2020, Tencent Cloud.

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