获取或修改指定进程ID的内存数据

文章原地址:http://www.bytekits.com

 

在进程ID已知的前提下,如何获取该进程在内存中的数据,下面提供一种方法。

 
  1. void GetProcessMemory(ULONG PID,,PVOID PVOID pRaddAddr)
  2. {
  3.  
  4. PROCESS_INFORMATION pi;
  5. ZeroMemory(&pi, sizeof(pi));
  6. pi.dwProcessId = PID;
  7.  
  8. HANDLE hProcess = OpenProcess(PROCESS_VM_OPERATION | PROCESS_VM_READ | PROCESS_CREATE_THREAD | PROCESS_VM_WRITE | PROCESS_QUERY_INFORMATION, FALSE, pi.dwProcessId);
  9. if (hProcess == NULL)
  10. {
  11. ::MessageBoxA(NULL,"openprocess error",  NULL, MB_OK);
  12. return;
  13. }
  14.  
  15. SIZE_T nRead;
  16. BOOL ISOK = ::ReadProcessMemory(hProcess, pRaddAddr, buff, sizeof(buff), &nRead);
  17. if (!ISOK)
  18. {
  19. ::MessageBoxA(NULL, "ReadProcessMemory error", NULL, MB_OK);
  20. CloseHandle(hProcess);
  21. return;
  22. }
  23.  
  24. //这里的数组缓冲区需要足够大,否则会产生缓冲区溢出
  25. char tmp[4096] = { 0 };
  26. int index = 0;
  27. if (nRead > 0)
  28. {
  29. for (SIZE_T i = 0; i < nRead; i++)
  30. {
  31. index += sprintf_s(tmp + index,128, "%02X ", buff[i]);
  32. }
  33. }
  34. else
  35. {
  36. ::MessageBoxA(NULL, "no date to read error", NULL, MB_OK);
  37. }
  38.  
  39. CloseHandle(hProcess);
  40. }

当然也可以使用WriteProcessMemory来重入进程内存。

注意:打开进程需要足够的权限,否则OpenProcess会失败,可提高本进程的权限或本进程以高权限运行。

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

站长漫谈

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值