使用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 类型文档的读写,也就是最基础的文件 ...
随机推荐
- Eclipse获取工作空间跟运行空间
System.out.println(System.getProperty("user.dir"));//当前工作空间 System.out.println(Platform.ge ...
- 通过调用标识符确定this
一. 纲 this的性质 作用:表示函数执行时的环境 值:一个对象 特点:动态性 确定this的难度 JS语言的动态性: 函数的this在执行时才能确定 函数为一级公民 可作实参.返回值.数据赋值进行 ...
- python3 变量
python 3变量名不能以数字开头但能数字结尾 变量名大小写敏感 在多个单词组成的变量名中以下划线间隔
- 一条 SQL 引发的事故,同事直接被开除!!
前言 Insert into select请慎用. 这天xxx接到一个需求,需要将表A的数据迁移到表B中去做一个备份.本想通过程序先查询查出来然后批量插入.但xxx觉得这样有点慢,需要耗费大量的网络I ...
- 小程序开发-iView Weapp微信小程序UI组件库入门使用
iView Weapp UI组件库 今天来试试iView Weapp 这个微信小程序组件库,看看好不好用~~ 官网地址: http://inmap.talkingdata.com/wx/index_p ...
- python的循环结构
遍历循环 计数循环(N次)/(特定次)/字符串遍历循环 列表遍历循环/文件遍历循环......字典遍历循环等等 例子--计数循环 输出从1到6的整数,以2为步长 字符串遍历循环 列表遍历循环 文件遍历 ...
- 关于KeePass基于csv格式的批量导入与导出
在KeePass的导出选项中,有一个KeePass CSV(1.x),导出后格式如下: "Account","Login Name","Passwor ...
- Android如何使用注解进行代码检查
原文首发于微信公众号:躬行之(jzman-blog),欢迎关注交流! Android Studio 内置了代码检查工具 Lint,可在菜单栏选择 Analyze > Inspect Code 执 ...
- Android作业 0923
计算器小应用 package com.example.myhomework2; import androidx.appcompat.app.AppCompatActivity; import andr ...
- Mac OS X中Apache开启ssl
升级ios7.1之后用那个企业证书打测试包网页上不能下载,提示Mainfest.plist需要用https,然后就看了下Apache的https的设置,虽然后来还是不行,先略下不表,下文再说,把这个过 ...