技术宅的结界

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

QQ登录

只需一步,快速开始

搜索
热搜: 下载 VB C 实现 编写
查看: 1548|回复: 3
收起左侧

对xp扫雷内挂的分析

[复制链接]

271

主题

445

帖子

4725

积分

用户组: 真·技术宅

UID
2
精华
61
威望
148 点
宅币
3553 个
贡献
126 次
宅之契约
0 份
在线时间
614 小时
注册时间
2014-1-25
发表于 2014-3-23 19:27:30 | 显示全部楼层 |阅读模式

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

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

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


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

switch(uMsg)
{
   case WM_KEYDOWN:
        {
                switch(wParam)
                {
                        case VK_SHIFT:
                                if(index >= 5)
                                        index ^= 0x14;//如果前5字符正确,后面只要index>=5即可
                                return DefWindowProc();
                                break;
                                
                        case VK_F4:        
                        case VK_F5:
                        case VK_F6:
                                ...无关代码
                                break;
                                
                        default:
                                if(index < 5)
                                {
                                        if(str[index] == wParam)
                                                index++;
                                        else
                                                index=0;
                                }
                }
        }
        break;
        
        case WM_MOUSEMOVE:
        {        
                ......
                if(index)
                {
                        if((index == 5 && wParam & MK_CONTROL) || index > 5)
                        {
                                int x=LOWORD(lParam);
                                int y=HIWORD(lParam);
                                xCur=x/16;//这个16显然可以推测为一个雷格子的大小了。。。
                                yCur=(y-39)/16;//39同样可以推测为窗口顶部到雷区上边缘长度
                                if(xCur>0 && yCur>0 && xCur<xBoxMax && yCur<yBoxMax)
                                {
                                        HDC hdc=GetDC(NULL);
                                        //注意下面data[yCur][xCur]是对的,yCur代表行,然而在绘图中却是竖直方向
                                        if(data[yCur][xCur]&0x80)//如果是雷
                                                SetPixel(hdc,0,0,RGB(0,0,0_);//显示为黑
                                        else
                                                SetPixel(hdc,0,0,RGB(255,255,255);                                       
                                        ReleaseDC(NULL,hdc);

                                }
                        }
                }
                break;
        }
        return DefWindowProc();
}



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



0

主题

30

帖子

98

积分

用户组: 小·技术宅

UID
141
精华
0
威望
1 点
宅币
66 个
贡献
0 次
宅之契约
0 份
在线时间
9 小时
注册时间
2014-3-23
发表于 2014-3-24 00:15:36 | 显示全部楼层
按下xyzzy后 不管按了什么键 最后按shift都不影响挂的激活
然后按ctrl的意思是 按了xyzzy后 不按shift 鼠标在雷区时 可以按ctrl获得当前雷块的状态
呵呵 这么个小游戏 设计得还挺人性化 为了照顾有些人不想用挂还被某个地方憋住了 所以还弄出两种作弊方式...

0

主题

19

帖子

52

积分

用户组: 小·技术宅

UID
160
精华
0
威望
1 点
宅币
31 个
贡献
0 次
宅之契约
0 份
在线时间
0 小时
注册时间
2014-3-27
发表于 2014-3-27 20:23:11 | 显示全部楼层
顶一个。。。。。。。。。。。。。
回复

使用道具 举报

1

主题

14

帖子

51

积分

用户组: 小·技术宅

UID
146
精华
0
威望
1 点
宅币
35 个
贡献
0 次
宅之契约
0 份
在线时间
4 小时
注册时间
2014-3-23
发表于 2014-3-30 02:44:41 | 显示全部楼层
哦哦哦哦哦哦哦哦哦

本版积分规则

QQ|申请友链|Archiver|手机版|小黑屋|技术宅的结界 ( 滇ICP备16008837号|网站地图

GMT+8, 2019-1-18 01:46 , Processed in 0.094178 second(s), 31 queries , Gzip On.

Powered by Discuz! X3.2

© 2001-2013 Comsenz Inc.

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