使用Python学习win32库进行内存读写
前言:
上一周,在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学习win32库进行内存读写的更多相关文章
- python 学习jieba库遇到的问题及解决方法
昨天在课堂上学习了jieba库,跟着老师写了同样的代码时却遇到了问题: jieba分词报错AttributeError: module 'jieba' has no attribute 'cut' 文 ...
- Python学习-第三方库操作
2018-05-04 12:03:19 Python安装模块,更新模块 #显示模块 pip list #显示过期模块 pip list --outdated #安装模块 pip install x ...
- python学习之输出与文件读写
#1. 打印字符串print ("His name is %s"%("Aviad")) #2.打印整数print ("He is %d years o ...
- Python学习第三方库Requests: 让 HTTP 服务人类
转自官方文档:http://cn.python-requests.org/zh_CN/latest/ 快速上手 http://cn.python-requests.org/zh_CN/latest/u ...
- 使用python的ctypes库实现内存的动态申请和释放
1.申请前内存占用情况 2.申请内存 from ctypes import * import time #在这里申请1G的内存,单位k mem = create_string_buffer(1024* ...
- Python学习--- requests库中文编码问题
为什么会有ISO-8859-1这样的字符集编码 requests会从服务器返回的响应头的 Content-Type 去获取字符集编码,如果content-type有charset字段那么request ...
- [python 学习] requests 库的使用
1.get请求 # -*- coding: utf-8 -*- import requests URL_IP = "http://b.com/index.php" pyload = ...
- 转载-Python学习笔记之文件读写
Python 文件读写 Python内置了读写文件的函数,用法和C是兼容的.本节介绍内容大致有:文件的打开/关闭.文件对象.文件的读写等. 本章节仅示例介绍 TXT 类型文档的读写,也就是最基础的文件 ...
- Python学习(九)IO 编程 —— 文件读写
Python 文件读写 Python内置了读写文件的函数,用法和C是兼容的.本节介绍内容大致有:文件的打开/关闭.文件对象.文件的读写等. 本章节仅示例介绍 TXT 类型文档的读写,也就是最基础的文件 ...
随机推荐
- Agumaster添加股票日交易爬虫画面
- 吴恩达《深度学习》-课后测验-第一门课 (Neural Networks and Deep Learning)-Week 2 - Neural Network Basics(第二周测验 - 神经网络基础)
Week 2 Quiz - Neural Network Basics(第二周测验 - 神经网络基础) 1. What does a neuron compute?(神经元节点计算什么?) [ ] A ...
- [LeetCode]198. 打家劫舍(DP)
题目 你是一个专业的小偷,计划偷窃沿街的房屋.每间房内都藏有一定的现金,影响你偷窃的唯一制约因素就是相邻的房屋装有相互连通的防盗系统,如果两间相邻的房屋在同一晚上被小偷闯入,系统会自动报警. 给定一个 ...
- [06] 优化C#服务器的思路和工具的使用
优化C#服务器的思路和工具的使用 优化服务器之前, 需要先对问题的规模做合理的预估, 然后对关键的数据做采样, 做对比, 看和自己的预估是否一致, 误差大在什么地方, 是预估的不对, 还是系统实现有问 ...
- day51:django:dispatch&模板渲染&过滤器&标签&组件&静态文件配置
目录 1.dispatch 2.模板渲染 3.过滤器 4.标签 5.组件 6.静态文件配置 dispatch 回顾:CBV对应的URL传参 urls.py url(r'^book/(\d+)/(\d+ ...
- 分布式系统监视zabbix-安装
zabbix概述 Zabbix是什么 Zabbix 是由Alexei Vladishev创建,目前由Zabbix SIA在持续开发和支持. Zabbix 是一个企业级的分布式开源监控方案. Zabbi ...
- day56:django:csrf_token&文件上传
目录 1.csrf介绍 2.django实现csrf_token认证 3.django实现文件上传 csrf介绍 什么是csrf? csrf:跨站请求伪造.攻击者通过HTTP请求将数据传送到服务器,从 ...
- 面试题总结:可能是全网最好的MySQL重要知识点
标题有点标题党的意思,但希望你在看了文章之后不会有这个想法--这篇文章是作者对之前总结的 MySQL 知识点做了完善后的产物,可以用来回顾MySQL基础知识以及备战MySQL常见面试问题. 什么是My ...
- Oracle学习(一)SQL基础
一.认识SQL SQL是什么? SQL,结构化查询语言,全称是 Structured Query Language. SQL 是一门 ANSI(American National Standards ...
- 12.深入k8s:kubelet创建pod流程源码分析
转载请声明出处哦~,本篇文章发布于luozhiyun的博客:https://www.luozhiyun.com 源码版本是1.19 在上一篇中,我们知道在kubelet中,工作核心就是围绕着整个syn ...