返回顶部
首页 > 资讯 > 后端开发 > Python >Python修改游戏内存的方法
  • 243
分享到

Python修改游戏内存的方法

2024-04-02 19:04:59 243人浏览 安东尼

Python 官方文档:入门教程 => 点击学习

摘要

目录前言游戏的安装思路一句话总结大概的思路实战确定修改哪一款游戏的数据代码地址的寻找视频教程修改数据代码效果完整的源码所有的软件下载包前言 大家好,我叫善念。上篇文章我许了一个愿,就

前言

大家好,我叫善念。上篇文章我许了一个愿,就是想让大家多多关注我,然后我的粉丝就蹭蹭的涨了好几百,谢谢大家的厚爱。可是我发现粉丝是涨了,三连变少了,谢谢大家这次给我三连,我一定再接再厉。有问题留在评论区,我会一一回复,谢谢大家!

这次要做的是修改一款单机游戏的数据,学过C语言的朋友肯定经常会看到有些老师讲这个案例,就是《植物大战僵尸》这个课题,不过此文我将带大家利用python来实现(2019原创课题,附视频教程)。

游戏的安装

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

链接: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:\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))
# 关闭进程

所有的软件下载包

链接:https://pan.baidu.com/s/18le7cp6i5OF6_Qhcj-BLFg
提取码:1234

到此这篇关于Python修改游戏内存的方法的文章就介绍到这了,更多相关Python 修改游戏内容请搜索编程网以前的文章或继续浏览下面的相关文章希望大家以后多多支持编程网!

--结束END--

本文标题: Python修改游戏内存的方法

本文链接: https://lsjlt.com/news/157609.html(转载时请注明来源链接)

有问题或投稿请发送至: 邮箱/279061341@qq.com    QQ/279061341

猜你喜欢
  • Python修改游戏内存的方法
    目录前言游戏的安装思路一句话总结大概的思路实战确定修改哪一款游戏的数据代码地址的寻找视频教程修改数据代码效果完整的源码所有的软件下载包前言 大家好,我叫善念。上篇文章我许了一个愿,就...
    99+
    2024-04-02
  • Python如何修改游戏内存
    这篇文章将为大家详细讲解有关Python如何修改游戏内存,小编觉得挺实用的,因此分享给大家做个参考,希望大家阅读完这篇文章后可以有所收获。游戏的安装关于安装的这一块....我以前是在网站上下载的,现在再去找估计随便百度下载一个就可以了,这里...
    99+
    2023-06-25
  • C1任务01之修改游戏存档的方法
    目录挑战一、任务实现工具:游戏:植物大战僵尸中文版十六进制编辑器:Hex Editor Neo二、任务实现过程:1、修改关卡2、修改金币3、修改用户名4、修改局内文字信息总结挑战 ...
    99+
    2024-04-02
  • tomcat7 内存配置修改方法
    转载地址:http://zxmsdyz.iteye.com/blog/17685671、tomcat绿色版设置方法进入tomcat/bin目录下,找到catalina.bat文件在文件首行中插入下面这段配置即可:set JAVA_OPTS=...
    99+
    2023-06-03
  • 通过Java修改游戏存档的实现思路
    目录前言一、实现思路二、项目准备1. 创建maven工程2. 导入依赖三、核心代码1. 使用的对象2. 修改关卡信息3. 修改金币信息四、代码测试1. 读取数据文件2. 修改关卡位置...
    99+
    2024-04-02
  • 怎么用python分析游戏内存数据
    要使用Python分析游戏内存数据,你需要了解以下几个步骤: 安装所需的模块:首先,你需要安装一些用于分析游戏内存数据的Pyth...
    99+
    2023-10-26
    python
  • Win8系统怎么修改虚拟内存大小?Win8系统修改虚拟内存大小的方法
    Win8系统怎么修改虚拟内存大小?熟悉win8系统的用户就知道,Win8系统虚拟内存是非常好用的功能,在不添加内存条的情况下,可以增大内存容量。那么Win8系统设置好的虚拟内存怎么修改它的大小呢?下面小编就...
    99+
    2022-06-04
    内存大小 系统 方法
  • sql修改表内容的方法
    小编给大家分享一下sql修改表内容的方法,希望大家阅读完这篇文章后大所收获,下面让我们一起去探讨吧!sql中修改表的内容有以下三种方法分别是:使用SSMS数据库管理工具修改内容,使用T-SQL脚本修改内容以...
    99+
    2024-04-02
  • Unity存储游戏数据的方法有哪些
    本篇内容介绍了“Unity存储游戏数据的方法有哪些”的有关知识,在实际案例的操作过程中,不少人都会遇到这样的困境,接下来就让小编带领大家学习一下如何处理这些情况吧!希望大家仔细阅读,能够学有所成!在Unity中,常用的数据存储方法包括Pla...
    99+
    2023-07-05
  • Python批量修改文本文件内容的方法
    Python批量替换文件内容,支持嵌套文件夹 import os path="./" for root,dirs,files in os.walk(path): for name in files: ...
    99+
    2022-06-04
    批量 文本文件 方法
  • Oracle数据库查看与修改内存配置的方法
    目录oracle内存管理模式查看Oracle内存分配修改Oracle内存分配总结 Oracle内存管理模式 Oracle数据库的内存管理模式从自动管理化程度由高到低依次可以分为: 自动内存管理:完全由Oracl...
    99+
    2023-11-22
    oracle查看内存设置的大小 oracle内存使用情况 oracle内存
  • javascript修改网页内容的方法
    javascript修改网页内容的方法:通过innerHTML属性能够修改html网页内容,语法格式“document.getElementById("元素ID").innerHTML="修改内容";...
    99+
    2024-04-02
  • javascript修改文件内容的方法
    小编给大家分享一下javascript修改文件内容的方法,相信大部分人都还不怎么了解,因此分享这篇文章给大家参考一下,希望大家阅读完这篇文章后大有收获,下面让我们一起去了解一下吧!javascript修改文件内容的方法:首先找到需要修改的j...
    99+
    2023-06-14
  • Unity存储游戏数据的多种方法小结
    目录1 PlayerPrefs: Unity自带的一种简单的键值存储系统2 ScriptableObject: Unity中最灵活的数据管理工具2.1 如何手动创建和修改数据文件2....
    99+
    2023-02-22
    Unity存储游戏数据 Unity存储数据
  • winxp系统虚拟内存修改方法图文详解
      虚拟内存是计算机系统内存管理的一种技术。它使得应用程序认为它拥有连续的可用的内存(一个连续完整的地址空骤   右键我的电脑,点菜单中的属性,如图      在性能框中点击设置键,如图   在弹出的窗口中的上方点...
    99+
    2023-05-31
    winxp 虚拟内存 修改 方法 系统
  • 安装为 window 服务的tomcat修改jvm内存的两种方法
    目录第一种方法第二种方法第一种方法 1.快捷键按win+r弹出运行窗口输入regedit进入注册表编辑器 2、在服务注册里,找到对应tomcat服务 3、在服务注册表中有Jvm...
    99+
    2023-03-22
    tomcat修改jvm内存 window tomcat修改jvm内存
  • python实现简单反弹球游戏的方法
    这篇文章将为大家详细讲解有关python实现简单反弹球游戏的方法,小编觉得挺实用的,因此分享给大家做个参考,希望大家阅读完这篇文章后可以有所收获。具体内容如下tkinter实现,直接贴上代码from tkinter im...
    99+
    2023-06-14
  • Linux内核私闯进程地址空间并修改进程内存的方法
    进程地址空间的隔离 是现代操作系统的一个显著特征。这也是区别于 “古代”操作系统 的显著特征。 进程地址空间隔离意味着进程P1无法以随意的方式访问进程P2的内存,除非这块内存被声明是共享的。 这非常容易理解,我举个例子。...
    99+
    2022-06-04
    Linux内核地址空间修改 Linux 进程地址空间
  • 用python修改excel表某一列内容的操作方法
    想想你在一家公司里做表格,现在有一个下面这样的excel表摆在你面前,这是一个员工每个月工资的表, 现在假设,你要做的事情,是填充好后面几个月每个员工的编号,并且给员工随机生成一个...
    99+
    2024-04-02
  • docker修改容器内存大小的实现方式
    目录前言1.docker内存限制的两种方式2.方式一:-m参数限制3.方式二:修改hostconfig.json文件限制1.查找容器对应的hostconfig.json文件2.停止d...
    99+
    2024-04-02
软考高级职称资格查询
编程网,编程工程师的家园,是目前国内优秀的开源技术社区之一,形成了由开源软件库、代码分享、资讯、协作翻译、讨论区和博客等几大频道内容,为IT开发者提供了一个发现、使用、并交流开源技术的平台。
  • 官方手机版

  • 微信公众号

  • 商务合作