当前位置: 首页 > news >正文

使用python编写游戏修改器

最近比较怀旧,在玩一个比较老的PC游戏。由于游戏难度太高了,于是就打算自己写一个修改器。

通过查阅资料,在 Windows 下的修改器主要需要用到四个函数:OpenProcess, CloseHandle, WriteProcessMemory, ReadProcessMemory。

这几个都是C++的函数,在Python中可以通过ctypes来直接调用。

然后接下来介绍一下基本的操作流程。


1.通过 任务管理器 或者其他方式得到需要修改的游戏进程。然后通过 OpenProcess 注入该进程。

PROCESS_QUERY_INFORMATION=0x0400PROCESS_VM_OPERATION=0x0008PROCESS_VM_READ=0x0010PROCESS_VM_WRITE=0x0020hProcess= ctypes.windll.kernel32.OpenProcess(PROCESS_QUERY_INFORMATION|PROCESS_VM_READ|PROCESS_VM_OPERATION|PROCESS_VM_WRITE,False, pid)

2.然后可以通过 ReadProcessMemory 来扫描游戏的内存找到需要修改的数值项的内存地址。

buf= ctypes.c_int32()nread= ctypes.c_size_t()ret= ctypes.windll.kernel32.ReadProcessMemory( hProcess, base_addr, ctypes.byref(buf), ctypes.sizeof(buf), ctypes.byref(nread))

这里是读取 base_addr 地址之后的4个字节的内容。可以通过循环来遍历游戏的内存,找到需要修改的地址。

当然,为了方便也可以直接使用 Cheat Engine 之类的软件来查找,然后把找到的内存地址记录下来即可。


3.得到需要修改的内存地址之后,就可以 WriteProcessMemory 来修改该地址保存的值。

buf= ctypes.c_int32(value)nread= ctypes.c_size_t()ret= ctypes.windll.kernel32.WriteProcessMemory( hProcess, base_addr, ctypes.byref(buf), ctypes.sizeof(buf), ctypes.byref(nwrite))

这里是往 base_addr 这个地址写入值为 value 的4字节内容。

4.最后如果不再需要修改了的话,就通过 CloseHandle 关闭该注入操作。

ctypes.windll.kernel32.CloseHandle(hProcess)


转载于:https://juejin.im/post/5beeb73351882548eb354e5a

相关文章:

  • 通过Eclipse 为java 项目生成Api 文档、JavaDoc
  • ios多个target
  • php去除html标签
  • 11月17日站立会议
  • angular搭建
  • 20172307 2018-2019-1 《程序设计与数据结构》第9周学习总结
  • .net core使用RPC方式进行高效的HTTP服务访问
  • 手机里删除的照片怎么恢复,如何恢复
  • Java并发编程之AQS
  • 浅谈常见的七种加密算法及实现
  • PHP消息队列学习
  • 实验05博客园总结
  • 华为S5700系列交换机配置通过Telnet登录设备
  • 4g伪基站如何实现的
  • logStash安装
  • .pyc 想到的一些问题
  • Git的一些常用操作
  • leetcode46 Permutation 排列组合
  • mac修复ab及siege安装
  • niucms就是以城市为分割单位,在上面 小区/乡村/同城论坛+58+团购
  • oldjun 检测网站的经验
  • react 代码优化(一) ——事件处理
  • UEditor初始化失败(实例已存在,但视图未渲染出来,单页化)
  • vue-router的history模式发布配置
  • 从地狱到天堂,Node 回调向 async/await 转变
  • 大型网站性能监测、分析与优化常见问题QA
  • 大主子表关联的性能优化方法
  • 构建二叉树进行数值数组的去重及优化
  • 记一次删除Git记录中的大文件的过程
  • 开发基于以太坊智能合约的DApp
  • 码农张的Bug人生 - 初来乍到
  • 如何实现 font-size 的响应式
  • 山寨一个 Promise
  • 思否第一天
  • 吐槽Javascript系列二:数组中的splice和slice方法
  • 写代码的正确姿势
  • # 执行时间 统计mysql_一文说尽 MySQL 优化原理
  • #1015 : KMP算法
  • #Linux(make工具和makefile文件以及makefile语法)
  • #stm32整理(一)flash读写
  • #Z0458. 树的中心2
  • $.type 怎么精确判断对象类型的 --(源码学习2)
  • (4)通过调用hadoop的java api实现本地文件上传到hadoop文件系统上
  • (PHP)设置修改 Apache 文件根目录 (Document Root)(转帖)
  • (Redis使用系列) Springboot 使用redis实现接口Api限流 十
  • (附源码)SSM环卫人员管理平台 计算机毕设36412
  • (附源码)计算机毕业设计高校学生选课系统
  • (每日持续更新)信息系统项目管理(第四版)(高级项目管理)考试重点整理 第13章 项目资源管理(七)
  • (七)理解angular中的module和injector,即依赖注入
  • (切换多语言)vantUI+vue-i18n进行国际化配置及新增没有的语言包
  • (算法)前K大的和
  • (算法)求1到1亿间的质数或素数
  • (一)WLAN定义和基本架构转
  • (转)http协议
  • (转)visual stdio 书签功能介绍