扫雷辅助

菜单栏辅助器的实现

熟悉消息处理函数的四个参数

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);
View Code
复制代码

 

 

 


 

posted @   菜鸡拾光  阅读(627)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· 25岁的心里话
· 闲置电脑爆改个人服务器(超详细) #公网映射 #Vmware虚拟网络编辑器
· 基于 Docker 搭建 FRP 内网穿透开源项目(很简单哒)
· 零经验选手,Compose 一天开发一款小游戏!
· 一起来玩mcp_server_sqlite,让AI帮你做增删改查!!
点击右上角即可分享
微信分享提示