这段时间,大家都不给出门,在家闷得话,就把之前的老游戏《植物大战僵尸》来回来玩,发现老版本在win10下已经不能跑起来了。百度了很久找到了都是假的。
最后还是找到了。“植物大战僵尸百科” (pvzbaike.com),大家可以在上面下载到所有的历史植物大战僵尸相关下载,无毒,无广告,真心推荐。
但是作为一个屌丝程序,怎么可能乖乖一步步玩游戏了,分析了它运行的内存结构,简单写了个无限的挂,这里把内存结构共享下,有需要的自己分析,可以很简单的写出挂。
┌6A9EC0\\基址
├┬64\\文本指针(+28下一个)
│└─28\\文件路径
├─D4\\[浮点]音量(-1)
├─DC\\[浮点]音效(-1)
├┬320\\鼠标和窗口
│└┬─28\\不断自增的值
│ ├─84\\[逻辑值]游戏窗口获得焦点则为true
│ ├─88\\当前游戏的顶层窗口
│ ├─8C\\当前鼠标按住的窗口
│ ├─90\\当前鼠标所在的窗口
│ ├┬94\\游戏内的顶层窗口
│ │├─28\\存在时间
│ │├─30\\横坐标
│ │├─34\\纵坐标
│ │├─38\\横向长度
│ │├─38\\纵向高度
│ │├─54\\[逻辑值]true则显示
│ │├┬60\\颜色
│ ││├─0\\[扩展色彩数组]标题颜色
│ ││└─10\\[扩展色彩数组]内容颜色
│ │├─A4\\[中文版GB2312编码/英文版ASCII码]标题文字
│ │├─B4\\标题文字长度
│ │├─B8\\标题文字长度上限
│ │├┬DC\\文本指针
│ ││└─0\\[中文版GB2312编码/英文版ASCII码]内容文字编码
│ │├─EC\\内容文字长度
│ │└─F0\\内容文字长度上限
│ ├─DC\\[逻辑值]鼠标在画面内则为true(暂停依然记录)
│ ├─E0\\鼠标横坐标(暂停依然记录)
│ ├─E4\\鼠标纵坐标(暂停依然记录)
│ ├─E8\\鼠标按住(暂停依然记录,1为左键,2为右键,3为左右键,4为中键,5为左中键,6为右中键,7为左中右键)
│ ├─EC\\同[E8]
│ └─F0\\鼠标运动时值被改写为[28]的值
├┬768\\当前游戏信息和对象
│├┬─28\\关卡计时
││├─30\\画面横坐标(向左递增,正常游戏时为0)
││├─34\\画面纵坐标(向下递增,正常游戏时为0)
││├─38\\可点击的横坐标范围
││├─3C\\可点击的纵坐标范围
││├─54\\[逻辑值]true则显示画面
││├─58\\[逻辑值]鼠标按下则为true(暂停时为0并不再记录)
││├─59\\[逻辑值]鼠标在画面内则为true(暂停时为0并不再记录)
││├─8C\\[指针]=基址
││└┬90\\僵尸对象序列,+15C下一个
││ ├─0\\[指针]=基址
││ ├─4\\[指针]=当前游戏信息和对象
││ ├─8\\图像的横坐标
││ ├─C\\图像的纵坐标
││ ├─18\\[逻辑值]为false时隐形
││ ├─1C\\所在行数
││ ├─20\\图像图层
││ ├─24\\僵尸类型
││ ├─28\\僵尸状态
││ ├─2C\\[浮点]横坐标
││ ├─30\\[浮点]纵坐标
││ ├─34\\[浮点][2C]变化量(前进的舞王和减速的冰车等的前进速度)
││ ├─38\\不断增大直到大于[40]*[44]的值变回0
││ ├─3C\\僵尸喊brians的倒计时初始值范围[500,1500)
││ ├─51\\[逻辑值]啃食时为true
││ ├─54\\僵尸闪光倒计时
││ ├─60\\僵尸已存在时间
││ ├─64\\僵尸运动状态
││ ├─68\\属性倒计时
││ ├─6C\\站立状态,为-2/-3时静止,-4时向上(对于选卡界面的僵尸)
││ ├─70\\0时雪人不掉钻石
││ ├─74\\僵尸消失倒计时
││ ├─84\\[浮点][30]变化量(跳跳的弹跳过程)
││ ├─8C\\中弹判定的横坐标
││ ├─90\\中弹判定的纵坐标
││ ├─94\\中弹判定的横向宽度
││ ├─98\\中弹判定的纵向高度
││ ├─9C\\攻击判定的横坐标
││ ├─A0\\攻击判定的纵坐标
││ ├─A4\\攻击判定的横向宽度
││ ├─A8\\攻击判定的纵向高度
││ ├─AC\\减速倒计时
││ ├─B0\\黄油固定倒计时
││ ├─B4\\冻结倒计时
││ ├─B8\\[逻辑值]被魅惑则为true
││ ├─B9\\[逻辑值]被吹走则为true
││ ├─BA\\[逻辑值]濒死状态则为true
││ ├─BB\\[逻辑值]没断手则为true
││ ├─BC\\[逻辑值]存在手持物,雪人向左走则为true
││ ├─BD\\[逻辑值]在水中则为true
││ ├─BE\\[1字节]上梯子时的影子跟随
││ ├─BF\\[逻辑值]吃到大蒜则为true
││ ├─C4\\1类饰品(0没有1路障2铁桶3橄榄球4矿工帽7雪橇车8坚果9高坚果)
││ ├─C8\\当前本体血量
││ ├─CC\\本体上限
││ ├─D0\\1类饰品当前血量
││ ├─D4\\1类饰品血量上限
││ ├─D8\\2类饰品
││ ├─DC\\2类饰品当前血量
││ ├─E0\\2类饰品血量上限
││ ├─EC\\[逻辑值]消失则为true
││ ├─114\\僵王放僵尸倒计时
││ ├─118\\[2字节]僵尸处在运动物体中的编号
││ ├─11C\\大小
││ ├─124\\僵王运动速度
││ ├─12C\\僵王是否砸车
││ ├─130\\僵王放僵尸的行数
││ ├─134\\僵王放招数倒计时
││ ├─138\\僵王跺脚倒计时
││ ├─13C\\僵王伸头倒计时
││ ├─140\\改变数值可以让冰\火球消失
││ ├─148\\冰\火球的行数
││ ├─14C\\球的类型,冰球则为0
││ └─15A\\[2字节]僵尸是否存在
│├┬─94\\最多时僵尸数
││├─98\\僵尸数上限
││├─9C\\下一个僵尸的编号
││├─A0\\当前僵尸数
││├─A4\\每多一个僵尸就+1直到65536
││└┬A8\\文本指针
││ └─0\\zombies
│├─┬AC\\植物属性(+14C下一个)
││ ├─0\\[指针]=基址
││ ├─4\\[指针]=当前游戏信息和对象
││ ├─8\\植物横坐标
││ ├─C\\植物纵坐标
││ ├─18\\[逻辑值]为true时可见
││ ├─1C\\所在行数
││ ├─20\\图像图层
││ ├─24\\植物类型
││ ├─28\\所在列数
││ ├─3C\\植物状态
││ ├─40\\当前血量
││ ├─44\\血值上限
││ ├─48\\为1则可以攻击
││ ├─4C\\三叶草消失倒计时
││ ├─50\\灰烬冰核三叶草生效倒计时
││ ├─54\\属性倒计时
││ ├─58\\发射子弹\生产物品倒计时
││ ├─5C\\发射子弹\生产物品时间间隔
││ ├─90\\子弹发射倒计时
││ ├─94\\[2字节]植物的一部分处在运动物体中的编号
││ ├─98\\植物的另一部分处在运动物体中的编号
││ ├─A4\\和眼镜大小有关系?
││ ├─B0\\眨眼倒计时
││ ├─B4\\不断自减的值
││ ├─B8\\发光倒计时
││ ├─BC\\闪光倒计时
││ ├─C0\\[浮点]图像向右偏移坐标
││ ├─C4\\[浮点]图像向下偏移坐标
││ ├─C8~12C\\0
││ ├─130\\蘑菇倒计时
││ ├─134\\1为隐形可以被咬,2不可以
││ ├─13C\\方向-1为右,1为左
││ ├─140\\[1字节]0和1之间变换
││ ├─141\\[逻辑值]true则植物消失
││ ├─142\\[逻辑值]true则植物压扁
││ ├─143\\[逻辑值]true则植物睡着
││ ├─144\\[逻辑值]true则植物能发亮
││ ├─145\\[逻辑值]true则植物发亮
││ └─14A\\[2字节]植物是否存在
│├┬─B0\\最多时植物数
││├─B4\\植物数上限
││├─B8\\下一个植物的编号
││├─BC\\当前植物数
││├─C0\\每多一个植物就+1直到65536
││└┬C4\\文本指针
││ └─0\\plants
│├─┬C8\\子弹属性(+94下一个)
││ ├─0\\[指针]=基址
││ ├─4\\[指针]=当前游戏信息和对象
││ ├─8\\图像X坐标=取整[30]
││ ├─C\\图像Y坐标=取整([34]+[38])
││ ├─18\\[逻辑值]true时显示子弹
││ ├─1C\\所在行数
││ ├─20\\图像图层
││ ├─24\\子弹所在区域的纵向偏移
││ ├─30\\[浮点]影子X坐标
││ ├─34\\[浮点]图像Y坐标
││ ├─38\\[浮点][34],[4C]变化量
││ ├─3C\\[浮点][30]变化量
││ ├─40\\[浮点][34],[4C]变化量
││ ├─44\\[浮点][38]变化量
││ ├─48\\[浮点][44]变化量
││ ├─4C\\[浮点]影子Y坐标
││ ├─50\\[逻辑值]子弹消失则为true
││ ├─58\\运动方式
││ ├─5C\\子弹类型
││ ├─60\\存在计时
││ ├─64\\自减倒计时
││ ├─68\\子弹旋转角度
││ ├─6C\\子弹旋转速度
││ ├─70\\[逻辑值]true时影子下移
││ ├─74\\子弹击中目标的条件?
││ └─92\\[2字节]子弹是否存在
│├┬─CC\\最多时子弹数
││├─D0\\子弹数上限
││├─D4\\下一个子弹的编号
││├─D8\\当前子弹数
││├─DC\\每多一个子弹就+1直到65536
││└┬E0\\文本指针
││ └─0\\projectile
│├─┬E4\\物品属性(+D8下一个)
││ ├─0\\[指针]=基址
││ ├─4\\[指针]=当前游戏信息和对象
││ ├─8\\图像X坐标变化量
││ ├─C\\图像Y坐标变化量
││ ├─10\\判定宽度
││ ├─14\\判定高度
││ ├─18\\[逻辑值]true则物品隐形
││ ├─20\\图层
││ ├─24\\[浮点]X坐标
││ ├─28\\[浮点]Y坐标
││ ├─2C\\[浮点]X坐标变化量
││ ├─30\\[浮点]Y坐标变化量
││ ├─34\\[浮点]大小
││ ├─38\\[逻辑值]true则物品消失
││ ├─3C\\[逻辑值]true则物品消失
││ ├─40\\收集后变为[24]
││ ├─44\\收集后变为[28]
││ ├─48\\物品要移动到的Y坐标
││ ├─4C\\物品已存在时间
││ ├─50\\[逻辑值]true则被收集
││ ├─54\\消失计时
││ ├─58\\物品类型
││ ├─5C\\物品运动状态
││ ├─68\\植物卡牌类型
││ ├─C8\\[逻辑值]true则有光环
││ ├─C9\\[逻辑值][C8]光环
││ └─D2\\[2字节]物品是否存在
│├┬─E8\\最多时物品数
││├─EC\\物品数上限
││├─F0\\下一个物品编号
││├─F4\\当前物品数
││├─F8\\每多一个物品就+1直到65536
││└┬FC\\文本指针
││ └─0\\coins
│├─┬100\\小推车属性(+48下一个)
││ ├─0\\[指针]=基址
││ ├─4\\[指针]=当前游戏信息和对象
││ ├─8\\[浮点]X坐标
││ ├─C\\[浮点]X坐标
││ ├─10\\图层
││ ├─14\\所在行数
││ ├─2C\\状态
││ ├─30\\[逻辑值]消失则为true
││ ├─31\\[逻辑值]false时隐形
││ ├─34\\小推车类型
││ ├─38\\[浮点]Y坐标偏移
││ ├─3C\\影子变化
││ └─46\\[2字节]小推车是否存在
│├┬─104\\最多时小推车数
││├─108\\小推车数上限
││├─10C\\下一个小推车编号
││├─110\\当前小推车数
││├─114\\每多一个小推车就+1直到65536
││└┬118\\文本指针
││ └─0\\lawnmowers
│├─┬11C\\场地物品属性(+EC下一个)
││ ├─0\\[指针]=基址
││ ├─4\\[指针]=当前游戏信息和对象
││ ├─8\\类型
││ ├─C\\罐子类型(3,4,5)
││ ├─10\\所在列数
││ ├─14\\所在行数
││ ├─18\\墓碑冒出的量,弹坑消失倒计时,脑子血量,钉钯消失倒计时
││ ├─1C\\图层
││ ├─20\\[逻辑值]true则消失
││ ├─24\\[浮点]蜗牛X坐标
││ ├─28\\[浮点]蜗牛/脑子Y坐标
││ ├─2C\\[浮点]蜗牛到的X坐标
││ ├─30\\[浮点]蜗牛到的Y坐标
││ ├─3C\\罐子存着僵尸的序号
││ ├─40\\罐子存着植物卡牌的序号
││ ├─44\\罐子内容类型(0,1,2,3)
││ ├─48\\[逻辑值]发亮则为true
││ ├─4C\\罐子透视倒计时,iz脑子亮度
││ └─EA\\[2字节]场地物品是否存在
│├┬─120\\最多时场地物品
││├─128\\下一个场地物品编号
││├─12C\\当前场地物品数
││├─130\\每多一个场地物品就+1直到65536
││└┬134\\文本指针
││ └─0\\griditems
│├─┬138\\鼠标相关属性
││ ├─0\\[指针]=基址
││ ├─4\\[指针]=当前游戏信息和对象
││ ├─8\\X坐标
││ ├─C\\Y坐标
││ ├─10\\80
││ ├─14\\80
││ ├─18\\[逻辑值]鼠标在游戏界面内则为true
││ ├─24\\鼠标上的植物在卡槽的位置
││ ├─28\\鼠标上的卡牌序号
││ ├─2C\\模仿者卡牌序号
││ └─30\\手持的物品
│├──13C\\[[指针]]=基址
│├─┬140\\文字属性
││ ├─0\\[指针]=基址
││ ├─4~84\\[中文版GB2312编码/英文版ASCII码]内容文字编码
││ ├─88\\消失倒计时
││ └─8C\\文字样式
│├─┬144\\卡槽属性
││ ├─0\\[指针]=基址
││ ├─4\\[指针]=当前游戏信息和对象
││ ├─8\\X坐标
││ ├─C\\Y坐标
││ ├─10\\横向判定
││ ├─18\\[逻辑值]false则卡槽隐形
││ ├─24\\格数
││ ├以下为卡牌属性+50下一格
││ ├─4\\[指针]=基址
││ ├─8\\[指针]=当前游戏信息和对象
││ ├─C\\卡牌X坐标
││ ├─10\\卡牌Y坐标
││ ├─14\\卡牌判定宽度
││ ├─18\\卡牌判定高度
││ ├─1C\\[逻辑值]false则卡牌隐形
││ ├─28\\已冷却时间
││ ├─2C\\总冷却时间
││ ├─30\\卡牌序号
││ ├─34\\传送带中卡牌位置
││ ├─38\\卡槽内容
││ ├─3C\\模仿者内容
││ ├─40\\老虎*停止倒计时
││ ├─44\\老虎*转出的内容
││ ├─48\\[浮点]老虎*转动的位置
││ ├─4C\\[逻辑值]false则不可用
││ ├─4D\\[逻辑值]true则在选中时发亮
││ └─50\\卡槽被使用次数
│├─┬148\\Menu按钮属性
││ ├─0\\[指针]=基址
││ ├─8\\X坐标
││ ├─C\\Y坐标
││ ├─10\\按钮宽度
││ ├─14\\文字纵向偏移
││ ├─18\\[逻辑值]鼠标在按钮上则为true
││ ├─19\\[逻辑值]鼠标按住钮上则为true
││ └─84\\[中文版GB2312编码/英文版ASCII码]内容文字编码
│├─┬14C\\LS按钮属性
││ ├─0\\[指针]=基址
││ ├─8\\X坐标
││ ├─C\\Y坐标
││ ├─10\\按钮宽度
││ ├─14\\文字纵向偏移
││ ├─18\\[逻辑值]鼠标在按钮上则为true
││ ├─19\\[逻辑值]鼠标按住钮上则为true
││ └─84\\[中文版GB2312编码/英文版ASCII码]内容文字编码
│├──150\\[逻辑值]true则鼠标不显示手型
│├─┬15C\\选卡界面属性
││ ├─0\\[指针]=基址
││ ├─8\\画面横向偏移
││ ├─2C\\true则选卡结束开始游戏
││ ├─34\\[逻辑值]false则选卡界面隐形
││ └─35\\[逻辑值]true则生成选卡界面的僵尸
│├─┬160\\宝石迷阵属性
││ ├─0\\[指针]=基址
││ ├─4\\[指针]=当前游戏信息和对象
││ ├─8\\[逻辑值]true则正在拖拽宝石迷阵的植物
││ ├─C\\鼠标点击植物时的横坐标
││ ├─10\\鼠标点击植物是的纵坐标
││ ├─14~49\\[逻辑值]true则有弹坑
││ ├─4A\\[逻辑值]true则升级为双发射手
││ ├─4B\\[逻辑值]true则升级为大喷菇
││ ├─4C\\[逻辑值]true则升级为高坚果
││ ├─50\\一次消除得到的阳光
││ ├─54\\大于3则不可操作,8时不显示关卡名字
││ ├─58\\各种倒计时
││ ├─5C\\0
││ └─60\\关卡进程
│├──164\\[逻辑值]true则游戏暂停
│├──168~23C\\场景格子类型
│├──4C8~5C0\\雾的浓度
│├──5D8~5EC\\每行出怪类型
│├—─60C~620\\每行冰道坐标
│├——624~638\\每行冰道消失倒计时
│├——6B4~54D0\\出怪列表(容纳10面旗帜)
│├——54D4~54F4\\[1字节]出怪种子
│├——5538\\掉落阳光倒计时
│├——553C\\掉落阳光计数
│├——5540\\非0则画面立刻回到正常
│├——5544\\画面横向震动的幅度
│├——5548\\画面纵向震动的幅度
│├——554C\\场景类型
│├——5550\\(冒险模式)当前关卡
│├——5558\\鼠标X坐标
│├——555C\\鼠标Y坐标
│├——5560\\阳光值
│├——5564\\当前关卡总波数
│├——5568\\游戏计时(不包括选卡停留的时间)
│├——556C\\游戏计时(包括选卡停留的时间)
│├——5570\\游戏计时(失去焦点则重新计时)
│├——5574\\产生三人组倒计时
│├——557C\\当前所在波数
│├——5580\\已刷新的波数
│├——5584\\新手教程相关的闪烁提示
│├——5594\\达到刷新条件的血量
│├——5598\\本波总血量
│├——559C\\下一波僵尸倒计时
│├——55A0\\下一波僵尸倒计时初始值
│├——55A4\\大波僵尸刷新倒计时
│├——55EC\\出现红字时为41
│├——55F1\\[逻辑值]true时有铲子
│├——55F4\\金钱显示倒计时
│├——55F8\\用于程序调试(仅英文原版有效)
│├——55FC\\[逻辑值]true时退出关卡
│├——5600\\[逻辑值]true时为过关过程
│├——5604\\退出关卡倒计时
│├——560C\\[逻辑值]true时为过关状态
│├——5610\\关卡进程的进度条
│├——5744\\辣椒火焰倒计时
│├——5748\\[逻辑值]true则画面变白
│├——5750\\减少到0产生音效
│├——5761\\[逻辑值]按下mustache则为true
│├——5762\\[逻辑值]按下trickedout则为true
│├——5763\\[逻辑值]按下future则为true
│├——5764\\[逻辑值]按下pinata则为true
│├——5765\\[逻辑值]按下dance则为true
│├——5766\\[逻辑值]按下daisies则为true
│├——5767\\[逻辑值]按下sukhbir则为true
│├——5798\\被吃掉的植物数
│└——579C\\被铲掉的植物数
├┬774\\*待补充*
│└┬88\\
│ ├—18\\[逻辑值]true则未完成选卡
│ └—1C\\[扩展色彩数组]一起摇滚吧按钮文字颜色
├—7F8\\关卡序号
├—7F8\\游戏状态
├—814\\[逻辑值]true则开启免费种植模式
├┬820\\动画信息
│└┬8
│ └┬0\\动画效果(+A0下一个)
│ ├─4\\[浮点]动画循环率
│ ├─8\\[浮点]动画速度
│ ├─10\\锤僵尸中的锤子?
│ ├─14\\[逻辑值]true则消失
│ ├─18\\从第几帧开始
│ └─1C\\关键帧数量
├┬82C\\存档信息
│└┬─4\\[ASCII码]用户名字
│ ├─14\\用户名字长度
│ ├─18\\用户名字长度上限
│ ├─1C\\更换用户的次数
│ ├─20\\用户序号
│ ├─24\\冒险模式当前关卡
│ ├─28\\金钱数(/10)
│ ├─2C\\冒险模式已完成次数
│ ├─30~54\\生存模式各关已完成Flag数
│ ├─58~68\\无尽模式各关最高纪录
│ ├─6C~F0\\小游戏各关完成次数
│ ├─F4\\智慧树高度
│ ├─F8~118\\砸罐子各关完成次数
│ ├─11C\\砸罐子无尽最高纪录
│ ├─120~140\\我是僵尸各关完成次数
│ ├─144\\我是僵尸无尽最高纪录
│ ├─1C0~1DC\\[逻辑值]8个紫卡购买则为true
│ ├─1E0\\[逻辑值]模仿者购买则为true
│ ├─1E8~1F0\\三株金盏花购买日期(2000-01-01以来的天数)
│ ├─1F4\\[逻辑值]金水壶已买则为true
│ ├─1F8\\花肥(-1000)
│ ├─1FC\\杀虫剂(-1000)
│ ├─200\\[逻辑值]音乐盒已买则为true
│ ├─204\\[逻辑值]手套已买则为true
│ ├─208\\[逻辑值]蘑菇园已买则为true
│ ├─20C\\[逻辑值]手推车已买则为true
│ ├─210\\[逻辑值]蜗牛已买则为true
│ ├─214\\已买的卡槽数量
│ ├─218\\[逻辑值]泳池清理车已买则为true
│ ├─21C\\[逻辑值]屋顶清理车已买则为true
│ ├─220\\买的耙子剩余数量
│ ├─224\\[逻辑值]水族馆已买则为true
│ ├─228\\巧克力(-1000)
│ ├─22C\\[逻辑值]智慧树已买则为true
│ ├─230\\树肥(-1000)
│ ├─234\\[逻辑值]坚果包扎术已买则为true
│ ├─350\\禅境花园花盆数量
│ ├以下为花盆属性(+58下一个)
│ ├─8种类
│ ├─C\\所在场所
│ ├─10\\所在列数
│ ├─14\\所在行数
│ ├─18\\方向
│ ├─28\\颜色
│ └─2C\\状态
└┬83C\\音乐
└┬─0\\[指针]=基址
└─8\\当前BGM类型
来源:https://www.cnblogs.com/geniushuai/p/12306020.html