鱼C论坛

 找回密码
 立即注册
查看: 4705|回复: 2

关于ReadProcessMemory函数的小问题

[复制链接]
发表于 2018-4-28 02:32:46 | 显示全部楼层
无标题.png

附上代码,自行研究
  1. #include <iostream>
  2. #include <windows.h>
  3. #include <tlhelp32.h>
  4. #include <cstdarg>

  5. UINT32 ReadAddress_4Byte(HANDLE hProcess, UINT32 BaseAddress)
  6. {
  7.         UINT32 data;
  8.         SIZE_T NumberOfBytesRead;

  9.         ReadProcessMemory(hProcess, (LPCVOID)BaseAddress, &data, 4, &NumberOfBytesRead);
  10.         return data;
  11. }

  12. void WriteAddress_4Byte(HANDLE hProcess, UINT32 BaseAddress, UINT32 data)
  13. {
  14.         SIZE_T NumberOfBytesWritten;

  15.         WriteProcessMemory(hProcess, (LPVOID)BaseAddress, &data, 4, &NumberOfBytesWritten);
  16. }

  17. DWORD GetProcessIdByName(std::string ProcessName)
  18. {
  19.         DWORD dwProcessId = 0;
  20.         PROCESSENTRY32 pe32;
  21.         HANDLE hProcessSnap = CreateToolhelp32Snapshot(TH32CS_SNAPPROCESS, 0);

  22.         pe32.dwSize = sizeof(PROCESSENTRY32);
  23.         Process32First(hProcessSnap, &pe32);

  24.         do
  25.         {
  26.                 if(ProcessName == pe32.szExeFile)
  27.                 {
  28.                        
  29.                         dwProcessId = pe32.th32ProcessID;
  30.                         break;
  31.                 }
  32.         }
  33.         while(Process32Next(hProcessSnap, &pe32));

  34.         CloseHandle(hProcessSnap);
  35.         return dwProcessId;
  36. }

  37. UINT32 GetAddress(HANDLE hProcess, UINT32 base, int level, ...)
  38. {
  39.         va_list ap;

  40.         UINT32 address = base;
  41.         UINT32 offset;
  42.         address = ReadAddress_4Byte(hProcess, address);

  43.         va_start(ap, level);
  44.         for(int i = 0; i < level - 1; ++i)
  45.         {
  46.                 address = ReadAddress_4Byte(hProcess, address + va_arg(ap, UINT32));
  47.         }
  48.         offset = va_arg(ap, UINT32);
  49.         va_start(ap, level);

  50.         return address + offset;
  51. }

  52. int main()
  53. {
  54.         DWORD dwProcessId = GetProcessIdByName("PlantsVsZombies.exe");
  55.         if(dwProcessId == 0)
  56.                 return 0;

  57.         HANDLE hProcess = OpenProcess(PROCESS_QUERY_INFORMATION | PROCESS_VM_OPERATION | PROCESS_VM_READ | PROCESS_VM_WRITE, 0, dwProcessId);
  58.        

  59.         UINT32 address;
  60.         address = GetAddress(hProcess, 0x5aa054, 5, 0x3a4, 0x10, 0x230, 0x50, 0x80);
  61.         UINT32 data = ReadAddress_4Byte(hProcess, address);
  62.         WriteAddress_4Byte(hProcess, address, data - 100);
  63.        
  64.         CloseHandle(hProcess);
  65.         return 0;
  66. }
复制代码
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

小黑屋|手机版|Archiver|鱼C工作室 ( 粤ICP备18085999号-1 | 粤公网安备 44051102000585号)

GMT+8, 2025-10-27 03:44

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

快速回复 返回顶部 返回列表