- 注册时间
 - 2021-4-16
 
- 最后登录
 - 2023-6-21
 
- 在线时间
 - 2 小时
 
 
 
 
 
编程入门 
  
	- 龙马币
 - 38 
 
 
 
 
 | 
 
原理: 
微软提供的内存WriteWatch跟踪技术, 
对于申请为MEM_WRITE_WATCH的内存, 
可以监控内存变更(包括外界变更)。 
 
举例代码:仅仅是举个例子 
- #include <windows.h>
 
 - #include <stdio.h>
 
 -  
 
 - typedef struct _POSITION_
 
 - {
 
 -     DWORD dx;
 
 -     DWORD dz;
 
 -     DWORD dy;
 
 - }POSITION,*PPOSITION;
 
 -  
 
 - #define BASE_SIZE 0x1000
 
 - #define WALK_ADD 10
 
 - DWORD WINAPI WatchThread(LPVOID Param)
 
 - {
 
 -     ULONG size = 0;
 
 -     DWORD p = 0;
 
 -     UINT  Ret = 0;
 
 -     PVOID px[0x400] = { 0 };
 
 -     while (1)
 
 -     {
 
 -         size = 0x400;
 
 -         p = 0;
 
 -         Ret = GetWriteWatch(WRITE_WATCH_FLAG_RESET, Param, BASE_SIZE, px, &size, &p);
 
 -         if (Ret == 0
 
 -             && size != 0)
 
 -         {
 
 -             MessageBoxW(NULL, L"发现第三方软件修改关键内存", L"发现第三方软件", MB_OK);
 
 -         }
 
 -     }
 
 -     return 0;
 
 - }
 
 - int __cdecl main(int argc, char *argv[])
 
 - {
 
 -     //申请Base基址内存
 
 -     PVOID Base = VirtualAlloc(NULL, BASE_SIZE, MEM_RESERVE | MEM_COMMIT | MEM_WRITE_WATCH, PAGE_READWRITE);
 
 -     PPOSITION pos = (PPOSITION)Base;
 
 -     //初始化坐标
 
 -     pos->dx = pos->dy = pos->dz = 1000;
 
 -     //清空监控记录
 
 -     ResetWriteWatch(Base, BASE_SIZE);
 
 -     //开启监控线程
 
 -     HANDLE hThread = CreateThread(NULL, 0, WatchThread, Base, 0, NULL);
 
 -     while (1)
 
 -     {
 
 -         //暂停监控线程
 
 -         SuspendThread(hThread);//也可以通过其他方式进行!!!!暂停线程只是简单模型
 
 -         //模拟走路过程
 
 -         pos->dx += WALK_ADD;
 
 -         //继续监控
 
 -         ResetWriteWatch(Base, BASE_SIZE);
 
 -         ResumeThread(hThread);
 
 -         //输出X坐标
 
 -         printf("x = %d\n", pos->dx);
 
 -         Sleep(1000);
 
 -     }
 
 -     return 0;
 
 - }
 
  复制代码 
 |   
 
 
 
 |