扫雷辅助
菜单栏辅助器的实现
熟悉消息处理函数的四个参数
LRESULT CALLBACK WindowProc(
HWND hwnd, // 指向窗口的句柄。
UINT uMsg, //指定消息类型。
WPARAM wParam, // 指定其余的、消息特定的信息。该参数的内容与UMsg参数值有关。
LPARAM lParam //指定其余的、消息特定的信息。该参数的内容与uMsg参数值有关。
)
首先用OD进行调试选中查看-->窗口
跳转到这个界面后找到消息处理函数
然后右击选中跟随ClassProc
跳转到消息处理函数后,找到第二个参数(ebp+0xc)
然后在第二个参数下一行选中断点-->条件
对当行下一个WM_COMMAND的消息断点,然后运行对菜单栏进行操作看是否断下了
断下了后找到堆栈窗口左击在右击选中转到EBP
然后找到消息处理函数四个参数的值
代码实现: HWND hwnd = ::FindWindow(NULL,_T("扫雷")); //寻找进程句柄 ::SendMessage(hwnd,WM_COMMAND,0x209,0); //向进程发送消息
通过cheatengine.exe软件不断的通过首地址的改变与不改变不断的判断来找出基址
找出基址后就选中地址右击找到"Browse this memory region"左击
跳转到了内存处,然后在通过多次实验查看基址是否找对,如果基址对头就可以查看当是点击到雷时内存的变化
通过Spy++软件查找到窗口后
对消息下断
点击开始
然后就能得到消息类型与点击的坐标,在扫雷中就可以找到第一个位置与最后一个位置的坐标就可以得到每个位置的坐标
代码实现:

1 DWORD pid; 2 HWND hwnd = ::FindWindow(NULL,_T("扫雷")); //获取窗口句柄 3 GetWindowThreadProcessId(hwnd,&pid); //通过窗口句柄获取进程ID 4 5 HANDLE hProcess = OpenProcess(PROCESS_ALL_ACCESS,FALSE,pid); //通过进程ID获取进程句柄 6 7 //通过for循环逐个去遍历 8 for (int i =0;i < dwLine;++i) 9 { 10 for (int j = 0;j < 32;++j) 11 { 12 if (0x10 == gamedata[i][j]) 13 { 14 break; 15 } 16 17 //第一个位置的坐标 18 xypos2[0] = gamex + j*20;// 19 xypos2[1] = gamey + i*20; 20 21 if ((char)0x8F != (char)gamedata[i][j]) 22 { 23 //向窗口发送消息 24 ::PostMessage(hwnd, WM_LBUTTONDOWN,MK_LBUTTON,*(int *)(xypos2)); 25 ::PostMessage(hwnd, WM_LBUTTONUP,0,*(int *)(xypos2)); 26 27 } 28 29 } 30 31 } 32 33 //刷新 34 UpdateData(FALSE);
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 25岁的心里话
· 闲置电脑爆改个人服务器(超详细) #公网映射 #Vmware虚拟网络编辑器
· 基于 Docker 搭建 FRP 内网穿透开源项目(很简单哒)
· 零经验选手,Compose 一天开发一款小游戏!
· 一起来玩mcp_server_sqlite,让AI帮你做增删改查!!