本文将详细解释Python如何修改游戏内存。边肖觉得很实用,就分享给大家参考。希望你看完这篇文章能有所收获。
关于这个装置.以前是从网站上下载的,现在要去找。估计只要从百度下载一个,我这里就用我之前的。
链接:https://pan.baidu.com/s/1Ydiy1Q9QqKNxoyAkIlzp7Q
提取代码:1234
下载后记得避免点击一些广告,记得取消一些浏览器的锁定检查。进入游戏是全屏的,不方便我们观察效果和写程序。您可以在选项中取消全屏幕。
游戏的安装
10-1010我的理解是,所有程序的本质都是变量和值的集合。
比如我们玩的游戏也是一个程序。角色的血量和游戏的蓝条都存储在一个变量里吗?如果我们找到存储这个值的变量(也叫地址)并修改这个变量的值,是否可以做一系列的操作来给我们的角色增加血量并修改他们的等级?
00-1010首先确定要修改哪些游戏数据,然后确定要修改哪些游戏数据,然后找到这个数据在这个游戏中的地址,然后修改这个数据。
听起来有点拐弯抹角。嗯,是我语文学习不好。
00-1010
思路
在这里,我们需要使用一个手柄查看工具,这是我为大家下载的。
链接:https://pan.baidu.com/s/1ubpe7bmIsojbcX3z_24CxA
提取代码:1234
将放大镜拖到游戏标题上,即可看到此窗口中的所有信息。
你看我们任务管理器里的流程ID是不是也是39156?
一句话总结
import win 32进程
#流程模块
importwin32gui
#接口
#无窗口类名窗口的标识
win _ handle=win32gui . find window(无,‘植物大战僵尸中文版’)# py spy窗口句柄win 32 GUI。
打印(窗口句柄)
Process _ ID=Win32Process。GetWindowThreadProcessID(window _ handle)[1]#获取进程ID
打印(进程id)
process _ handle=win32 API . open process(0x 10 fff,false,process _ ID) # process handle
#进程句柄是否可以被子进程继承,一般选择false(不能继承)。
# #这是线程内核对象的默认安全属性。子进程不能继承父进程的句柄,也不能继承它。
#那么子进程是不能通过句柄访问内核对象。
Print(process_handle)我来解释一下这段代码,如何判断一个游戏是由进程句柄来判断的,在我们手动获取游戏的窗口ID和类名后,就可以得到进程ID,进程ID就可以得到游戏句柄。
大概的思路
年的日照总值是150,种一颗豌豆需要100,这还不够。我们现在需要实现的功能是无限阳光,达到无限种植豌豆的效果。这里需要CE软件,我会提供给你。
链接:https://pan.baidu.com/s/1mkEmVUonDBS6zBjJjYDFSQ
提取代码:1234
实战
P
ython永远的神,实战开发游戏内存辅助!
修改数据
由于咱们是用Python这门编程语言来实现的,这里需要用Python去调C,用到动态链接库,所以要配置一下内核模块(动态链接库kernel32.dll),C:\Windows\System32\kernel32.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:\Windows\System32\kernel32.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:\Windows\System32\kernel32.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如何修改游戏内存”这篇文章就分享到这里了,希望
内容来源网络,如有侵权,联系删除,本文地址:https://www.230890.com/zhan/111349.html