新西兰服务器

Python如何修改游戏内存


Python如何修改游戏内存

发布时间:2021-11-21 17:37:07 来源:高防服务器网 阅读:83 作者:小新 栏目:开发技术

这篇文章将为大家详细讲解有关Python如何修改游戏内存,小编觉得挺实用的,因此分享给大家做个参考,希望大家阅读完这篇文章后可以有所收获。

游戏的安装

关于安装的这一块….我以前是在网站上下载的,现在再去找估计随便百度下载一个就可以了,这里就用我之前的吧

链接:https://pan.baidu.com/s/1Ydiy1Q9QqKNxoyAkIlzp7Q
提取码:1234

安装下载后切记要避免点到一些广告上去,和一些浏览器的锁定勾选记得取消掉。 进入游戏是全屏,不方便我们观察效果以及编写程序,可以在选项中取消勾选全屏

思路

一句话总结

我的理解就是,所有的程序的本质都是变量与数值的集合。

比如说咱们玩的游戏它也是一个程序吧,游戏的角色血量、蓝条是不是都是一个数值储存在变量内,那么如果我们找到存放这个数值的变量(也可以叫做地址),修改这个变量的值,那么是不是就可以做到给咱们得人物加血量、修改人物等级的一系列操作。

大概的思路

首先确定修改哪一款游戏的数据,然后确定修改游戏的哪一个数据,然后去寻找这个游戏内这个数据的地址,然后去修改这个数据。

听起来有点绕。好吧,是我的语文学习的太差啦

实战

确定修改哪一款游戏的数据

这里需要利用到一个句柄查看工具这里我给大家已经下载好了。

链接:https://pan.baidu.com/s/1ubpe7bmIsojbcX3z_24CxA
提取码:1234

把放大镜拖动到游戏的标题上,就可以查看到这个窗口的所有信息

可以看下咱们任务管理器中的进程ID是否也是39156

代码
import win32process  # 进程模块  import win32gui  # 界面  # none  窗口的类名                窗口的ID  window_handle = win32gui.FindWindow(None, "植物大战僵尸中文版") #Pyspy++  窗口句柄win32gui.  print(window_handle)  process_id = win32process.GetWindowThreadProcessId(window_handle)[1] #取进程ID  print(process_id)  process_handle = win32api.OpenProcess(0x1F0FFF, False, process_id)#进程句柄  # 进程句柄是否可以被子进程继承,一般选false(不可被继承)  # #这种是用线程内核对象的默认安全属性, 子进程不能继承父进程的句柄,不可以继承,  # 则子进程是不可以通过句柄访问改内核对象。  print(process_handle)

关于这个代码我讲解一下 ,如何确定一款游戏是由进程的句柄来判断的,而我们手动取到游戏的窗口ID 与类名后,可以得到进程ID,由进程ID可以得到游戏句柄。

地址的寻找

阳光总值150, 种植一个豌豆需要100,非常不够用。咱们现在需要实现的功能是无限阳光,达到无限种植豌豆的效果。这里需要用到CE软件,我给大家提供。

链接:https://pan.baidu.com/s/1mkEmVUonDBS6zBjJjYDFSQ
提取码:1234

视频教程

Python永远的神,实战开发游戏内存辅助!

修改数据

由于咱们是用Python这门编程语言来实现的,这里需要用Python去调C,用到动态链接库,所以要配置一下内核模块(动态链接库kernel32.dll),C:WindowsSystem32kernel32.dll放到这个目录下,我这里也给大家下载好了。

链接:https://pan.baidu.com/s/1kAwg7PE_zZP_sqkaluD4QA
提取码:1234

代码
import win32api  # 系统模块  import win32process  # 进程模块  import win32gui  # 界面  import ctypes  # C语言调用类型  # python中使用ctypes模块可以在python中直接调用C/C++。首先要将C/C++编译成动态库  # (.dl或.so),之后python中调用即可。  # C类型 调用约定  # kernel32.WriteProcessMemory(int(process_handle),0x1C0A4F98,byref(c_int(1000)),4,byref(c_int(0)))  kernel32 = ctypes.windll.LoadLibrary(r"C:WindowsSystem32kernel32.dll ")#加载内核模块  动态链接库  date1 = ctypes.c_long()  kernel32.ReadProcessMemory(int(process_handle),0x006A9EC0,ctypes.byref(date1),4,None)#None读取的一个数据的大小 尺寸 长度  # 缓冲区,各种语言的文本要求不一样,为了兼容,那么自定义一个文本  # 地址会变,但是里面存储的数据不会变。  print(date1.value)  date2 = ctypes.c_long()  kernel32.ReadProcessMemory(int(process_handle),date1.value+0x768,ctypes.byref(date2),4,None)  print(date2.value)  date3 = ctypes.c_long()  kernel32.ReadProcessMemory(int(process_handle),date2.value+0x5560,ctypes.byref(date3),4,None)  print(date3.value)  sun = input("请输入你要改变的阳光值:")  # kernel32.WriteProcessMemory(int(process_handle),date2.value+0x5560,ctypes.byref(ctypes.c_long(int(sun))),4,None)  kernel32.WriteProcessMemory(int(process_handle),date2.value+0x5560,ctypes.byref(ctypes.c_long(int(sun))), 4, None)  # 关闭进程  kernel32.CloseHandle(int(process_handle))

效果

完整的源码

#!/usr/bin/python3  # -*- coding: utf-8 -*-  # @Time    : 2019/4/30 16:00  # @Author  : 善念     import win32api  # 系统模块  import win32process  # 进程模块  import win32gui  # 界面  import ctypes  # C语言调用类型  # python中使用ctypes模块可以在python中直接调用C/C++。首先要将C/C++编译成动态库  # (.dl或.so),之后python中调用即可。  # none  窗口的类名                窗口的ID  window_handle = win32gui.FindWindow(None, "植物大战僵尸中文版") #Pyspy++  窗口句柄win32gui.  print(window_handle)  process_id = win32process.GetWindowThreadProcessId(window_handle)[1] #取进程ID  print(process_id)  process_handle = win32api.OpenProcess(0x1F0FFF, False, process_id)#进程句柄  # 进程句柄是否可以被子进程继承,一般选false(不可被继承)  # #这种是用线程内核对象的默认安全属性, 子进程不能继承父进程的句柄,不可以继承,  # 则子进程是不可以通过句柄访问改内核对象。  print(process_handle)  # C类型 调用约定  # kernel32.WriteProcessMemory(int(process_handle),0x1C0A4F98,byref(c_int(1000)),4,byref(c_int(0)))  kernel32 = ctypes.windll.LoadLibrary(r"C:WindowsSystem32kernel32.dll ")#加载内核模块  动态链接库  date1 = ctypes.c_long()  kernel32.ReadProcessMemory(int(process_handle),0x006A9EC0,ctypes.byref(date1),4,None)#None读取的一个数据的大小 尺寸 长度  # 缓冲区,各种语言的文本要求不一样,为了兼容,那么自定义一个文本  # 地址会变,但是里面存储的数据不会变。  print(date1.value)  date2 = ctypes.c_long()  kernel32.ReadProcessMemory(int(process_handle),date1.value+0x768,ctypes.byref(date2),4,None)  print(date2.value)  date3 = ctypes.c_long()  kernel32.ReadProcessMemory(int(process_handle),date2.value+0x5560,ctypes.byref(date3),4,None)  print(date3.value)  sun = input("请输入你要改变的阳光值:")  # kernel32.WriteProcessMemory(int(process_handle),date2.value+0x5560,ctypes.byref(ctypes.c_long(int(sun))),4,None)  kernel32.WriteProcessMemory(int(process_handle),date2.value+0x5560,ctypes.byref(ctypes.c_long(int(sun))), 4, None)  kernel32.CloseHandle(int(process_handle))  # 关闭进程

关于“Python如何修改游戏内存”这篇文章就分享到这里了,希望以上内容可以对大家有一定的帮助,使各位可以学到更多知识,如果觉得文章不错,请把它分享出去让更多的人看到。

[微信提示:高防服务器能助您降低 IT 成本,提升运维效率,使您更专注于核心业务创新。

[图文来源于网络,不代表本站立场,如有侵权,请联系高防服务器网删除]
[