首页
论坛
课程
招聘
雪    币: 315
活跃值: 活跃值 (10)
能力值: ( LV8,RANK:130 )
在线值:
发帖
回帖
粉丝

[原创]window扫雷的PEDIY

2009-5-1 13:54 11037

[原创]window扫雷的PEDIY

2009-5-1 13:54
11037
我是一只小菜鸟,分享自己一点心得
以前看看雪论坛
有一些大侠关于扫雷的分析
基本上都是先分析扫雷的过程,找到雷区的矩阵,用ReadProcessMemory读取
模拟发送鼠标消息,完成自动扫雷过程
根据前人分析
能不能把扫雷PEDIY,让程序自己就有这个功能

下面来开始pediy
开始扫雷pediy
在rand()函数下断点,来到布雷区域
010036C7  |> /FF35 34530001 PUSH DWORD PTR DS:[1005334]              ;  布雷开始,雷区的宽度
010036CD  |. |E8 6E020000   CALL winmine.01003940                    ;  生成随机坐标x
010036D2  |. |FF35 38530001 PUSH DWORD PTR DS:[1005338]              ;  雷区的高度
010036D8  |. |8BF0          MOV ESI,EAX
010036DA  |. |46            INC ESI
010036DB  |. |E8 60020000   CALL winmine.01003940                    ;  生成随机坐标y
010036E0  |. |40            INC EAX
010036E1  |. |8BC8          MOV ECX,EAX
010036E3  |. |C1E1 05       SHL ECX,5
010036E6  |. |F68431 405300>TEST BYTE PTR DS:[ECX+ESI+1005340],80    ;  检验(x,y)坐标是否已经布雷
010036EE  |.^ 75 D7         JNZ SHORT winmine.010036C7
010036F0  |. |C1E0 05       SHL EAX,5
010036F3  |. |8D8430 405300>LEA EAX,DWORD PTR DS:[EAX+ESI+1005340]
010036FA  |. |8008 80       OR BYTE PTR DS:[EAX],80                  ;  在坐标(x,y)布雷
010036FD  |. |FF0D 30530001 DEC DWORD PTR DS:[1005330]
01003703  |.^\75 C2         JNZ SHORT winmine.010036C7

名称  宽  长  雷区矩阵
地址  01005334  01005338  01005340
观察扫雷前后的矩阵数据
经前人的总结分析和自己检验(看雪论坛精华9,打造扫雷终极外挂)
8F = 雷
    8E = 有雷 AND 小红旗
    0E = 无雷 AND 小红旗
已经开采了的是对应的ASCII吗,比如那个地方的数字是1,则矩阵中的数据是 0x41

很容易得到WndProc的地址,来到消息处理WM_LBUTTONUP,
WM_LBUTTONUP消息负责完成点击过程
01001FDF   > \33FF          XOR EDI,EDI                           ;  Cases 202 (WM_LBUTTONUP),205 (WM_RBUTTONUP),208 (WM_MBUTTONUP) of switch 01001F5F
01001FE1   .  393D 40510001 CMP DWORD PTR DS:[1005140],EDI
01001FE7   .  0F84 BC010000 JE winmine.010021A9
01001FED   >  893D 40510001 MOV DWORD PTR DS:[1005140],EDI
01001FF3   .  FF15 D8100001 CALL DWORD PTR DS:[<&USER32.ReleaseCa>; [ReleaseCapture
01001FF9   .  841D 00500001 TEST BYTE PTR DS:[1005000],BL
01001FFF   .  0F84 B6000000 JE winmine.010020BB
01002005   .  E8 D7170000   CALL winmine.010037E1
0100200A   .  E9 9A010000   JMP winmine.010021A9
这段是处理WM_LBUTTONUP消息

01002005   .  E8 D7170000   CALL winmine.010037E1是核心函数
进来分析
010037E1  /$  A1 18510001   MOV EAX,DWORD PTR DS:[1005118]
010037E6  |.  85C0          TEST EAX,EAX
010037E8  |.  0F8E C8000000 JLE winmine.010038B6
010037EE  |.  8B0D 1C510001 MOV ECX,DWORD PTR DS:[100511C]
010037F4  |.  85C9          TEST ECX,ECX
010037F6  |.  0F8E BA000000 JLE winmine.010038B6
010037FC  |.  3B05 34530001 CMP EAX,DWORD PTR DS:[1005334]  宽度
01003802  |.  0F8F AE000000 JG winmine.010038B6
01003808  |.  3B0D 38530001 CMP ECX,DWORD PTR DS:[1005338]  高度

经过分析,看起来猜测,01005118和0100511C处存储的是当前点击的x坐标和y坐标
经验证准确无误
至于分析就差不多了,主要是知道几个重要的地址
不然太长了

具体实现思路出来了
1.  先增加一个菜单,这个用资源黑客(ResHacker.exe)就能搞定,自动扫雷,ID号是594
  MENUITEM "自动扫雷(&A)...",  594
2.  找到菜单处理的分支,改变程序流程
01001EDC  |> \2D 11020000   SUB EAX,211                    ;  Switch (cases 211..251)
01001EE1  |.  74 36         JE SHORT winmine.01001F19
01001EE3  |.  83E8 3D       SUB EAX,3D
01001EE6  |.  74 23         JE SHORT winmine.01001F0B
01001EE8  |.  48            DEC EAX
01001EE9  |.  74 1A         JE SHORT winmine.01001F05
01001EEB  |.  48            DEC EAX
01001EEC  |.  74 11         JE SHORT winmine.01001EFF
01001EEE  |.  48            DEC EAX
01001EEF  |.  0F85 B4020000 JNZ winmine.010021A9

找到一段空白地址写代码
找到空白地址是01004A60
把01001EEF  处的代码改成JMP 01004A60
在那里写代码
3.  写代码
代码的具体流程是
I = 0
J = 0
先判断扫雷是否完成
Wihle ( I < Hight) 
{
J = 0;
Wihle( j < Width)
{
  If((i,j)处没有雷,而且没被开采)
  {  
    把(i,j)的坐标传入地址1005118,100511C
    CALL winmine.010037E1
}
}
}

这是自己添加的代码

01004A60   >^\0F84 8FD4FFFF JE winmine.01001EF5
01004A66   .  A1 A4570001   MOV EAX,DWORD PTR DS:[10057A4]     ;  自动扫雷开始; Default case of switch 01001EDC
01004A6B   .  8B1D A0570001 MOV EBX,DWORD PTR DS:[10057A0]
01004A71   .  3BC3          CMP EAX,EBX                        ;  判断扫雷是否已经完成
01004A73   .^ 0F84 42D7FFFF JE winmine.010021BB
01004A79   .  8B0D 38530001 MOV ECX,DWORD PTR DS:[1005338]     ;  雷区的高度
01004A7F   .  B8 01000000   MOV EAX,1
01004A84   >  51            PUSH ECX
01004A85   .  8B0D 34530001 MOV ECX,DWORD PTR DS:[1005334]     ;  雷区的宽度
01004A8B   .  BB 01000000   MOV EBX,1
01004A90   >  BE 40530001   MOV ESI,winmine.01005340
01004A95   .  51            PUSH ECX
01004A96   .  8BF8          MOV EDI,EAX
01004A98   .  C1E7 05       SHL EDI,5
01004A9B   .  03FB          ADD EDI,EBX
01004A9D   .  803C3E 0F     CMP BYTE PTR DS:[ESI+EDI],0F       ;  判断是否有雷
01004AA1   .  77 16         JA SHORT winmine.01004AB9
01004AA3   .  50            PUSH EAX
01004AA4   .  53            PUSH EBX
01004AA5   .  90            NOP
01004AA6   .  90            NOP
01004AA7   .  A3 1C510001   MOV DWORD PTR DS:[100511C],EAX
01004AAC   .  891D 18510001 MOV DWORD PTR DS:[1005118],EBX
01004AB2   .  E8 2AEDFFFF   CALL winmine.010037E1              ;  处理这个雷
01004AB7   .  5B            POP EBX
01004AB8   .  58            POP EAX
01004AB9   >  59            POP ECX
01004ABA   .  43            INC EBX
01004ABB   .^ E2 D3         LOOPD SHORT winmine.01004A90
01004ABD   .  40            INC EAX
01004ABE   .  59            POP ECX
01004ABF   .^ E2 C3         LOOPD SHORT winmine.01004A84
01004AC1   .^ E9 F5D6FFFF   JMP winmine.010021BB

至此PEDIY的过程结束了



[看雪官方培训]《安卓高级研修班(网课)》9月班开始招生!顶尖技术、挑战极限、工资翻倍!

上传的附件:
最新回复 (30)
雪    币: 1675
活跃值: 活跃值 (11)
能力值: ( LV15,RANK:670 )
在线值:
发帖
回帖
粉丝
cntrump 活跃值 13 2009-5-1 14:52
2
0
下载回来玩一下
雪    币: 2512
活跃值: 活跃值 (66)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
option 活跃值 2009-5-2 11:15
3
0
不想投机取巧,一直用原版
雪    币: 202
活跃值: 活跃值 (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
壹无所有 活跃值 2009-5-2 15:22
4
0
玩肯定是玩原版的,研究就不同嘛
雪    币: 209
活跃值: 活跃值 (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
xxxtangwen 活跃值 2009-5-2 15:50
5
0
这样玩才有意思,大哥好有想法哈
雪    币: 200
活跃值: 活跃值 (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
liangwj 活跃值 2009-5-2 23:30
6
0
做游戏外挂挺好的.
雪    币: 315
活跃值: 活跃值 (10)
能力值: ( LV8,RANK:130 )
在线值:
发帖
回帖
粉丝
wsxcn 活跃值 3 2009-5-3 15:39
7
0
发现一个问题
有插红旗的时候不能解决的时候不能解决
上传的附件:
雪    币: 234
活跃值: 活跃值 (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
mysoftlove 活跃值 2009-5-3 17:12
8
0
楼主很强大,学习下
雪    币: 200
活跃值: 活跃值 (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
jf寂寞 活跃值 2009-5-3 18:51
9
0
呵呵楼主的确很强呀,我要学习一下。
雪    币: 211
活跃值: 活跃值 (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
whzr 活跃值 2009-5-3 19:35
10
0
哈哈 我创纪录了!
雪    币: 269
活跃值: 活跃值 (10)
能力值: ( LV9,RANK:260 )
在线值:
发帖
回帖
粉丝
billstone 活跃值 6 2009-5-3 20:43
11
0
顶一个,牛啊
雪    币: 269
活跃值: 活跃值 (10)
能力值: ( LV9,RANK:260 )
在线值:
发帖
回帖
粉丝
billstone 活跃值 6 2009-5-3 20:44
12
0
终于知道那些记录是怎么破的了
雪    币: 315
活跃值: 活跃值 (10)
能力值: ( LV8,RANK:130 )
在线值:
发帖
回帖
粉丝
wsxcn 活跃值 3 2009-5-4 17:39
13
0
针对那个问题
做了一下修改
雪    币: 0
活跃值: 活跃值 (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
zhangkexie 活跃值 2009-5-4 17:46
14
0
解析的不错  要好好研究下
雪    币: 315
活跃值: 活跃值 (10)
能力值: ( LV8,RANK:130 )
在线值:
发帖
回帖
粉丝
wsxcn 活跃值 3 2009-5-4 17:48
15
0
对那个问题稍作修改稍作修改
上传的附件:
雪    币: 211
活跃值: 活跃值 (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
whzr 活跃值 2009-5-5 07:54
16
0
早有这种想法但是……
现在有实现的了
谢了!
雪    币: 420
活跃值: 活跃值 (11)
能力值: ( LV6,RANK:90 )
在线值:
发帖
回帖
粉丝
rxzcums 活跃值 2 2009-5-5 08:35
17
0
学习了
雪    币: 215
活跃值: 活跃值 (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
惜雪 活跃值 2009-5-5 11:27
18
0
下来试试,呵呵
雪    币: 413
活跃值: 活跃值 (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
saltprune 活跃值 2009-5-5 14:28
19
0
只能说你太强了,做外挂应该可以。
雪    币: 29
活跃值: 活跃值 (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
寒辰曦露 活跃值 2009-5-5 16:36
20
0
下载看看,楼主太强了!~
雪    币: 237
活跃值: 活跃值 (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
CFCCN 活跃值 2009-5-6 09:58
21
0
这贴要标记,回去好好学习一下!
雪    币: 200
活跃值: 活跃值 (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
海楼 活跃值 2009-5-6 11:36
22
0
楼主厉害!顶一个~~~
雪    币: 206
活跃值: 活跃值 (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
cutcut 活跃值 2009-5-6 16:32
23
0
好想法,精神值得鼓励
雪    币: 208
活跃值: 活跃值 (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
xiaoak 活跃值 2009-5-6 18:47
24
0
谢了,,满有意思
雪    币: 200
活跃值: 活跃值 (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
呆呆兽 活跃值 2009-5-7 10:42
25
0
很好很强大。
雪    币: 34
活跃值: 活跃值 (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
crunming 活跃值 2009-5-7 10:46
26
0
自动扫雷就不用我们动脑筋了,呵呵,估计也失去了意义,但是楼主的方法很好很强大
雪    币: 101
活跃值: 活跃值 (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
coolen 活跃值 2009-5-7 17:14
27
0
晕。。很强大。。
  以前还看过一个扫雷漏洞。。
  打开扫雷后按一些什么键吧。。鼠标指到有雷的地方屏幕左上角就会显示个亮点。。。-_-#
雪    币: 232
活跃值: 活跃值 (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
lgccaa 活跃值 2009-5-7 18:09
28
0
不错,最近也想做个扫雷研究
雪    币: 384
活跃值: 活跃值 (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
natyou 活跃值 2009-5-7 18:21
29
0
蛮有意思的,呵呵.自己测试以下
雪    币: 200
活跃值: 活跃值 (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
大航海 活跃值 2009-5-10 17:01
30
0
楼主是我师傅
雪    币: 203
活跃值: 活跃值 (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
阿非 活跃值 2009-5-10 20:19
31
0
俺终于可以破扫雷记录了
游客
登录 | 注册 方可回帖
返回