赞
踩
一谈到外挂,网上都是易语言和C++的教程,python对挂的教程太少了,几乎无,而且杂七杂八,拿下来用还不一定运行成功,如今python兴起,库的支持也变得极为广泛,这里我以CE自带教程的第二关讲解一下如何用Python修改内存数据通过第二关。玩过CE自带教程的看了这篇文章可能会说我小题大做了,如果只是为了自己修改数据自己玩,确实是小题大做了,但这篇文章的目的主要是让大家明白PyThon是如何一步一步做到修改内存的。
PyCharm一定要用管理员身份运行!!!
修改一个游戏数据,无非就是找到数据所在内存区域,然后修改即可,这是简单的理解。但通过一个程序去完成这个任务还是比较复杂的,下面看步骤。
我们的目的很明确,如前言所说,CE教程第二关这里只有将健康值修改为1000,才能点击下一步以完成通关。
操作内存就要动用windowsAPI,使用WindowsAPI可以联合Ctypes库去操作,但是Python如今自己对WindowsAPI的操作库封装的也比较完善,我们用最简单的即可->封装了WindowsAPI的内存相关的pymem库
- import win32gui
- import win32process
- from pymem import *
FindWindow(窗口的类名,窗口标题),返回值为窗口的句柄,窗口的类名和标题可以通过工具Spy++查看,非常简单,这里不赘述。如下的第一个参数填写None也可以。
语句解释:通过窗口的类名和窗口标题获取到窗口句柄。
WindowHandle=win32gui.FindWindow("Window","Tutorial-i386")
语句解释:通过窗口句柄获取到进程信息,这里返回值有两个,我们主要用到进程ID,即ProcessId
ThreadId,ProcessId=win32process.GetWindowThreadProcessId(WindowHandle)
前两步的目的主要是为了获取到进程句柄。
语句解释:通过进程ID和自定义的权限获取到进程句柄,如下的PROCESS_ALL_ACCESS是在定义进入进程的最高权限,就好比有些软件的功能必须要通过管理员方式才能运行
- PROCESS_ALL_ACCESS = (0x000F0000|0x00100000|0xFFF)
- ProcessHandle=pymem.process.open(ProcessId,True,PROCESS_ALL_ACCESS)
我们通过CE找到健康值的 基地址为0x00656650,偏移了一次且偏移量为0x4b0
提示:在内存相关的外挂中,最难的不是写程序,而是用CE和其他工具找一个数据的基地址和偏移量,关于CE如何找基地址及其偏移,网上教程多,这里主要分享Python操作内存的写法
- BaseAddress=0x00656650
- offset=0x4b0
- #读取基地址指向的值
- baseVal=pymem.memory.read_int(ProcessHandle,BaseAddress)
- #向基地址指向值+偏移量写入数据1000
- pymem.memory.write_int(ProcessHandle,baseVal+offset,1000)
- #关闭进程句柄
- pymem.process.close_handle(ProcessHandle)
如图,运行python程序后,CE教程第二关的数据被我们改为了1000,下一步也变为可点击状态,至此第二关通过。
Q群:307531422
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。