读取与修改其他程序的数据Read/WriteProcessMemory

本文介绍如何在Windows环境下使用ReadProcessMemory和WriteProcessMemory函数来读取和修改其他程序的数据。通过创建子进程,获取读权限的句柄,遍历目标进程内存,搜索并修改指定值。程序示例包括查找、比较内存页和更新内存操作。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

要修改或读取其他进程的数据,首先要知道几个知识:

一、1.windows系统为每个程序分配4GB的虚拟内存,虚拟内存由“页文件”实现。

      2.每个程序的4GB空间的前2GB是程序的私有空间,后2GB是系统的空间。

      3.每个页文件4KB。

      4.在程序私有的2GB中,windows 98系列的系统的程序的可用地址为4MB--2GB

                                       windows 2000系列的系统的程序的可用地址为64KB--2GB

         因此还需要先判别程序运行的操作系统。

二、1.查阅MSDN可知,Read/WriteProcessMemory都需要一定的权限,

         因此打开句柄时必须赋予相应权限。

 

这个程序是《Windows程序设计》——王艳平著的第二章的一个程序

程序的具体实现过程是:

     创建一个子进程执行一个自己写的测试程序,

     然后得到有读权限的子进程的句柄,搜索要改的数据的内存,最后修改。

 

原程序稍有错误,原程序没有取得读和写权限,所以GetLastError会返回998——内存位置访问无效。

                                                                                               和5——拒绝访问。  

 

修改后程序正确执行,但是在读取一些不可用内存地址时会有229错误(会有很多,是正常的)

——仅完成部分的 ReadProcessMemory 或WriteProcessMemory 请求。

 

 

修改后的源代码如下:

/****以下是02MemRepair.cpp中的代码****/

#include <stdio.h>
#include <windows.h>

BOOL FindFirst(DWORD dwValue); // 在目标进程空间进行第一次查找
BOOL CompareAPage(DWORD dwBaseAddr,DWORD dwValue);// 比较目标进程内存一页中比较
BOOL FindNext(DWORD dwValue); // 在目标进程空间进行第二三四查找
void ShowList();    // 打印搜索出的地址
DWORD g_arList[1024];   // 存放查找到

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值