Win32 API(读写内存)

本次实验  使用windows API  访问进程内存

涉及以下几个函数

根据类名 或者 标题名 寻找窗口句柄
FindWindowA
根据窗口句柄 获取进程PID和线程TID
GetWindowThreadProcessId();
根据进程皮带 获取进程句柄
OpenProcess();  
打开进程句柄后  用完了记得释放
CloseHandle();
根据进程句柄 读进程内存
ReadProcessMemory();
根据进程句柄 写进程内存
WriteProcessMemory();

创建远程线程  在其它进程地址空间中运行的线程
CreateRemoteThread();

实验代码如下

#include <iostream>
#include <windows.h>
int main()
{
	//根据类名 或者 标题名 寻找窗口句柄   名字可能会变 最好用类名查找
	HWND handle=FindWindowA( 
		NULL						//输入类名   查找窗口句柄
		,"计算器");					//输入标题名 查找窗口句柄
	printf("窗口句柄:%p \n",handle);

	DWORD pid, tid;
	//根据窗口句柄 获取进程PID和线程TID
	tid = GetWindowThreadProcessId(handle,&pid); //  传入窗口句柄  PID 传入&pid   TID 传入tid ,第二个参数是输出参数
	
	//根据进程皮带 获取进程句柄
	HANDLE Phandle = OpenProcess(
		PROCESS_ALL_ACCESS			//想要拥有的权限
		,0							//是否继承句柄
		,pid						//PID
	);  

	//打开进程句柄后  用完了记得释放
	//CloseHandle(Phandle);

	//根据进程句柄 读进程内存
	unsigned int redbuff = 0;
	ReadProcessMemory(
		Phandle						//进程句柄	
		,(LPCVOID)0x401000			//想要读取的地址
		,&redbuff					//读取后 存放的地址
		,4							//读取多少字节
		,0							//输出参数 实际读取的字节数
	);

	//根据进程句柄 写进程内存
	unsigned int wrtbuff = 10;
	WriteProcessMemory(
		Phandle						//进程句柄
		,(LPVOID)0x401000			//想要写入的地址
		,&wrtbuff					//想要写入的值
		,4							//写多少个字节
		,NULL						//输出参数 实际写入的字节数
	);

	//创建远程线程 创建一个在其它进程地址空间中运行的线程
	CreateRemoteThread(
		,Phandle					//进程句柄
		,NULL						//安全属性
		,0							//新开线程的堆栈大小
		,0x410000					//线程创建后 调用函数的地址
		,0							//调用函数的参数
		,0							//线程创建后 立即运行还是挂起
		,NULL						//输出参数
		,0);
	);
	return 0;
}

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值