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

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

扫雷”高级”场是指

752.png

下面是OD和win98扫雷下载

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

立即学习“C++免费学习笔记(深入)”;

下面开始演示本次实验:

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

2.在WM_LBUTTONUP上设置断点

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

753.png

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

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

754.png

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

755.png

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

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

如下所示

756.png

下面是C/C++代码

#include   #include     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 

以上就是 C/C++之win98扫雷外挂基础篇的内容,更多相关内容请关注PHP中文网(www.php.cn)!

登录后复制

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌抄袭侵权/违法违规的内容, 请发送邮件至253000106@qq.com举报,一经查实,本站将立刻删除。

发布者:PHP中文网,转转请注明出处:https://www.chuangxiangniao.com/p/2552059.html

(0)
上一篇 2025年3月6日 06:21:55
下一篇 2025年2月27日 12:17:40

AD推荐 黄金广告位招租... 更多推荐

发表回复

登录后才能评论