当前位置:   article > 正文

CE配合易语言制作属于自己的辅助(以植物大战僵尸杂交版为例)

CE配合易语言制作属于自己的辅助(以植物大战僵尸杂交版为例)


本篇分享下如何用CE配合易语言简单做出属于自己的辅助软件,仅供学习交流使用。

一、下载CE&选择性汉化(如已有,可跳过)

压缩包中也含有汉化文件

我用夸克网盘分享了「CE6.7.zip」,点击链接即可保存。打开「夸克APP」,无需下载在线播放视频,畅享原画5倍速,支持电视投屏。
链接:https://pan.quark.cn/s/b74384c616bb
提取码:yNDb
安装过程就省略了。

  • 如果需要汉化,可参考下列步骤之一(哪一种都可以),需要先将汉化包文件(ch_cn)放入相应路
    在这里插入图片描述

应用汉化方法一:程序选择汉化包

  • 打开程序后,选择Settings
    CE
  • 左边栏找到语言列,然后选择ch_cn,点击右边的select language,重启CE即可。
    汉化

应用汉化方法二:直接修改配置

  • 放入汉化包的文件夹,直接打开language.ini配置文件,将对应内容改为ch_cn
    在这里插入图片描述

二、寻找内存地址

游戏可去此版官方作者处下载:https://space.bilibili.com/97213827/dynamic

1.打开游戏与CE

  • 我们需要找到保存游戏数值的地址。
  • 打开植物大战僵尸,同步打开CE,点击左上角的搜索进程,选中植物大战僵尸,点击打开。
    在这里插入图片描述

2.找到阳光值的内存地址

  • 进入关卡,根据现在的阳光值,再CE进行搜索

  • CE这边,数值输入500,此值类型直接选择精确数值与4字节即可。

  • 点击新的扫描搜索,发现返回129个结果。
    在这里插入图片描述

  • 消费阳光值,再进行搜索。

  • 这里我放了一个火焰坚果,然后对现在的400阳光值进行搜索。

  • 发现这次只返回一个结果值了。那么这个应该就是我们要找的地址。
    在这里插入图片描述

  • 双击该地址或者点击蓝色方框都可以,让地址栏出现在下面。

  • 接着双击下面地址栏的数值(右键菜单找也可以),然后将数值修改为4000,保存

  • 接着发现,游戏里的阳光值已经变更了,那么就代表,我们地址找对了。如果需要锁定,地址栏左边的方框点一下即可,锁定阳光值为XXX。
    在这里插入图片描述

三、寻找基地址

  • 第二步已经找到了内存地址,但是内存地址,每次重启游戏,基本都会变化,都需要重新搜索。
  • 而且,如果朋友也想要修改,可能会有一定的解释成本(解释如何使用CE等等)。
  • 那么问题就来了,为什么这个内存地址会变更呢?我们为什么又要找到基地址。

基地址简述

  • 基地址+偏移地址(可能有多层)=内存地址
  • 可以先看下,一个示例
    • 基地址:PlantsVsZombies.exe+2A9EC0
  • 这个基地址中有一个exe程序,这个是每次会根据内存分配产生变化的。因此,当我们重启游戏时,发现原来找到的内存地址,已经成了?,代表这个内存地址已经不是存放该值的地址了。
  • 那么怎么找到基地址呢?

寻找基地址

一级偏移

  • 找到我们对应值的内存地址,右键选择找出是什么访问了这个地址,选择是
    在这里插入图片描述
  • 然后发现有两条结果,都是+5560,这就是我们要找的第一个偏移量
    在这里插入图片描述
  • 然后CE会根据偏移,猜测我们要找的偏移地址可能是316DC990
  • 然后我们在CE上,选中Hex,输入该值,点击新的扫描,发现返回很多结果。
    在这里插入图片描述

二级偏移

  • 这个时候,需要我们从这些地址中找到二级偏移。
  • 可以发现,部分地址有很多这种偏移值,这种一般都不是我们要找的
    在这里插入图片描述
  • 一般来说,这种某个地址,基本都是一个数值的,就是我们要找的二级偏移,如下即是正确的,即+768
    在这里插入图片描述
  • 然后我们搜索该地址值,08219E90
    在这里插入图片描述

基地址

  • 到目前为止,已经找到了两个偏移值,+5560和+768,很明显还不是基地址。那么我们还需要继续找。
  • 从上图可以看出,这次结果更多了,2000+条。在这里插入图片描述
  • 与之前不同的是,我们这次可以看到有绿色的值,这个就是基地址。
  • 那么其实我们就已经找到了修改阳光值的基地址,这四个都是可以的。
  • 我们可以复制这个地址名,加上偏移,看下结果值是不是我们游戏中的值。
  • 点击手动添加地址,勾选指针,最下面填写基地址,上面添加偏移值,有几级就加几层
  • 然后可以看到,计算出来的最终地址没和我们找出来的内存地址,是一样的。然后添加进去。
    在这里插入图片描述
  • 到这里,我们就可以试试,我们找的地址是否是正确的。
  • 关闭游戏,我们发现这里的值已经变成了?。
    在这里插入图片描述
  • 重新打开植物大战僵尸游戏,CE选中我们新打开的进程,选择保留地址
  • 可以看到,我们上个进程找到的阳光值内存地址,数值已经对不上了。
  • 然后我们添加的基地址+偏移值对应的游戏数值,是匹配的上的。
  • 到此为止,我们已经找到了阳光的基地址和偏移值。我们只需要保留这一项地址,就可以一直使用,无需再次搜索数值地址等。在这里插入图片描述

四、使用易语言制作软件

新建窗口

  • 这里使用易语言为例,左上角菜单栏,选择新建,新建一个windows窗口程序。
    在这里插入图片描述

窗口编写

  • 右边点击标签(字的那个)拖到程序里面,改一下标题,然后记住这里的名称
    在这里插入图片描述
  • 点击编辑框,拖到程序里面,第一个设置禁止真,第二个禁止假。
  • 这里禁止的意思是,禁止使用者修改框中的内容,由于我这里第一个代表的含义是现在的阳光,第二个是要修改的阳光数,因此这里我设置第一个禁止真,第二个禁止假。
    在这里插入图片描述
  • 然后新增一个选择框和两个时钟
  • 时钟相当于一个定时任务,可以设置时间间隔,会按照设置的时间间隔,定时执行你写入的逻辑在这里插入图片描述
  • 增加模块引用,其实就是把一些别人封装好的东西加进来,这样可以直接使用。
    在这里插入图片描述
  • 双击窗口,进入编写代码环节,会看到出现一个起启动窗口创建完毕的子程序名。这个程序里面写的,就是你打开该软件时,会自动执行的一些逻辑。
    在这里插入图片描述
    在这里插入图片描述

功能实现

  • 在窗口程序集名下面增加三个变量
    • 进程ID:来锁定我们的植物大战僵尸进程
    • 阳光基址:用来存放阳光的内存地址
    • 模块基址:存放基地址
  • 然后在软件打开后,也就是启动窗口创建完后,我这里首先加载了一个皮肤模块(上部引用的33个皮肤模块),会让软件好看一些。
  • 时钟1.时钟周期这个我默认赋值了1,也就是1毫秒,执行一次
  • 然后是通过进程名,取到进程ID,如果进程ID为0,也就是没获取到,说明我们计算机没有打开游戏。
  • 接着用了一个模块中的方法,取程序的模块基址。这里对应到我们搜到的基地址。
    在这里插入图片描述

进程ID

  • 进程ID,任务管理器也可以看到
  • 这里可以加一个调试输出看下我们取到的值,可以看到和任务管理器中的pid是一致的。
    在这里插入图片描述
    在这里插入图片描述

模块基址

  • 即我们需要先将进程转化后,再与十六进制运算。
    在这里插入图片描述
    在这里插入图片描述

阳光读取

  • 操作完上面这些,我们就已经取到了基址。然后再根据偏移,计算出阳光值对应的内存地址即可
  • 之前我们已经设置了一个读取框和一个时钟在这里插入图片描述
  • 同时再软件启动时,我们也设置了,时钟1的时钟周期为1,即软件一启动,就一直1毫秒获取一次当前阳光值
    在这里插入图片描述
  • 然后我们双击窗口放置的时钟,就会出现一个时钟1的周期事件。即代表,这个定时任务,需要执行的动作。再结合我们设置的时钟周期为1毫秒,因此,软件一启动,这个任务每过1毫秒,就会执行一次下面的事件。
    在这里插入图片描述
  • 我们在对下面事件进行拆解。
    • 之前我们有提到过,我们拿到了两个偏移值。
    • 大致是这么一个公式:基址(PlantsVsZombies.exe+2A9EC0)+十六进制偏移(+768)+十六进制偏移(+5560)=程序当前存放该值的内存地址(3869C980),该内存地址的值为606,即我们现在的阳光值。
      在这里插入图片描述
  • 因此,时钟周期事件我们需要按顺序进行相加,拿到内存地址。
  • 模块基址之前我们已经算出来了,接下来只需要加两层偏移即可。
    在这里插入图片描述
  • 因此,这里需要用读内存整数型,即从内存中读取相加后的地址。
  • 读取两层后,这个阳光基址,就是我们现在游戏程序中,保存阳光值的内存地址。
  • 我们把获取到的值,做一个判断。因为没有开局前,是没有阳光值的,或者说是小于0的。因此,如果小于0,说明没有进入对局。反之,我们就已进入了对局,只需要将编辑框1的内容,改写为获取到的阳光值即可。这里我设置了编辑框1的内容,禁止用户改变。
    在这里插入图片描述
  • 接下来可以看下效果。点击上面的类似播放的按钮,即可就进入程序调试。可以看到,这就是我们写出来的程序,目前已经获取到了阳光值,和游戏里是一致的。在这里插入图片描述

修改阳光

  • 接下来,我们对阳光值进行修改。
    • 双击时钟2,进入对应的逻辑编写。在这里插入图片描述
      在这里插入图片描述
  • 可以看到我这里已经写好了。
    • 先加一层偏移,获取到第一层偏移的地址。
    • 接着我们可以直接用写,在修改的方法里面,一边读取,一边改写内存中读取出来地址的值。
    • 最后面有个到整数,括号里面写的编辑框2的内容,这里就是指的用户可以填写的编辑框,里面的值默认是字符串类型,因此我们需要用一个到整数方法,将其转为整数。然后写入内存地址中。
  • 接着还差最后一步,触发修改。
    在这里插入图片描述
  • 一开始我们设置了一个选择框,这里标题我改为了修改阳光。可以看到名称是选择框1。接着我们双击选择框,进入对应的逻辑编写。
    在这里插入图片描述
  • 这里会多出一个选择框1被单击的事件。
    • 这里我加了一个判断,如果被选中了,就将修改阳光对应的事件,每1毫秒执行一次,这样其实就是锁定了这个值。
    • 如果再选中的情况,再点击,就会取消选中。这时候,时钟2(修光阳光的方法)的时钟周期就会设置为0,即代表不执行。
  • 到这里,其实大体功能已经实现了。我们可以点击播放按钮,测试一下。
    在这里插入图片描述
  • 可以看到这里的值我输入了5000,选中按钮后,游戏里面的阳光,也相应被修改了。如果不取消选中,就相当于锁定,怎么花,阳光都是5000。取消选中后,就会从5000相应减少。

程序编译

  • 到此为止,已完成了基本程序的撰写。那么我们就需要将程序编译出来,这样可以分享给朋友娱乐使用。不仅仅是自己
  • 需要注意的是,调试阶段,是没办法直接变更代码或者编译的,需要先退出程序,退出调试阶段
    在这里插入图片描述
  • 接着点击上方的编译按钮,选中静态编译,选择生成路径。
    在这里插入图片描述
  • 然后我们编译成功了,可以看桌面已经有相应程序了。
    在这里插入图片描述
    在这里插入图片描述
  • 可以惊喜的看到,已经可以使用了。也可以发给朋友,让他们娱乐了!
    在这里插入图片描述

五、其他功能实现

这里以一个常用的无CD为例

放置无CD

  • 可以看到,卡牌是一个时间相关的。应该会有一个类似的数值,一直在增加或者减少。因为不太清楚,这里我们选未知初始值,类型所有类型,进行搜索。

内存地址寻找

在这里插入图片描述

  • 可以看到,结果很多,所以没有显示出来。接着我们要开始筛选,找到我们需要的地址。
  • 这里以第四个火焰坚果为例。我放置它让他进入冷却状态。在这里插入图片描述
  • 然后再CE,选择变动的数值,进行搜索。
  • 可以看到,一次搜索后,结果少了很多。
    在这里插入图片描述
  • 取消暂停,进入游戏,让坚果冷却再次变化。冷却
  • 变化后,我们再次点击一次搜索。
    在这里插入图片描述
  • 可以看到结果又少了,然后我们随便玩几下游戏。顺带等坚果冷却变好。
    在这里插入图片描述
  • 可以看到,现在冷却好了,我们在CE再次点击再次搜索,还是变动的数值(从冷却中-冷却完毕)
    在这里插入图片描述
  • 结果变化不显著,我们改变扫描类型,改为未变动的数值,再次搜索。(这里是坚果冷却-冷却完毕,这个时候发生了数值变化,因此上一部选的变动的数值,搜索完后,我们并没有操作游戏,因此数值,是不会变化的,所以我们切换为未变动的数值,再次缩小范围)
  • 可以看到范围又小了很多。
    在这里插入图片描述
  • 这时候我们随便放其他卡牌玩一下。(不要动坚果)
    在这里插入图片描述
  • 接着打开CE,再次搜索未变动的数值,可以看到范围只剩下一万了
    在这里插入图片描述
  • 我们再放一个火焰坚果,进入冷却后,然后CE选择变动的数值再次缩小。
    在这里插入图片描述
  • 接着我们继续这样几次操作(放坚果,冷却减小的时候,CE搜索变动的数值),需要注意,一定是冷却减少了,才能搜索变动数值一次,不能多搜索。
    在这里插入图片描述
  • 最后筛出来四个,怎么也去不掉,这下,我们可以看这几个值的变化。
    在这里插入图片描述
    在这里插入图片描述
    在这里插入图片描述
  • 可以看到,第二个地址的值,一直在增长,增长到一定程度后,冷却完毕,变为了0
  • 我们可以把这个值拉下来。(这里我没看游戏,脑子被吃掉了,所以重开了一局,地址变化了,重取了一次)
  • 可以看到目前是冷却中,我们可以直接把这个值改为3000
    在这里插入图片描述
    在这里插入图片描述
    在这里插入图片描述
  • 改为3000后,我们发现火焰坚果已经可以放置了,说明就是这个地址。
  • 我们可以进入相关内存区域看一下
    在这里插入图片描述
  • 我们点击火焰坚果,使他的放置状态发生变化。
  • 这个时候发现,这块区域有一个地址,当你点击火焰坚果的时候,他会变为00,放开左键,放置状态为可放置时,会变为01在这里插入图片描述
    在这里插入图片描述
  • 我们右键,将该地址添加到列表中,发现该地址是一个字节型
    在这里插入图片描述
  • 然后,我们将该地址的值改为1时,就会刷新冷却时间
    在这里插入图片描述
    在这里插入图片描述
  • 到此为止,我们只要锁定这个值的地址,就可以实现该列植物无冷却。

基址寻找

  • 找出01和00这个地址,是什么访问了该地址,然后该植物放置或者取消放置,可以看到会又一个地址,后面有01,代表将其改为01,也就是可放置状态。这里也就是我们的第一个偏移值,+70.
    在这里插入图片描述
  • 第一个偏移值为+70,那么继续找第二个偏移值,这里需要改为4字节搜索,可以找到第二个偏移值为+144
    0
  • 再将+偏移144的地址代入搜索框中,新的查询进行查找,发现了很多结果,这里我们可以挨个点击看,发现一条全是+768的,就是这个了。
    在这里插入图片描述
  • 我们再讲偏移值+768的地址代入搜索,发现找到了基地址(发现和阳光的是一样的)
    在这里插入图片描述
  • 到此为止,我们就找到了,这个火焰坚果,也就是第四列的计算方式
  • 即模块基址+768+144+70=第四列CD内存地址。
    在这里插入图片描述

其他列基址查找

  • 我们还是浏览火焰坚果相关的内存区域,可以通过点击旁边列的放置/取消放置状态,直接找到相对应的内存地址。
    在这里插入图片描述
    在这里插入图片描述

  • 然后我们找第五列、第六列的基址,发现偏移值是一样的。

  • 说明第四列+某个值=第五列

  • 第五列可能加某个值=第六列
    在这里插入图片描述

  • 下面是4 5 6三列的内存地址,可以发现,他们是有规律的。
    在这里插入图片描述

  • 我们将其转为十进制加减后,发现第五列+50(这里显示十六进制,80为十进制的值)=第六列。
    在这里插入图片描述

  • 同时第四列+50=第五列的值。

  • 这样我们算出了规律,写入地址时,只需要加减十六进制50即可实现从第四张牌扩展到所有卡牌。在这里插入图片描述

  • 这里我们用模块基址(PlantsVsZombies.exe+2A9EC0)+768(十六进制)+144(十六进制)+70(十六进制)+相差位置数(十六进制)即可得到所有卡牌位置的CD内存地址。

  • 我上面这里的70转换成了十进制,即112,加十进制对应的80(十六进制为50)即为当前列卡牌后面那一列的内存地址。

  • 然后有多少列,我们就加多少列,然后写入值为1,即可以放置。

  • 可以附加时钟周期,1毫秒写入一次,这样就可以实现所有卡牌无CD。

按键实现功能

这个我就不做太多讲解了~直接贴代码

  • 启动窗口创建完毕后,调用窗口监视热键注册。
    在这里插入图片描述
  • 写相应程序事件,这里我用F1对应选择框1的选中与取消,F2对应选择框2
    在这里插入图片描述
  • 最后点击启动窗口,进入启动窗口属性,下拉选择将被销毁。
    在这里插入图片描述
  • 这里将窗口监视按键卸载即可。
    在这里插入图片描述

程序图标

  • 左上角菜单栏,程序,选中配置在这里插入图片描述
  • 这里设置一些作者信息,以及软件图标
    在这里插入图片描述

成品

最后附上我的exe程序~
我用夸克网盘分享了「植物大战僵尸杂交版修改器v2.0.88.zip」,点击链接即可保存。打开「夸克APP」,无需下载在线播放视频,畅享原画5倍速,支持电视投屏。
链接:https://pan.quark.cn/s/4e96ef549338
提取码:RLmw
在这里插入图片描述

使用的模块

我用夸克网盘分享了「模块.zip」,点击链接即可保存。打开「夸克APP」,无需下载在线播放视频,畅享原画5倍速,支持电视投屏。
链接:https://pan.quark.cn/s/968ac7e1ddad
提取码:WArg

此贴仅供学习交流使用,请勿用于非法行为。

声明:本文内容由网友自发贡献,转载请注明出处:【wpsshop】
推荐阅读
相关标签
  

闽ICP备14008679号