找回密码
 立即注册→加入我们

QQ登录

只需一步,快速开始

搜索
热搜: 下载 VB C 实现 编写
查看: 5766|回复: 3

对xp扫雷内挂的分析

[复制链接]
发表于 2014-3-23 19:27:30 | 显示全部楼层 |阅读模式

欢迎访问技术宅的结界,请注册或者登录吧。

您需要 登录 才可以下载或查看,没有账号?立即注册→加入我们

×
先介绍一下xp扫雷内挂用法:
1.打开扫雷界面
2.输入X Y Z Z Y
3.按一下右下角的shift键
这时,鼠标放在雷区活动,你会看到屏幕左上角有个小光点在一闪一闪。(很小很小的,不容易看。最好桌面是深色的,要不看不清),小光点出现,说明鼠标停在的格子不是雷,没有小光点,就是雷区!


经过快1小时的分析,得到如下代码:
  1. static int index=0;
  2. static WCHAR str[]=L"XYZZY";
  3. static int xCur=-1,yCur=-1;
  4. static xBoxMax,yBoxMax;//雷区大小,初级为9*9,存储在注册表中
  5. static BYTE data[32][32];//雷区数据

  6. switch(uMsg)
  7. {
  8.    case WM_KEYDOWN:
  9.         {
  10.                 switch(wParam)
  11.                 {
  12.                         case VK_SHIFT:
  13.                                 if(index >= 5)
  14.                                         index ^= 0x14;//如果前5字符正确,后面只要index>=5即可
  15.                                 return DefWindowProc();
  16.                                 break;
  17.                                 
  18.                         case VK_F4:        
  19.                         case VK_F5:
  20.                         case VK_F6:
  21.                                 ...无关代码
  22.                                 break;
  23.                                 
  24.                         default:
  25.                                 if(index < 5)
  26.                                 {
  27.                                         if(str[index] == wParam)
  28.                                                 index++;
  29.                                         else
  30.                                                 index=0;
  31.                                 }
  32.                 }
  33.         }
  34.         break;
  35.         
  36.         case WM_MOUSEMOVE:
  37.         {        
  38.                 ......
  39.                 if(index)
  40.                 {
  41.                         if((index == 5 && wParam & MK_CONTROL) || index > 5)
  42.                         {
  43.                                 int x=LOWORD(lParam);
  44.                                 int y=HIWORD(lParam);
  45.                                 xCur=x/16;//这个16显然可以推测为一个雷格子的大小了。。。
  46.                                 yCur=(y-39)/16;//39同样可以推测为窗口顶部到雷区上边缘长度
  47.                                 if(xCur>0 && yCur>0 && xCur<xBoxMax && yCur<yBoxMax)
  48.                                 {
  49.                                         HDC hdc=GetDC(NULL);
  50.                                         //注意下面data[yCur][xCur]是对的,yCur代表行,然而在绘图中却是竖直方向
  51.                                         if(data[yCur][xCur]&0x80)//如果是雷
  52.                                                 SetPixel(hdc,0,0,RGB(0,0,0_);//显示为黑
  53.                                         else
  54.                                                 SetPixel(hdc,0,0,RGB(255,255,255);                                       
  55.                                         ReleaseDC(NULL,hdc);

  56.                                 }
  57.                         }
  58.                 }
  59.                 break;
  60.         }
  61.         return DefWindowProc();
  62. }
复制代码



同样,给你们留2个问题啊
1.按照内挂用法,应该是按下5字母后按下shift,那为什么代码中是index == 5 && wParam & MK_CONTROL
而不是index == 5 && wParam & MK_SHIFT呢
我看谁能答出来啊,能答出来就说明流程你看懂了
2.另外除了xyzzy组合,你还可以输入什么序列来激活内挂?



回复

使用道具 举报

发表于 2014-3-24 00:15:36 | 显示全部楼层
按下xyzzy后 不管按了什么键 最后按shift都不影响挂的激活
然后按ctrl的意思是 按了xyzzy后 不按shift 鼠标在雷区时 可以按ctrl获得当前雷块的状态
呵呵 这么个小游戏 设计得还挺人性化 为了照顾有些人不想用挂还被某个地方憋住了 所以还弄出两种作弊方式...
回复 赞! 靠!

使用道具 举报

发表于 2014-3-27 20:23:11 | 显示全部楼层
顶一个。。。。。。。。。。。。。
回复

使用道具 举报

发表于 2014-3-30 02:44:41 | 显示全部楼层
哦哦哦哦哦哦哦哦哦
回复 赞! 靠!

使用道具 举报

本版积分规则

QQ|Archiver|小黑屋|技术宅的结界 ( 滇ICP备16008837号 )|网站地图

GMT+8, 2024-12-26 22:48 , Processed in 0.041582 second(s), 20 queries , Gzip On.

Powered by Discuz! X3.5

© 2001-2024 Discuz! Team.

快速回复 返回顶部 返回列表