读取任意进程内存

用进程快照信息找到进程,打开后读取内存,没什么技术含量。。



void CReadMemDlg::OnBtnRead() 
{
	UpdateData();
	void *nAddr;
	UINT nLen;
	sscanf(m_strAddr,"%x",&nAddr);
	sscanf(m_strLen,"%x",&nLen);

	HANDLE hSnapshot = CreateToolhelp32Snapshot(TH32CS_SNAPALL,0);
	if(hSnapshot == NULL) {
		AfxMessageBox("无法创建进程快照!");
		return;
	}
	PROCESSENTRY32 entry;
	entry.dwSize = sizeof(entry);
	BOOL bOK = Process32First(hSnapshot,&entry);
	DWORD id = 0;
	while(bOK) {
		if(entry.szExeFile == m_strProc) {
			id = entry.th32ProcessID;
			break;
		}
		bOK = Process32Next(hSnapshot,&entry);
	}
	CloseHandle(hSnapshot);
	if(!bOK) {
		AfxMessageBox("无法找到进程!");
		return;
	}
	HANDLE hProc = OpenProcess(PROCESS_ALL_ACCESS,FALSE,id);
	if(hProc == 0) {
		AfxMessageBox("无法打开进程!");
		return;
	}
	BYTE *pBuf = new BYTE[nLen];
	if(!ReadProcessMemory(hProc,nAddr,pBuf,nLen,NULL)) {
		AfxMessageBox("无法读取内存!");
		CloseHandle(hProc);
		return;
	}
	CloseHandle(hProc);
	m_strRes.Empty();
	for(int i=0;i<nLen;++i) {
		CString str;
		str.Format((i != nLen-1)? "%02X ": "%02X", UINT(pBuf[i]));
		m_strRes+=str;
	}
	UpdateData(FALSE);
}



评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值