如何使用python读写游戏内存以及使用特征码匹配基址

一.读写内存所需的基本参数

接下来我将使用GTA5游戏举例

1.通过进程名称获取进程pid

from psutil import process_iter

def get_process_id_by_name(process_name):
    for process in process_iter(["pid", "name"]):
        if process.info["name"] == process_name:
            return process.info["pid"]
    return None

 注意进程名称游戏名称不一样,如下:

GTA5.exe是它的进程名称Grand Theft Auto V则是它的游戏名称,在这里我们获取它的pid的使用的是进程名,也就是 GTA5.exe

 2.通过pid获取进程句柄

我们要读写某个进程的时候,都必须先获取它的句柄,在python里面可以使用ctypes完成这一功能,代码如下:

import ctypes

PROCESS_ALL_ACCESS = 0x1F0FFF

#获取句柄
process = ctypes.windll.kernel32.OpenProcess(PROCESS_ALL_ACCESS, False, pid)
#关闭句柄
ctypes.windll.kernel32.CloseHandle(process)

3.游戏基地址

ce里面显示的绿色的地址,都是游戏基地址+一些偏移量构成的地址,这些我们也可以称为基地址。如下所示:

所以图中的 GTA5.exe 则是游戏真正的基地址,那么加号后面的十六进制的数,就是偏移量。这种类型构成的地址都可以称为基地址,但是真正的基地址就一个 那就是 GTA5.exe  

这里ce没有显示GTA5.exe的地址,是因为ce自动给游戏基地址用进程名注册了符号,代替了它的地址。我们可以手动添加,看到GTA5.exe指代的地址具体是什么。如下所示:

 所以7FF7C3020000就是游戏的基地址,那我们如何使用python获取游戏的基地址呢?如下所示:

#方法一:使用win32api的库
import ctypes
from psutil import process_iter
from win32process import EnumProcessModules
from win32api import OpenProcess, CloseHandle

PROCESS_ALL_ACCESS = 0x1F0FFF

def get_base_address_by_pid(pid):
    try:
        process_handle = OpenProcess(PROCESS_ALL_ACCESS, False, pid)
        base_address = EnumProcessMo
评论 13
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值