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

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

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

一、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];   // 存放查找到

### 回答1: WriteProcessMemory是一个Windows API函数,用于向指定进程的内存中写入数据。它需要四个参数:进程句柄、目标内存地址、要写入的数据、以及要写入的数据大小。使用该函数需要先打开目标进程,获取其句柄,然后才能进行内存写入操作。该函数通常用于修改其他进程的内存数据,例如修改游戏进程的内存值来实现作弊等功能。 ### 回答2: WriteProcessMemory 是一个 Windows 系统函数,用于将数据写入另一个进程的内存中。它的使用方法主要包括以下几个步骤: 第一步,使用 OpenProcess 函数打开需要写入内存的目标进程。OpenProcess 函数通过传入进程ID和访问权限等参数,返回一个进程句柄。 第二步,将需要写入的数据准备好,通常是将数据存储在一个缓冲区中。 第三步,使用 WriteProcessMemory 函数将准备好的数据写入到目标进程的内存中。WriteProcessMemory 函数需要传入目标进程的句柄、写入内存的起始地址、数据缓冲区的指针以及数据的大小。 第四步,使用 CloseHandle 函数关闭之前打开的进程句柄,释放资源。 WriteProcessMemory 函数的返回值为布尔类型,当写入操作成功时返回非零值,否则返回 0。可以通过检查返回值来判断写入是否成功。 需要注意的是,使用 WriteProcessMemory 函数需要特权,因此通常需要以管理员权限运行程序。此外,由于涉及跨进程操作,对于一些内核保护的进程可能会遇到访问权限的限制,并且滥用该函数可能导致系统崩溃或程序异常。 总之,WriteProcessMemory 是一个用于在 Windows 系统中将数据写入其他进程内存的函数,需要经过打开进程、准备数据、写入数据和关闭句柄等多个步骤。要注意权限和保护机制,谨慎使用该函数。 ### 回答3: writeprocessmemoryWindows操作系统中的一个函数,用于在一个进程中向指定内存地址写入数据。以下是writeprocessmemory函数的用法: 首先,需要获取目标进程的句柄,可以使用openprocess函数来打开一个进程,并获取进程句柄。openprocess函数的参数包括所需的访问权限和目标进程的ID。 接下来,需要使用virtualallocex函数在目标进程的虚拟地址空间中分配一块内存,作为写入数据的目标地址。可以指定内存的大小和访问权限。 然后,可以使用writeprocessmemory函数来向目标地址写入数据writeprocessmemory函数的参数包括目标进程的句柄、目标地址、要写入的数据、写入的数据大小以及一个指向实际写入的数据大小的指针。在函数调用后,指针所指向的变量将包含实际写入的数据大小。 最后,可以使用virtualfreeex函数来释放之前分配的内存。virtualfreeex函数的参数包括目标进程的句柄和要释放的内存地址。 需要注意的是,使用writeprocessmemory函数需要管理员权限,因为它需要对其他进程进行写操作。此外,使用writeprocessmemory函数需要谨慎处理,以免对其他进程造成不必要的影响或安全问题。 总之,writeprocessmemory是一个用于在目标进程中向指定内存地址写入数据的函数。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值