• 欢迎访问搞代码网站,推荐使用最新版火狐浏览器和Chrome浏览器访问本网站!
  • 如果您觉得本站非常有看点,那么赶紧使用Ctrl+D 收藏搞代码吧

C/C++之win98扫雷外挂基础篇

c# 搞代码 4年前 (2022-01-09) 16次浏览 已收录 0个评论

本次以win98扫雷"高级"场为例子的基础篇代码,稍后会写出所有场通用篇

扫雷"高级"场是指

下面是OD和win98扫雷下载

链接:http://pan.baidu.com/s/1gfA10K7 密码:eiqp

下面开始演示本次实验:

1.打开OD后,把winmine.exe拖入OD

2.在WM_LBUTTONUP上设置断点

3.然后单步步过到此位置

在注释为消息处理(地址为01001FE1)跟随

4.跟随后我们在此处可以找到棋盘数据

提取当前位置的数据如下:

我们就知道地址010055330前双字为0x63(十进制为99)这表示雷数,后面双字分别是宽度和高度,0x10表示棋盘的边,0x8F表示雷

所以我们只要检索此段内存0x8F,并且把他改成0x8E(标志为红旗),就成功了

如下所示

下面是C/C++代码

#include <windows.h>  #include <stdio.h>    int main()  {      HWND hWinmine = FindWindow(NULL, L"扫雷");      DWORD dwPID = 0;      GetWindowThreadProcessId(hWinmine, &dwPID);      HANDLE hProcess = OpenProcess(PROCESS_ALL_ACCESS, false, dwPID);        //基础地址、雷数、宽度、高度      DWORD dwBaseAddr = 0x01005330;      DWORD dwNum = 0, dwWidth = 0, dwHight = 0, dwSize = 0;          //读取内存信息      //读进程的内存空间数据      //参数:第1个参数:    HANDLE hProcess进程句柄。      //第2个参数:    LPCVOID lpBaseAddress基址指针。      //第3个参数:    LPVOID lpBuffer接收数据缓冲区指针。      //第4个参数:    DWORD nSize接收数据缓冲区缓冲区大小。      //第5个参数:    LPDWORD lpNumberOfBytesRead读入数据量大小指针。            返回值:       成功:TRUE          失败:FALSE      ReadProcessMemory(hProcess, (LPVOID)dwBaseAddr, &dwNum, sizeof(DWORD), &dwSize);      ReadProcessMemory(hProcess, (LPVOID)(dwBaseAddr +0x4), &dwWidth, sizeof(DWORD), &dwSize);      ReadProcessMemory(hProcess, (LPVOID)(dwBaseAddr + 0x8), &dwHight, sizeof(DWORD), &dwSize);        //棋盘总大小=棋盘+空白边+4角      DWORD dwReadsize = dwWidth*dwHight + dwHight * 2 + dwWidth * 2 + 4;      PBYTE pByte = new BYTE[dwReadsize];            ReadProcessMemory(hProcess, (LPVOID)(dwBaseAddr + 0x16), pByte, dwReadsize, &dwSize);        BYTE bClear = 0x8E;      for (size_t i = 0; i < dwReadsize; i++)      {          if (pByte[i] == 0x8F)          {              WriteProcessMemory(hProcess, (LPVOID)(dwBaseAddr + 0x16 + i), &bClear, sizeof(BYTE), &dwSize);          }      }      //函数功能:       得到窗体客户区的大小。      //第1个参数:    HWND hWnd窗体句柄。      //第2个参数:    LPRECT lpRect客户区RECT结构的指针。      RECT rt = { 0 };      GetClientRect(hWinmine, &rt);          InvalidateRect(hWinmine, &rt, true);//这个函数屏蔽一个窗口客户区的全部或部分区域。这会导致窗口在事件期间部分重画      delete pByte;      CloseHandle(hProcess);      getchar();      return 0;        }

以上就是 C

本文来源gaodai.ma#com搞#代!码网_

/C++之win98扫雷外挂基础篇的内容,更多相关内容请关注搞代码(www.gaodaima.com)!


搞代码网(gaodaima.com)提供的所有资源部分来自互联网,如果有侵犯您的版权或其他权益,请说明详细缘由并提供版权或权益证明然后发送到邮箱[email protected],我们会在看到邮件的第一时间内为您处理,或直接联系QQ:872152909。本网站采用BY-NC-SA协议进行授权
转载请注明原文链接:C/C++之win98扫雷外挂基础篇

喜欢 (0)
[搞代码]
分享 (0)
发表我的评论
取消评论

表情 贴图 加粗 删除线 居中 斜体 签到

Hi,您需要填写昵称和邮箱!

  • 昵称 (必填)
  • 邮箱 (必填)
  • 网址