- UID
- 2
- 精华
- 积分
- 7750
- 威望
- 点
- 宅币
- 个
- 贡献
- 次
- 宅之契约
- 份
- 最后登录
- 1970-1-1
- 在线时间
- 小时
|
先介绍一下xp扫雷内挂用法:
1.打开扫雷界面
2.输入X Y Z Z Y
3.按一下右下角的shift键
这时,鼠标放在雷区活动,你会看到屏幕左上角有个小光点在一闪一闪。(很小很小的,不容易看。最好桌面是深色的,要不看不清),小光点出现,说明鼠标停在的格子不是雷,没有小光点,就是雷区!
经过快1小时的分析,得到如下代码:- 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组合,你还可以输入什么序列来激活内挂?
|
|