如何用易语言制作植物大战僵尸辅助
的有关信息介绍如下:大家玩植物大战僵尸的时候都希望可以开外挂,今天小编就教大家如何用易语言制作植物大战僵尸辅助。
首先大家制作一个这样的界面:
然后在“窗口程序集1”里输入以下代码:
.版本 2
.支持库 iext
.程序集 窗口程序集1
.程序集变量 pid, 整数型
.程序集变量 基址1, 整数型
.程序集变量 基址2, 整数型
.子程序 _时钟1_周期事件
pid = 进程_名取ID (“PlantsVsZombies.exe”, )
.如果 (pid = 0)
分组框1.禁止 = 真
.如果真 (分组框1.标题 ≠ “未检测到游戏进程PID,不能进行操作”)
分组框1.标题 = “未检测到游戏进程PID,不能进行操作”
.如果真结束
时钟2.时钟周期 = 0
返回 ()
.否则
分组框1.禁止 = 假
.如果真 (分组框1.标题 ≠ “已检测到游戏进程PID,可进行操作”)
分组框1.标题 = “已检测到游戏进程PID,可进行操作”
.如果真结束
时钟2.时钟周期 = 200
.如果结束
基址1 = 内存_读整数型 (pid, 进制_十六到十 (“006A9EC0”))
基址2 = 内存_读整数型 (pid, 进制_十六到十 (“006A9F38”))
.子程序 __启动窗口_尺寸被改变
分组框1.宽度 = _启动窗口.取用户区宽度 ()
分组框1.高度 = _启动窗口.取用户区高度 ()
.子程序 _按钮1_被单击
.局部变量 偏移1, 整数型
.如果真 (到整数 (编辑框1.内容) > 99999 或 到整数 (编辑框1.内容) < 1)
信息框 (“请输入1~99999的整数!”, 0, )
返回 ()
.如果真结束
偏移1 = 内存_读整数型 (pid, 基址1 + 进制_十六到十 (“768”))
内存_写整数型 (pid, 偏移1 + 进制_十六到十 (“5560”), 到整数 (编辑框1.内容))
.子程序 _按钮2_被单击
.局部变量 偏移1, 整数型
.如果真 (到整数 (编辑框2.内容) > 50 或 到整数 (编辑框2.内容) < 1)
信息框 (“请输入1~50的整数!”, 0, )
返回 ()
.如果真结束
偏移1 = 内存_读整数型 (pid, 基址1 + 进制_十六到十 (“82C”))
内存_写整数型 (pid, 偏移1 + 进制_十六到十 (“24”), 到整数 (编辑框2.内容))
.子程序 _编辑框2_内容被改变
.局部变量 大关卡, 整数型
.局部变量 小关卡, 整数型
小关卡 = 到整数 (编辑框2.内容) % 10
大关卡 = 到整数 (编辑框2.内容) ÷ 10 + 1
.如果真 (小关卡 = 0)
大关卡 = 到整数 (编辑框2.内容) ÷ 10
小关卡 = 10
.如果真结束
透明标签1.标题 = 到文本 (大关卡) + “-” + 到文本 (小关卡)
.如果真 (到整数 (编辑框2.内容) < 1 或 到整数 (编辑框2.内容) > 50)
透明标签1.标题 = “”
.如果真结束
.子程序 _按钮3_被单击
.局部变量 偏移1, 整数型
.如果真 (到整数 (编辑框3.内容) > 99999 或 到整数 (编辑框3.内容) < 1)
信息框 (“请输入1~99999的整数!”, 0, )
返回 ()
.如果真结束
偏移1 = 内存_读整数型 (pid, 基址1 + 进制_十六到十 (“82C”))
内存_写整数型 (pid, 偏移1 + 进制_十六到十 (“28”), 到整数 (编辑框3.内容))
.子程序 _编辑框3_内容被改变
透明标签2.标题 = 到文本 (到整数 (编辑框3.内容) × 10)
.子程序 _时钟2_周期事件
.局部变量 偏移1, 整数型
.局部变量 计次, 整数型
.局部变量 冷却偏移, 整数型
.局部变量 冷却偏移2
.如果真 (选择框1.选中 = 真)
偏移1 = 内存_读整数型 (pid, 基址1 + 进制_十六到十 (“768”))
内存_写整数型 (pid, 偏移1 + 进制_十六到十 (“5560”), 到整数 (编辑框1.内容))
.如果真结束
.如果真 (选择框2.选中 = 真)
冷却偏移 = 内存_读整数型 (pid, 基址1 + 进制_十六到十 (“768”))
冷却偏移2 = 内存_读整数型 (pid, 冷却偏移 + 进制_十六到十 (“144”))
.计次循环首 (10, 计次)
内存_写整数型 (pid, 冷却偏移2 + 进制_十六到十 (“70”) + 进制_十六到十 (“50”) × (计次 - 1), 1)
.计次循环尾 ()
.如果真结束
.子程序 _选择框1_被单击
.如果真 (到整数 (编辑框1.内容) > 99999 或 到整数 (编辑框1.内容) < 1)
信息框 (“请输入1~99999的整数!”, 0, )
选择框1.选中 = 假
返回 ()
.如果真结束
.子程序 _按钮4_被单击
.局部变量 偏移1, 整数型
.局部变量 偏移2, 整数型
.如果真 (到整数 (编辑框4.内容) > 10 或 到整数 (编辑框4.内容) < 1)
信息框 (“请输入1~10的整数!”, 0, )
返回 ()
.如果真结束
偏移1 = 内存_读整数型 (pid, 基址1 + 进制_十六到十 (“768”))
偏移2 = 内存_读整数型 (pid, 偏移1 + 进制_十六到十 (“144”))
内存_写整数型 (pid, 偏移2 + 进制_十六到十 (“24”), 到整数 (编辑框4.内容))
.子程序 _滑块条1_位置被改变
编辑框2.内容 = 到文本 (滑块条1.位置)
.子程序 _滑块条2_位置被改变
编辑框1.内容 = 到文本 (滑块条2.位置)
.子程序 _滑块条3_位置被改变
编辑框3.内容 = 到文本 (滑块条3.位置)
.子程序 _滑块条4_位置被改变
编辑框4.内容 = 到文本 (滑块条4.位置)
.子程序 _按钮5_被单击
.局部变量 偏移1, 整数型
.如果真 (到整数 (编辑框6.内容) > 10000 或 到整数 (编辑框6.内容) < 1)
信息框 (“请输入1~10000的整数!”, 0, )
返回 ()
.如果真结束
偏移1 = 内存_读整数型 (pid, 基址2 + 进制_十六到十 (“82C”))
内存_写整数型 (pid, 偏移1 + 进制_十六到十 (“1F8”), 到整数 (编辑框6.内容) + 1000)
.子程序 _按钮6_被单击
.局部变量 偏移1, 整数型
.如果真 (到整数 (编辑框5.内容) > 10000 或 到整数 (编辑框5.内容) < 1)
信息框 (“请输入1~10000的整数!”, 0, )
返回 ()
.如果真结束
偏移1 = 内存_读整数型 (pid, 基址2 + 进制_十六到十 (“82C”))
内存_写整数型 (pid, 偏移1 + 进制_十六到十 (“1FC”), 到整数 (编辑框5.内容) + 1000)
.子程序 _按钮7_被单击
.局部变量 偏移1, 整数型
.如果真 (到整数 (编辑框7.内容) > 10000 或 到整数 (编辑框7.内容) < 1)
信息框 (“请输入1~10000的整数!”, 0, )
返回 ()
.如果真结束
偏移1 = 内存_读整数型 (pid, 基址2 + 进制_十六到十 (“82C”))
内存_写整数型 (pid, 偏移1 + 进制_十六到十 (“228”), 到整数 (编辑框7.内容) + 1000)
.子程序 _按钮8_被单击
.局部变量 偏移1, 整数型
.如果真 (到整数 (编辑框8.内容) > 10000 或 到整数 (编辑框8.内容) < 1)
信息框 (“请输入1~10000的整数!”, 0, )
返回 ()
.如果真结束
偏移1 = 内存_读整数型 (pid, 基址2 + 进制_十六到十 (“82C”))
内存_写整数型 (pid, 偏移1 + 进制_十六到十 (“230”), 到整数 (编辑框8.内容) + 1000)
.子程序 _按钮9_被单击
信息框 (“本程序由陈哥编写” + #换行符 + “QQ:1954458124” + #换行符 + “”, 64 + 256, “关于”, )
.子程序 __启动窗口_创建完毕
.子程序 __启动窗口_将被销毁
.子程序 _关闭_被选择
销毁 ()
.子程序 _按钮10_被单击
.局部变量 偏移1, 整数型
.如果真 (到整数 (编辑框9.内容) > 9999 或 到整数 (编辑框9.内容) < 1)
信息框 (“请输入1~9999的整数!”, 0, )
返回 ()
.如果真结束
偏移1 = 内存_读整数型 (pid, 基址2 + 进制_十六到十 (“82C”))
内存_写整数型 (pid, 偏移1 + 进制_十六到十 (“2C”), 到整数 (编辑框9.内容))
.子程序 _按钮11_被单击
.局部变量 偏移1, 整数型
.如果真 (到整数 (编辑框10.内容) > 9999 或 到整数 (编辑框10.内容) < 1)
信息框 (“请输入1~9999的整数!”, 0, )
返回 ()
.如果真结束
偏移1 = 内存_读整数型 (pid, 基址2 + 进制_十六到十 (“82C”))
内存_写整数型 (pid, 偏移1 + 进制_十六到十 (“F4”), 到整数 (编辑框10.内容))
.子程序 _滑块条5_位置被改变
编辑框10.内容 = 到文本 (滑块条5.位置)
.子程序 _启动不冷却时间种植_被选择
选择框2.选中 = 真
.子程序 _滑块条6_位置被改变
编辑框9.内容 = 到文本 (滑块条6.位置)
.子程序 _滑块条10_位置被改变
编辑框6.内容 = 到文本 (滑块条10.位置)
.子程序 _滑块条9_位置被改变
编辑框5.内容 = 到文本 (滑块条9.位置)
.子程序 _滑块条8_位置被改变
编辑框7.内容 = 到文本 (滑块条8.位置)
.子程序 _滑块条7_位置被改变
编辑框8.内容 = 到文本 (滑块条7.位置)
再插入一个“程序集1”,代码如下:
.版本 2
.程序集 程序集1
.子程序 内存_写整数型, 逻辑型, 公开, 写入四字节数据(成功返回真,失败返回假)
.参数 进程ID, 整数型, , 进程ID
.参数 内存地址, 整数型, , 内存地址
.参数 要写入的值, 整数型, , 写入数据
.参数 写入类型, 整数型, 可空, 默认为1 0=短整数型 1=整数型 2=长整数型
.局部变量 局_进程句柄, 整数型
.局部变量 a, 整数型
.局部变量 局_长度, 整数型
.如果 (是否为空 (写入类型))
局_长度 = 4
.否则
.判断开始 (写入类型 = 0)
局_长度 = 2
.判断 (写入类型 = 1)
局_长度 = 4
.判断 (写入类型 = 2)
局_长度 = 8
.默认
.判断结束
.如果结束
局_进程句柄 = OpenProcess (#PROCESS_ALL_ACCESS, 0, 进程ID)
a = WriteProcessMemory_整数型 (局_进程句柄, 内存地址, 要写入的值, 局_长度, 0)
CloseHandle (局_进程句柄)
返回 (a = 1)
.子程序 内存_读整数型, 整数型, 公开, 读取整数型数据(返回整数内容 失败返回0)
.参数 进程ID, 整数型
.参数 内存地址, 整数型
.局部变量 临时整数, 整数型
.局部变量 操作句柄, 整数型
操作句柄 = OpenProcess (#PROCESS_ALL_ACCESS, 0, 进程ID) ' 取得操作句柄
ReadProcessMemory_整数型 (操作句柄, 内存地址, 临时整数, 4, 0)
CloseHandle (操作句柄)
返回 (临时整数)
.子程序 进程_名取ID, 整数型, 公开, 通过进程名取进程ID;失败返回0
.参数 进程名, 文本型, , 取要进程ID的进程名
.参数 是否区分大小写, 逻辑型, 可空, 默认为不区分,真=区分
.局部变量 局_进程信息, 精易_进程信息列表
.局部变量 进程快照, 整数型
.局部变量 进程句柄, 整数型
进程快照 = CreateToolhelp32Snapshot (2, 0)
.如果真 (进程快照 = 0)
返回 (0)
.如果真结束
局_进程信息.dwSize = 512
进程句柄 = Process32First (进程快照, 局_进程信息)
.判断开始 (是否区分大小写)
.判断循环首 (进程句柄 ≠ 0)
.如果真 (到文本 (局_进程信息.进程名称) = 进程名)
CloseHandle (进程快照)
返回 (局_进程信息.进程ID)
.如果真结束
进程句柄 = Process32Next (进程快照, 局_进程信息)
.判断循环尾 ()
.默认
.判断循环首 (进程句柄 ≠ 0)
.如果真 (到小写 (到文本 (局_进程信息.进程名称)) = 到小写 (进程名))
CloseHandle (进程快照)
返回 (局_进程信息.进程ID)
.如果真结束
进程句柄 = Process32Next (进程快照, 局_进程信息)
.判断循环尾 ()
.判断结束
CloseHandle (进程快照)
返回 (0)
.子程序 进制_十六到十, 整数型, 公开, 将16进制文件转换到10进制数值(返回十进制数)
.参数 文本, 文本型
.局部变量 i, 整数型
.局部变量 t, 文本型
.局部变量 结果, 整数型
.局部变量 局_文本, 文本型
t = “0123456789ABCDEF”
局_文本 = 到大写 (文本)
.计次循环首 (取文本长度 (文本), i)
结果 = 结果 × 16 + 寻找文本 (t, 取文本中间 (局_文本, i, 1), , 假) - 1
.计次循环尾 ()
返回 (结果)
最后添加一个“DLL命令定义表”:
.版本 2
.DLL命令 OpenProcess, 整数型, , "OpenProcess", 公开, 打开进程
.参数 进程对象, 整数型
.参数 继承句柄, 整数型
.参数 进程标识符, 整数型
.DLL命令 WriteProcessMemory_整数型, 整数型, "kernel32.dll", "WriteProcessMemory", 公开, 内存写整数,有传址
.参数 hProcess, 整数型
.参数 内存地址, 整数型
.参数 数据指针, 整数型, 传址
.参数 数据长度, 整数型
.参数 实际写出长度, 整数型
.DLL命令 ReadProcessMemory_整数型, 整数型, "kernel32.dll", "ReadProcessMemory", 公开, 内存读整数,有传址
.参数 hProcess, 整数型
.参数 内存地址, 整数型
.参数 数据指针, 整数型, 传址
.参数 数据长度, 整数型
.参数 实际写出长度, 整数型
.DLL命令 CreateToolhelp32Snapshot, 整数型, , "CreateToolhelp32Snapshot", 公开, 创建进程快照
.参数 falg, 整数型
.参数 id, 整数型
.DLL命令 Process32Next, 整数型, , "Process32Next", 公开, 取下一个进程
.参数 h, 整数型
.参数 p, 精易_进程信息列表
.DLL命令 Process32First, 整数型, , "Process32First", 公开, 取第一个进程
.参数 h, 整数型
.参数 p, 精易_进程信息列表
.DLL命令 CloseHandle, 逻辑型, "kernel32", "CloseHandle", 公开, 关闭一个内核对象。其中包括文件、文件映射、进程、线程、安全和同步对象等。涉及文件处理时,这个函数通常与vb的close命令相似。应尽可能的使用close,因为它支持vb的差错控制。注意这个函数使用的文件句柄与vb的文件编号是完全不同的 非零表示成功,零表示失败。会设置GetLastError
.参数 对象句柄, 整数型, , 欲关闭的一个对象的句柄;