资讯专栏INFORMATION COLUMN

不要迷恋我,我只是利用Python修改了游戏内存

ermaoL / 2099人阅读

摘要:上篇文章我许了一个愿,就是想让大家多多关注我,然后我的粉丝就蹭蹭的涨了好几百,谢谢大家的厚爱。可是我发现粉丝是涨了,三连变少了,谢谢大家这次给我三连,我一定再接再厉。地址的寻找阳光总值,种植一个豌豆需要,非常不够用。

目录

前言

游戏的安装

思路

      一句话总结

      大概的思路

实战

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

        代码

       地址的寻找

        视频教程

       修改数据 

         代码

效果

完整的源码 

所有的软件下载包


前言

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

         

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

游戏的安装

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

链接:https://pan.baidu.com/s/1MviRuMQtKZECeYVDRZxcHw 
提取码:9pfz 

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

 

思路

      一句话总结

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

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

      大概的思路

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

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

实战

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

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

                链接:https://pan.baidu.com/s/1mUJ9Y8LntOsg0Vt9J0YMnA 
                提取码:4f7h 

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

       

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

 

        代码

import win32process# 进程模块import win32gui# 界面# none  窗口的类名                窗口的IDwindow_handle = win32gui.FindWindow(None, "植物大战僵尸中文版") #Pyspy++  窗口句柄win32gui.print(window_handle)process_id = win32process.GetWindowThreadProcessId(window_handle)[1] #取进程IDprint(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/1e0hRCK323Hiq3TM_lwBL4g 
                提取码:5e0r 

 

        视频教程

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

                

       修改数据 

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

                链接:https://pan.baidu.com/s/1idc_lYgqoqeJGrrjSw7tsg 
                提取码:zo2g 

               代码

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  窗口的类名                窗口的IDwindow_handle = win32gui.FindWindow(None, "植物大战僵尸中文版") #Pyspy++  窗口句柄win32gui.print(window_handle)process_id = win32process.GetWindowThreadProcessId(window_handle)[1] #取进程IDprint(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/1I-rHc4fZRoPEYAqffnSrCQ 
提取码:61us 

文章版权归作者所有,未经允许请勿转载,若此文章存在违规行为,您可以联系管理员删除。

转载请注明本文地址:https://www.ucloud.cn/yun/123969.html

相关文章

  • 是如何在自学编程9个月后找到工作的

    摘要:昨天在我在国外网站上看到一篇文章,作者分享了他自学编程个月后找到工作的经历。而本文中,我主要针对想要通过学习编程找工作的角度来谈。我在年月犯了一个错误我认为首要任务是找到一份前端开发的工作。 昨天在我在国外网站 reddit 上看到一篇文章,作者分享了他 自学编程 9 个月后找到工作 的经历。文章不到一天就得到3千多赞,2百条回复。我看了下内容,非常中肯,其中有不少建议也是我在编程教室...

    gaosboy 评论0 收藏0
  • “以太猫”将于大年初一登录中国:中文名取名“迷恋猫”

    摘要:消息称,月日,也就是中国的农历大年初一,以太猫将登陆中国。届时,中国的苹果用户将可以领取自己的迷恋猫了。此外,为了庆祝中国新年,新年期间在中国发放的每一只以太猫都将拥有和中国相关的背景故事。消息称,2月16日,也就是中国的农历大年初一,《CryptoKitties》(以太猫)将登陆中国。该应用中文名为《迷恋猫》,因为迷恋与密链同音,也有加密区块链的意思。届时,中国的苹果用户将可以领取自己的迷...

    wind5o 评论0 收藏0
  • 基础冲刺

    摘要:事实上,确实存在多种解释器。在命令行下运行就是启动解释器。最常用的,自带的就是这个是基于之上的一个交互式解释器,也就是说,只是在交互方式上有所增强,但是执行代码的功能和是完全一样的。但是的解释器很多,但使用最广泛的还是。 以下资料大多参考的此篇博客:http://www.cnblogs.com/alex37... 基础冲刺 编译型语言:C、C++ 运行之前都需要一次编译,编译成可以...

    sunny5541 评论0 收藏0
  • 精读《Serverless 给前端带来什么》

    摘要:前端框架总是带入后端思维,而则是把前端思维带入了后端运维。前端同学对应该尤为激动。而带来了进一步优化的空间。当服务器面临攻击重启磁盘故障时,打开复杂的工作台或登陆后一通操作才能恢复。 1. 引言 Serverless 是一种 无服务器架构,让用户无需关心程序运行环境、资源及数量,只要将精力 Focus 到业务逻辑上的技术。 现在公司已经实现 DevOps 化,正在向 Serverles...

    wizChen 评论0 收藏0
  • 30岁零基础自学编程,先学哪种语言最好?

    摘要:大学,光学工程研究生毕业,和程序猿完全不搭边。那怎么办,试着学一学呗,学习才是程序猿的天性。所以我在想程序猿是不是都需要新知识刺激一下,才能保持兴奋的头脑。有句话说的很对程序猿就像好奇的猫,追着毛球的线头玩,最后一个毛球在脑袋里搅浆糊。 说说我自己的经历。211大学,光学工程研究生毕业,和程序猿完全不搭边。 毕业后进了成都某国字头研究所,在行业里摸爬滚打了四年,2018年机缘巧合在家养...

    xietao3 评论0 收藏0

发表评论

0条评论

ermaoL

|高级讲师

TA的文章

阅读更多
最新活动
阅读需要支付1元查看
<