前言:

上一周,在52的精华帖中,看到有位大佬用Python制作了鬼泣5的修改器,看完才知道,原来Python也可以对内存进行操作,出于对技术的好奇,看完以后,决定自己也尝试一下。

要用到的工具:

CE,Ollybdg,

用Python,读取这款游戏中,人物的血量。

先打开游戏吧,打开CE,对游戏附加。

输入199在输入框中,先进行一次扫描

接着去打怪,扣血以后在进行一次扫描

等一会,人物会自动回血,然后你会神奇的发现,这两个数据中有一个的数值会变成199,然后上次数值哪里显示198,那就是我们要找的数据

26B871F0

打开OD,把地址放在里面搜索,断点,然后使用巴拉拉魔法力量,找出偏移量

[[[[D0DF1C]+1C]+28]+288]

……………………………………………………………………………………………………………………………………………………………

现在开始进入Python

要进行32位的读写,首先了解一下要用到的几个函数,通过百度找到的,大多都是C/C++的资料。

FindWindowA在Python中为FindWindow

FindWindow这个函数检索处理顶级窗口的类名和窗口名称匹配指定的字符串。这个函数不搜索子窗口。

HWND FindWindowA(

LPCSTR lpClassName,//窗口类名

LPCSTR lpWindowName//窗口名称,例如计算器

);

GetWindowThreadProcessId

在得到窗口句柄后我们可以通过GetWindowThreadProcessId这个函数来获得窗口所属进程ID和线程ID,从而判断创建窗口的进程和线程。

DWORD GetWindowThreadProcessId(

HWND hWnd, //传入的窗口句柄

LPDWORD lpdwProcessId //返回的进程ID地址。

);

OpenProcess

OpenProcess 函数用来打开一个已存在的进程对象,并返回进程的句柄。

HANDLE OpenProcess(

DWORD dwDesiredAccess, //想拥有的该进程访问权限

BOOL bInheritHandle,//表示所得到的进程句柄是否可以被继承

DWORD dwProcessId//被打开进程的PID

);

ReadProcessMemory

是一个内存操作函数, 其作用为根据进程句柄读入该进程的某个内存空间;函数原型为BOOL. 当函数读取成功时返回1, 失败则返回0

BOOL ReadProcessMemory(

HANDLE hProcess, //进程句柄

LPCVOID lpBaseAddress,//读出数据的地址

LPVOID lpBuffer,//存放读取数据的地址

SIZE_T nSize,//读出的数据大小

SIZE_T *lpNumberOfBytesRead//数据的实际大小

);

首先导入模块

# -*- coding: utf-8 -*-

import win32process#进程模块

from win32con import PROCESS_ALL_ACCESS #Opencress 权限

import win32api#调用系统模块

import ctypes#C语言类型

from win32gui import FindWindow#界面

对游戏的一个读操作,读取血量。

def GetProcssID(address,bufflength):

pid = ctypes.c_ulong() // 设置 pid 为 无符号单精度类型

kernel32 = ctypes.windll.LoadLibrary("kernel32.dll")//加载动态链接库

hwnd = FindWindow("XYElementClient Window", u"口袋西游")//获取窗口句柄

hpid, pid = win32process.GetWindowThreadProcessId(hwnd)//获取窗口ID

hProcess = win32api.OpenProcess(PROCESS_ALL_ACCESS, False, pid)//获取进程句柄

ReadProcessMemory = kernel32.ReadProcessMemory

addr = ctypes.c_ulong()

ReadProcessMemory(int(hProcess), address, ctypes.byref(addr), bufflength, None)//读内存

win32api.CloseHandle(hProcess)//关闭句柄

return addr.value

def main():

addr = GetProcssID(0xD0DF1C, 4)

ret = addr + 0x1C

ret2 = GetProcssID(ret, 4)

ret3 = ret2 + 0x28

ret4 = GetProcssID(ret3, 4)

ret5 = ret4 + 0x288

ret6 = GetProcssID(ret5, 4) // 传入偏移地址

print ("Hp:%d" % ret6)

if __name__ == '__main__':

main()

ReadProcessMemory(int(hProcess), address, ctypes.byref(addr), bufflength, None)

参数解析:1.传入进程句柄 2.地址,就是血量的地址,那几条偏移. 3. 第三个要传入指针 。4.长度

运行结果:

python 读取内存_使用Python学习win32库进行内存读写相关推荐

  1. 用python读取股票价格_使用Python写一个量化股票提醒系统

    大家在没有阅读本文之前先看下python的基本概念, Python是一种解释型.面向对象.动态数据类型的高级程序设计语言. Python由Guido van Rossum于1989年底发明,第一个公开 ...

  2. python读取枚举_在python中枚举(enumerate in python)

    在python中枚举(enumerate in python) 说, term='asdf'; InvertedIndex = {}; InvertedIndex[term] = [1,2,2,2,4 ...

  3. python有哪些库可以读写内存_使用Python学习win32库进行内存读写

    前言: 上一周,在52的精华帖中,看到有位大佬用Python制作了鬼泣5的修改器,看完才知道,原来Python也可以对内存进行操作,出于对技术的好奇,看完以后,决定自己也尝试一下. 要用到的工具: C ...

  4. 使用Python学习win32库进行内存读写

    前言: 上一周,在52的精华帖中,看到有位大佬用Python制作了鬼泣5的修改器,看完才知道,原来Python也可以对内存进行操作,出于对技术的好奇,看完以后,决定自己也尝试一下. 要用到的工具: C ...

  5. abaqus python 读取文件_利用Python修改Abaqus的inp文件(关键字)

    利用Python修改Abaqus的inp文件(关键字) Abaqus的关键字可以直接打开inp文件或者在Abaqus的key word里面直接修改,当然除了这个,还可以利用Python语言进行修改,也 ...

  6. 用python读取股票价格_借助Python获取股票实时价格的操作方法

    今天和大家分享一下使用Python获取股票实时价格的操作方法. 工具/原料 Python软件 可以联网的电脑 方法/步骤 1 要想获取股票数据,我们需要借助第三方模块.我们首先需要打开开始菜单. 2 ...

  7. abaqus python 读取文件_通过Python脚本从Abaqus中的excel文件导入幅度数据

    我在从excel文件导入幅度数据时在Abaqus中创建了以下宏.然后尝试运行此脚本以从同一个excel文件创建另一个幅度但不幸的是,我有以下错误.在这方面有人可以帮助我吗? 脚本: # Do not ...

  8. python 时间序列预测_使用Python进行动手时间序列预测

    python 时间序列预测 Time series analysis is the endeavor of extracting meaningful summary and statistical ...

  9. python 概率分布模型_使用python的概率模型进行公司估值

    python 概率分布模型 Note from Towards Data Science's editors: While we allow independent authors to publis ...

最新文章

  1. 转载:vs2010 问题 LINK : fatal error LNK1123: 转换到 COFF 期间失败: 文件无效或损坏
  2. mysql命令行查看端口占用_linux下常用命令查看端口占用
  3. messagebox 全部使用_「一」Windows API 零门槛编程指南——MessageBox
  4. java catch getm_Java------异常处理机制
  5. 64win7+64Oracle+32plsql
  6. Oracle按用户进行统计信息更新
  7. mpvue 从零开始 女友的来电 4 flyio
  8. apache大师+伪静态_Apache开启伪静态示例
  9. 超详细!一文告诉你 SparkStreaming 如何整合 Kafka !附代码可实践
  10. docker 安装 mysql 并映射数据库存放路径及配置文件
  11. 使用setCustomView建立标题居中的自定义ActionBar
  12. 深入玩转K8S之智能化的业务弹性伸缩和滚动更新操作
  13. fate框架找不到 flow 命令
  14. SQL-Server2008数据库异常报错
  15. SqlDataReader.GetFloat出错,类型无法转换
  16. gis统计百分比_ArcGIS数据统计
  17. 【矢量分析】工科矢量分析公式大全
  18. 从辉煌到困局,奥康还能不能绝地反击?
  19. Python---贪心的狗熊
  20. 漫谈阿里那些大数据技术,大数据学习者必看

热门文章

  1. 使用NTP协议获取网络时间代码
  2. JVM篇·垃圾收集器与内存分配策略
  3. libudev-dev安装错误libudev1 (= 241-7~deb10u7) but 241-7~deb10u6解决
  4. 计算机控制系统开发,浓密过程计算机控制系统设计与开发
  5. JS sort函数(按照首字母字符排序)
  6. 项目经理如何做好项目进度管理
  7. OAuth 2.0 笔记 (1) 世界观
  8. mysql mooc_爬取MOOC课程(1)
  9. ZZULIOJ 1787 生化危机 (vector+DFS)
  10. dnf服务器合并信息,DNF最大改动 全服合并9个大区 频道过百