2D游戏辅助 - 植物大战僵尸
2.绘制僵尸方框
我们要做的工作就是这些
获取僵尸位置
僵尸出现 , 我们搜索未知的浮点数
僵尸移动 , 搜索变动的数值
僵尸没移动 , 搜索未变动的数值 , 发现搜索完了之后 , 还是有好多数值 , 我们换条思路缩小范围
设置CE搜索的起始地址 为阳光的的地址 因为运气好, 所以我没有将地址改在 11FF3AC8之前 , 应该要分段搜索(阳光值和僵尸坐标值地址在同一个段) 其实僵尸的int类型也有一个x坐标 , 和这个float类型的一样 , 但是int类型的坐标是读取float类型的地址 . 修改它,无效
X坐标有了 , Y坐标呢? 对僵尸X坐标栏, Ctrl+B打开内存窗口 , 设置显示类型 , 可以看到僵尸X坐标地址+4 , 有个250 , 修改一下他
修改成功 , 但是僵尸会被拉回原Y坐标 , 我想僵尸还存有一个 对应列表的数值
将数据类型改成4字节10进制显示 , 发现120(X) 1(Y) , 2 , 修改一下他,改成5
僵尸就跑到了草坪外面了 , 哈哈 , 看来X,Y坐标附近 , 就是僵尸的结构体 , 大家自行研究 float类型 , 不同版本的CE可能识别的不一样 , 我的是CE 7.0 , 如果单浮点数勾选了简单值,那么将更快找到....
我们使用截图工具看一下僵尸对于,植物大战僵尸窗口的坐标(这一步无法截图)发现僵尸的坐标大概是 Window_x + 20+ 僵尸x 就是DrawWindow_x , Window_y+标题栏的y 就是僵尸y
获取僵尸的数量
获取僵尸数量 , 分析结构可能更方便 , 这里不写(我也不会),思路是跟踪回调
出现一只僵尸 , 就搜索int 1 ,两只就2,如此往复....
HOOK存放僵尸位置的地址
CE对僵尸坐标栏 , F5 , 查询谁访问了他
0052D9E1 - D9 41 2C - fld dword ptr [ecx+2C] , 转到0052D9E1地址
找出这条指令访问了谁
出现第二只僵尸 , 出现了新的地址 , 这个地址就是第二只僵尸X坐标 , 我们要做的就是HOOK 0052D9E1这个地址 , 读取地址ecx+0x2c存放的值 , 开始写代码
读取僵尸坐标 , EasyHOOK是我瞎写的一个跨进程HOOK库 , 没有进程通信的功能,故读取僵尸的地址变动快的话, 我的坐标跟不上 , 关于HOOK , 确保程序正确执行就行
读取僵尸的坐标
绘制僵尸方框
绘制库我用的是EasyX , 创建窗口及相关设置的代码 ,EasyX下载地址 easyx.cn,很方便,同时也很简陋.... 对于我来说够用了
绘制僵尸方框代码
效果图: 因为画布没有清除 , 所以出现一堆我是僵尸 , 但是网上说的 易语言Imgui, 闪烁 , 绘制不上的问题没有出现
不爽的话 , 在绘制僵尸的代码后 ,添加清除函数
效果图: 这样的代码仍需优化(如僵尸死后,依旧绘制 , 大家可以判断X是否变化 , 也可以换个地址进行HOOK(谁改写了他)我们的代码是谁访问了他) 同时 , EasyX创建的窗口,画布大小也需改变.......
源码链接
提取码:0000