前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >如何用20行代码实现植物大战僵尸秒杀僵尸的功能

如何用20行代码实现植物大战僵尸秒杀僵尸的功能

作者头像
xujjj
发布2020-05-18 14:45:02
6380
发布2020-05-18 14:45:02
举报
文章被收录于专栏:IT界的泥石流IT界的泥石流

前言:

外挂的本质其实就是找到进程中的某个变量或者某行代码的内存地址,然后进行修改,完成其想要完成的功能。这是最基本的要求,当然如果想要深入去学习制作外挂的话,还有很多东西很多内容,首先,你要懂得汇编,其次如果是制作Windows平台上的外挂的话,要深入了解PE文件格式,Windows内核等相关知识,再次如果应用程序中的代码或者变量是加密的话,或者是加壳的话,你要深入学习解密和脱壳方面的知识,最后应用程序如果是加了检测的话,还要懂得如何过检测。今天,我们通过实现在植物大战僵尸中秒杀僵尸的这样一个小小的例子,去学习一下如何找到某内存地址然后修改该内存地址中的内容,完成秒杀僵尸的功能。

思路:

我们先要盲猜一下植物大战僵尸游戏设计者的思路:植物打一下僵尸,僵尸是会减少血量的,当血量减少到0的时候,僵尸就挂掉。

因此,关键找到植物打一下僵尸然后所执行的扣除血量的指令,我们可以先找到某一只僵尸的血量值所在的内存地址,然后让植物打一下僵尸,接着看一下是进程中哪一条指令修改了这个内存地址,而这一行指令很有可能是植物打一下僵尸,然后执行的扣掉僵尸血量的指令。

1.找到某个僵尸血量值的内存地址

打开CE工具,附加一下植物大战僵尸的进程,然后等某一只僵尸出现时,使用CE工具首次扫描一下,扫描类型选择未知的初始数值。

然后种下一棵植物,让这个植物打僵尸,打一次,我们就在原先的扫描基础上,把扫描类型换成减少的数值,然后点击再次扫描。一直打一直扫,扫到差不多,看一下比较像血量值的。

发现这个数值有点像,上次的数值是植物还没打到的数值,为130,然后植物打了一下,这个数值变成110了,扣了20点血量,因此,我们尝试着把这个值当成这个僵尸的血量值,其内存地址为0x29C10840

2.找到扣僵尸血量的指令

我们再让植物打一下僵尸,然后查看一下修改该内存地址(0x29C10840)的指令代码,我们找到了,是这一条指令修改了该内存地址的值,很明显,edi+000000C8是该只僵尸的血量内存地址值,ebp是即将需要赋的值。

我们再看仔细一点,发现ebp首先会减掉一个值(内存地址为0x0054D0BA的指令sub ebp,esp+20),然后再把相减的结果赋值给僵尸血量(mov edi+000000C8,ebp),那我们是不是可以在相减的这一行代码做一下手脚呢?当然可以,直接让其相减的结果为0,就能做到直接秒杀僵尸了。怎么让其相减结果为0呢,只需要改成sub,ebp,ebp即可。

我们直接改一下,之前这一条sub指令是四个字节的,但是更改为sub ebp,ebp之后,只占两个字节,为了不影响后续的指令,再加上两个空指令nop填充。

最后神奇地发现,僵尸只要被打了一炮就死了,至此,我们从CE工具的角度完成了该功能的调试,紧接着我们做一个小程序实现这个功能,这个程序的要完成的任务很简单,就是直接修改内存地址为0x0054D0BA的指令修改为sub ebp,ebp, 然后再用两个nop填充即可,如上图,即把0x29,0xED,0X90,0X90这四个字节填充到0x0054D0BA处。

实现代码:

本文参与 腾讯云自媒体分享计划,分享自微信公众号。
原始发表:2020-05-05,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 IT界的泥石流 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体分享计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
相关产品与服务
云开发 CloudBase
云开发(Tencent CloudBase,TCB)是腾讯云提供的云原生一体化开发环境和工具平台,为200万+企业和开发者提供高可用、自动弹性扩缩的后端云服务,可用于云端一体化开发多种端应用(小程序、公众号、Web 应用等),避免了应用开发过程中繁琐的服务器搭建及运维,开发者可以专注于业务逻辑的实现,开发门槛更低,效率更高。
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档