吾爱破解 - LCG - LSG |安卓破解|病毒分析|www.52pojie.cn

 找回密码
 注册[Register]

QQ登录

只需一步,快速开始

查看: 29427|回复: 143
收起左侧

[原创] 扫雷小游戏的相关简单分析

    [复制链接]
Sound 发表于 2015-11-13 01:13
掃雷小遊戲的相關簡單分析


By: Sound

前言: 好无聊啊,这个时间依然毫无困意。对网络游戏无爱的我,玩了会蜘蛛纸牌、扫雷 然后论坛版块查查违规,解决下求助问题。打发打发时间。
咦、这里提到了扫雷。 并且10个地雷 Beginner的已经满足不了我啦,去尝试下了下Exprt 99个地雷、唔,完蛋了。竟然被系统虐了,完全不能忍的我,又不屑于使用外挂。
于是 突然想把扫雷当做一个Crack Me 玩, 既然你不让我寻找地雷存在哪里、我就让你地雷显示出来,偶尔作下弊也是可以的嘛, (尤其是自己动手作弊)

-------------------------------------------------【正文】-------------------------------------------------

使用的工具只有OllyDbg 而已。 OllyDbg1.10.Modified 1.1.By.Sound[R.E.T]  
http://release.crack4r.cc/%5BR.E.T%5DTools/OllyDbg1.10.Modified1.1.By.Sound.7z

Run 后发现 默认的是 Beginner 显示10个地雷,  
OllyDbg 载入 winmine.exe
Module Entry Point(模块入口点) EIP = 01003E21
[Asm] 纯文本查看 复制代码
01003E21 > $  6A 70         PUSH    0x70
01003E23   .  68 90130001   PUSH    01001390
01003E28   .  E8 DF010000   CALL    0100400C01003E2D   .  33DB          XOR     EBX, EBX
01003E2F   .  53            PUSH    EBX                              ; /pModule => NULL
01003E30   .  8B3D 8C100001 MOV     EDI, DWORD PTR DS:[<&KERNEL32.Ge>; |kernel32.GetModuleHandleA
01003E36   .  FFD7          CALL    EDI                              ; \GetModuleHandleA
01003E38   .  66:8138 4D5A  CMP     WORD PTR DS:[EAX], 0x5A4D
01003E3D   .  75 1F         JNZ     SHORT 01003E5E
01003E3F   .  8B48 3C       MOV     ECX, DWORD PTR DS:[EAX+0x3C]
01003E42   .  03C8          ADD     ECX, EAX
01003E44   .  8139 50450000 CMP     DWORD PTR DS:[ECX], 0x4550
01003E4A   .  75 12         JNZ     SHORT 01003E5E
01003E4C   .  0FB741 18     MOVZX   EAX, WORD PTR DS:[ECX+0x18]
01003E50   .  3D 0B010000   CMP     EAX, 0x10B
01003E55   .  74 1F         JE      SHORT 01003E76
01003E57   .  3D 0B020000   CMP     EAX, 0x20B
01003E5C   .  74 05         JE      SHORT 01003E63
01003E5E   >  895D E4       MOV     DWORD PTR SS:[EBP-0x1C], EBX
01003E61   .  EB 27         JMP     SHORT 01003E8A

Microsoft Visual C++ 7.x 入口点 既然是 Vc 7的程序

反汇编窗口 右键 Search For >> All intermodular calls  查看所有模块间的函数调用。
寻找 Destination 为 msvcrt 模块的函数
[Asm] 纯文本查看 复制代码
Address    Disassembly                               Destination
01003E21   PUSH    0x70                              (Initial CPU selection)
01001C45   CALL    DWORD PTR DS:[<&USER32.BeginPain  user32.BeginPaint
01003ABE   CALL    DWORD PTR DS:[<&msvcrt.srand>]    msvcrt.srand
01003FA6   CALL    DWORD PTR DS:[<&msvcrt._cexit>]   msvcrt._cexit
01003FD5   CALL    DWORD PTR DS:[<&msvcrt._c_exit>]  msvcrt._c_exit
01003FA0   CALL    DWORD PTR DS:[<&msvcrt.exit>]     msvcrt.exit
01003FCF   CALL    DWORD PTR DS:[<&msvcrt._exit>]    msvcrt._exit
01003EF4   CALL    <JMP.&msvcrt._initterm>           msvcrt._initterm
01003F2A   CALL    <JMP.&msvcrt._initterm>           msvcrt._initterm
01003EB2   CALL    DWORD PTR DS:[<&msvcrt.__p__comm  msvcrt.__p__commode
01003EA4   CALL    DWORD PTR DS:[<&msvcrt.__p__fmod  msvcrt.__p__fmode
01003940   CALL    DWORD PTR DS:[<&msvcrt.rand>]     msvcrt.rand
01003EDE   CALL    DWORD PTR DS:[<&msvcrt.__setuser  msvcrt.__setusermatherr
01003E8F   CALL    DWORD PTR DS:[<&msvcrt.__set_app  msvcrt.__set_app_type
01003FBA   CALL    <JMP.&msvcrt._XcptFilter>         msvcrt._XcptFilter

看到rand 与 srand


rand()函数是产生随机数的一个随机函数。
srand函数是随机数发生器的初始化函数。
srand和rand()配合使用产生伪随机数序列

玩过扫雷的都知道,每次的地雷存放位置都是不同的。那么我们就明确的知道了 扫雷这个小游戏其自身采用了srand与rand函数

Ollydbg Ctrl+G  (Enter Expression to follow) 输入 Srand
[Asm] 纯文本查看 复制代码
77C371BC   8BFF            MOV     EDI, EDI
77C371BE    55              PUSH    EBP
77C371BF    8BEC            MOV     EBP, ESP
77C371C1    E8 652D0000     CALL    77C39F2B
77C371C6    8B4D 08         MOV     ECX, DWORD PTR SS:[EBP+0x8]
77C371C9    8948 14         MOV     DWORD PTR DS:[EAX+0x14], ECX
77C371CC    5D              POP     EBP
77C371CD    C3              RETN


int3断点设置address =77C371CD   
Ollydbg 执行Run(f9) 操作  Eip位于
77C371CD    C3              RETN

[Asm] 纯文本查看 复制代码
0007FEA8   01003AC4  RETURN to winmine.01003AC4 from msvcrt.srand
0007FEAC   0000CED8
0007FEB0   7C80B741  kernel32.GetModuleHandleA
0007FEB4   0010234D
0007FEB8  /0007FF1C
0007FEBC  |7C802015  RETURN to kernel32.7C802015 from kernel32.7C802511
0007FEC0  |01002206  RETURN to winmine.01002206 from winmine.01003AB0
0007FEC4  |7C80B741  kernel32.GetModuleHandleA

堆栈窗口进行 Follow In Disassembler(Enter)  回溯操作。返回到程序领空。
[Asm] 纯文本查看 复制代码
01003AB0   $  51            PUSH    ECX
01003AB1   .  55            PUSH    EBP
01003AB2   .  56            PUSH    ESI
01003AB3   .  57            PUSH    EDI
01003AB4   .  FF15 84100001 CALL    DWORD PTR DS:[<&KERNEL32.GetTickC>; [GetTickCount
01003ABA   .  0FB7C0        MOVZX   EAX, AX
01003ABD   .  50            PUSH    EAX                               ; /seed
01003ABE   .  FF15 AC110001 CALL    DWORD PTR DS:[<&msvcrt.srand>]    ; \srand
01003AC4   .  59            POP     ECX
01003AC5   .  6A 20         PUSH    0x20
01003AC7   .  33ED          XOR     EBP, EBP
01003AC9   .  68 A05A0001   PUSH    01005AA0
01003ACE   .  45            INC     EBP
01003ACF   .  55            PUSH    EBP
01003AD0   .  E8 12FFFFFF   CALL    010039E7
01003AD5   .  6A 20         PUSH    0x20
01003AD7   .  68 E05A0001   PUSH    01005AE0
01003ADC   .  6A 07         PUSH    0x7
01003ADE   .  E8 04FFFFFF   CALL    010039E7
01003AE3   .  6A 20         PUSH    0x20
01003AE5   .  68 405B0001   PUSH    01005B40
01003AEA   .  6A 08         PUSH    0x8
01003AEC   .  E8 F6FEFFFF   CALL    010039E7


[Asm] 纯文本查看 复制代码
01003ABD   .  50            PUSH    EAX                               ; /seed
01003ABE   .  FF15 AC110001 CALL    DWORD PTR DS:[<&msvcrt.srand>]    ; \srand
01003AC9   .  68 A05A0001   PUSH    01005AA0


01003ABD 处 已经置随机种子
01003ABE 处 随机函数初始化
01003AC9 处 压入一个Unicode字串。

01003AC4 设置Int3断点

Ollydbg 执行 Run 操作 Eip 位于 01003AC4
[Asm] 纯文本查看 复制代码
01003AC4   .  59            POP     ECX
01003AC5   .  6A 20         PUSH    0x20
01003AC7   .  33ED          XOR     EBP, EBP
01003AC9   .  68 A05A0001   PUSH    01005AA0               
01003ACE   .  45            INC     EBP
01003ACF   .  55            PUSH    EBP
01003AD0   .  E8 12FFFFFF   CALL    010039E7
01003AD5   .  6A 20         PUSH    0x20


Ollydbg 执行 Set Over(F8)操作到

01003AD0   .  E8 12FFFFFF   CALL    010039E7
Follow( 跟随 )  E8 12FFFFFF   CALL    010039E7
[Asm] 纯文本查看 复制代码
010039E7  /$  FF7424 0C     PUSH    DWORD PTR SS:[ESP+0xC]            ; /Count
010039EB  |.  0FB74424 08   MOVZX   EAX, WORD PTR SS:[ESP+0x8]        ; |
010039F0  |.  FF7424 0C     PUSH    DWORD PTR SS:[ESP+0xC]            ; |Buffer
010039F4  |.  50            PUSH    EAX                               ; |RsrcID
010039F5  |.  FF35 305B0001 PUSH    DWORD PTR DS:[0x1005B30]          ; |hInst = 01000000
010039FB  |.  FF15 D0100001 CALL    DWORD PTR DS:[<&USER32.LoadString>; \LoadStringW
01003A01  |.  85C0          TEST    EAX, EAX
01003A03  |.  75 0A         JNZ     SHORT 01003A0F
01003A05  |.  68 E9030000   PUSH    0x3E9                             ; /Arg1 = 000003E9
01003A0A  |.  E8 41FFFFFF   CALL    01003950                          ; \winmine.01003950
01003A0F  \>  C2 0C00       RETN    0xC


清晰的看到几个参数。
F8 步过之后
01003AC9   .  68 A05A0001   PUSH    01005AA0                          ;  UNICODE "Minesweeper"
01003AC9 处 压入标题Unicode 字串

Srand 随机数已经初始完毕。 时机有点晚了。。
找到Srand执行 相对虚拟地址的 断首

[Asm] 纯文本查看 复制代码
01003AB0   $  51            PUSH    ECX                               ;  kernel32.7C802015
01003AB1   .  55            PUSH    EBP
01003AB2   .  56            PUSH    ESI
01003AB3   .  57            PUSH    EDI


鼠标选中 01003AB0  
信息窗口显示 Local call from 01002201
或者执行Ollydbg 操作 Ctrl+R

Follow(跟随 )
[Asm] 纯文本查看 复制代码
010021F0  /$  55            PUSH    EBP
010021F1  |.  8BEC          MOV     EBP, ESP
010021F3  |.  83EC 4C       SUB     ESP, 0x4C
010021F6  |.  8B45 08       MOV     EAX, DWORD PTR SS:[EBP+0x8]
010021F9  |.  53            PUSH    EBX
010021FA  |.  56            PUSH    ESI
010021FB  |.  57            PUSH    EDI
010021FC  |.  A3 305B0001   MOV     DWORD PTR DS:[0x1005B30], EAX
01002201  |.  E8 AA180000   CALL    01003AB0


清除之前的所有Int3断点 新建立Int3断点位于 010021F0

Ctrl+F2 重新载入 Run
执行Set Over(F8)操作
[Asm] 纯文本查看 复制代码
01002235  |.  FF15 1C100001 CALL    DWORD PTR DS:[<&COMCTL32.InitComm>; \InitCommonControlsEx
0100223B  |.  6A 64         PUSH    0x64                              ; /RsrcName = 100.
0100223D  |.  FF35 305B0001 PUSH    DWORD PTR DS:[0x1005B30]          ; |hInst = 01000000
01002243  |.  FF15 AC100001 CALL    DWORD PTR DS:[<&USER32.LoadIconW>>; \LoadIconW


应用程序可视化.  创建窗口需要用到InitCommonControlsEx 其次载入图标
[Asm] 纯文本查看 复制代码
0100224F  |.  68 007F0000   PUSH    0x7F00                                       ; /RsrcName = IDC_ARROW
01002254  |.  57            PUSH    EDI                                          ; |hInst
01002255  |.  A3 285B0001   MOV     DWORD PTR DS:[0x1005B28], EAX                ; |
0100225A  |.  897D B4       MOV     DWORD PTR SS:[EBP-0x4C], EDI                 ; |
0100225D  |.  C745 B8 C91B0>MOV     DWORD PTR SS:[EBP-0x48], 01001BC9            ; |
01002264  |.  897D BC       MOV     DWORD PTR SS:[EBP-0x44], EDI                 ; |
01002267  |.  897D C0       MOV     DWORD PTR SS:[EBP-0x40], EDI                 ; |
0100226A  |.  894D C4       MOV     DWORD PTR SS:[EBP-0x3C], ECX                 ; |
0100226D  |.  8945 C8       MOV     DWORD PTR SS:[EBP-0x38], EAX                 ; |



[Asm] 纯文本查看 复制代码
0100225D  |.  C745 B8 C91B0>MOV     DWORD PTR SS:[EBP-0x48], 01001BC9    


跟随 01001BC9  一直F8 看到
[Asm] 纯文本查看 复制代码
01001FED  |> /893D 40510001    MOV     DWORD PTR DS:[0x1005140], EDI
01001FF3  |. |FF15 D8100001    CALL    DWORD PTR DS:[<&USER32.ReleaseCapture>]      ; [ReleaseCapture
01001FF9  |. |841D 00500001    TEST    BYTE PTR DS:[0x1005000], BL
01001FFF  |. |0F84 B6000000    JE      010020BB


01001FF3 有捕获按键状态。。
取消所有断点  设置断点01001FF3  
Run
[Asm] 纯文本查看 复制代码
01001FFF  |. /0F84 B6000000    JE      010020BB
01002005  |. |E8 D7170000      CALL    010037E1

跟随  E8 D7170000      CALL    010037E1
[Asm] 纯文本查看 复制代码
01003872  |. /75 10            JNZ     SHORT 01003884
01003874  |. |6A FE            PUSH    -0x2
01003876  |. |59               POP     ECX
01003877  |. |8BC1             MOV     EAX, ECX
01003879  |. |890D 1C510001    MOV     DWORD PTR DS:[0x100511C], ECX
0100387F  |. |A3 18510001      MOV     DWORD PTR DS:[0x1005118], EAX
01003884  |> \833D 44510001 00 CMP     DWORD PTR DS:[0x1005144], 0x0
0100388B  |.  74 09            JE      SHORT 01003896
0100388D  |.  51               PUSH    ECX
0100388E  |.  50               PUSH    EAX
0100388F  |.  E8 23FDFFFF      CALL    010035B7                                    
01003894  |.  EB 20            JMP     SHORT 010038B6
01003896  |>  8BD1             MOV     EDX, ECX
01003898  |.  C1E2 05          SHL     EDX, 0x5
0100389B  |.  8A9402 40530001  MOV     DL, BYTE PTR DS:[EDX+EAX+0x1005340]


数据窗口跟随
有个常量 0x1005340
0100389B
[Asm] 纯文本查看 复制代码
01005340  10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10  
01005350  10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10  
01005360  10 41 0F 0F 0F 0F 8F 0F 8F 0F 0F 8F 0F 8F 8F 0F  A?????
01005370  0F 0F 0F 8F 0F 0F 8F 0F 8F 0F 0F 0F 0F 0F 8F 10  ????
01005380  10 8F 0F 0F 0F 0F 0F 0F 0F 8F 0F 0F 8F 0F 0F 0F  ???
01005390  0F 8F 0F 0F 8F 0F 0F 0F 8F 0F 0F 0F 0F 0F 0F 10  ???
010053A0  10 0F 0F 0F 0F 8F 0F 0F 0F 0F 0F 0F 0F 0F 0F 0F  ?
010053B0  0F 8F 8F 0F 0F 0F 0F 0F 0F 0F 0F 0F 0F 0F 0F 10  ??
010053C0  10 8F 8F 0F 0F 8F 0F 0F 0F 8F 8F 0F 0F 0F 0F 41  ?????A
010053D0  41 42 42 42 0F 8F 8F 8F 0F 0F 8F 0F 0F 0F 0F 10  ABBB????
010053E0  10 0F 0F 0F 0F 0F 0F 0F 0F 0F 0F 0F 0F 0F 8F 41  ?A
010053F0  40 40 40 42 8F 0F 0F 0F 8F 0F 0F 0F 8F 0F 0F 10  @@@B???
01005400  10 0F 0F 8F 0F 0F 0F 0F 0F 0F 8F 8F 42 41 41 41  ???BAAA
01005410  40 40 40 43 8F 0F 0F 0F 0F 0F 0F 0F 0F 0F 0F 10  @@@C?
01005420  10 8F 0F 8F 0F 0F 8F 0F 0F 8F 0F 8F 42 40 40 40  ?????B@@@
01005430  40 40 40 42 8F 0F 0F 0F 8F 0F 0F 0F 0F 0F 0F 10  @@@B??
01005440  10 0F 0F 8F 8F 0F 0F 8F 0F 0F 0F 42 41 40 40 41  ???BA@@A
01005450  41 41 40 41 42 8F 0F 8F 0F 0F 0F 0F 0F 0F 0F 10  AA@AB??
01005460  10 0F 0F 0F 0F 0F 0F 0F 0F 0F 8F 41 40 40 40 42  ?A@@@B
01005470  8F 42 40 40 41 0F 8F 8F 8F 0F 0F 0F 8F 0F 0F 10  ?B@@A????
01005480  10 0F 0F 0F 8F 8F 8F 0F 0F 0F 0F 42 40 40 40 42  ???B@@@B
01005490  8F 43 41 41 41 0F 43 43 42 42 8F 8F 0F 0F 0F 10  ?CAAACCBB??
010054A0  10 0F 0F 0F 0F 8F 8F 0F 0F 8F 8F 42 41 40 40 41  ????BA@@A
010054B0  0F 0F 8F 0F 0F 8F 41 40 40 41 42 42 41 42 8F 10  ??A@@ABBAB?
010054C0  10 0F 0F 0F 0F 0F 0F 8F 0F 8F 0F 8F 42 41 40 41  ???BA@A
010054D0  0F 0F 8F 0F 0F 0F 42 41 40 40 40 40 40 42 8F 10  ?BA@@@@@B?
010054E0  10 0F 0F 0F 0F 0F 0F 0F 0F 8F 0F 0F 8F 41 40 42  ??A@B
010054F0  8F 0F 8F 0F 8F 0F 8F 42 41 40 41 41 42 42 0F 10  ????BA@AABB


发现为已经点击后 扫雷的数据

0100388B  处修改指令 不实现转移
跟进 010035B7 人品太好了 地雷一直不炸 为了方便地雷爆炸 我设置了自定义 最高 一共667个地雷。

[Asm] 纯文本查看 复制代码
010035D8  |. /0F84 8C000000    JE      0100366A
010035DE  |. |57               PUSH    EDI
010035DF  |. |56               PUSH    ESI

修改 010035D8 不实现转移

来到
[Asm] 纯文本查看 复制代码
01003659  |.  3B05 A0570001    CMP     EAX, DWORD PTR DS:[0x10057A0]
0100365F  |.  75 12            JNZ     SHORT 01003673
01003661  |.  6A 01            PUSH    0x1
01003663  |>  E8 14FEFFFF      CALL    0100347C      


跟随  E8 14FEFFFF      CALL    0100347C
[Asm] 纯文本查看 复制代码
0100349E  |.  85F6             TEST    ESI, ESI
010034A0  |.  0F95C0           SETNE   AL
010034A3  |.  8D0485 0A000000  LEA     EAX, DWORD PTR DS:[EAX*4+0xA]
010034AA  |.  50               PUSH    EAX
010034AB  |.  E8 D0FAFFFF      CALL    01002F80


步过 010034AB  压入了一个参数0A  
而 01005340 为地雷部署的数据 8F显示的都是地雷。
同时经过调试发现。根据所点击的值 每次程序都会执行到01002F80 并且重新运行初始地雷游戏的状态。
Ctrl+F2 重新载入 Run  继续F8来到这里
[Asm] 纯文本查看 复制代码
01002148  |.  1BC0          SBB     EAX, EAX
0100214A  |.  25 010000FF   AND     EAX, 0xFF000001
0100214F  |.  05 FFFFFF00   ADD     EAX, 0xFFFFFF
01002154  |.  50            PUSH    EAX                                          ; /Color
01002155  |.  57            PUSH    EDI                                          ; |Y
01002156  |.  57            PUSH    EDI                                          ; |X
01002157  |.  56            PUSH    ESI                                          ; |hDC
01002158  |.  FF15 58100001 CALL    DWORD PTR DS:[<&GDI32.SetPixel>]             ; \SetPixel
0100215E  |.  56            PUSH    ESI                                          ; /hDC
0100215F  |.  57            PUSH    EDI                                          ; |hWnd
01002160  |.  FF15 28110001 CALL    DWORD PTR DS:[<&USER32.ReleaseDC>]           ; \ReleaseDC
01002166  |.  EB 41         JMP     SHORT 010021A9
01002168  |>  393D 4C510001 CMP     DWORD PTR DS:[0x100514C], EDI
0100216E  |.^ 0F85 EAFAFFFF JNZ     01001C5E
01002174  |.  8B45 14       MOV     EAX, DWORD PTR SS:[EBP+0x14]
01002177  |.  C1E8 10       SHR     EAX, 0x10
0100217A  |.  83E8 27       SUB     EAX, 0x27
0100217D  |.  C1F8 04       SAR     EAX, 0x4


无限循环在随机坐标
[Asm] 纯文本查看 复制代码
01002185  |.  83C0 04       ADD     EAX, 0x4
01002188  |.  C1F8 04       SAR     EAX, 0x4
0100218B  |.  50            PUSH    EAX
0100218C  |.  E8 BE150000   CALL    0100374F                                   
01002191  |.^ E9 C8FAFFFF   JMP     01001C5E


0100218C 设置Int3断点
[Asm] 纯文本查看 复制代码
01002270  |.  FF15 BC100001 CALL    DWORD PTR DS:[<&USER32.LoadCursor>; \LoadCursorW
01002276  |.  53            PUSH    EBX                               ; /ObjType
01002277  |.  8945 CC       MOV     DWORD PTR SS:[EBP-0x34], EAX      ; |
0100227A  |.  FF15 60100001 CALL    DWORD PTR DS:[<&GDI32.GetStockObj>; \GetStockObject
01002280  |.  8945 D0       MOV     DWORD PTR SS:[EBP-0x30], EAX


载入光标资源  检索句柄
[Asm] 纯文本查看 复制代码
01002292  |.  FF15 CC100001 CALL    DWORD PTR DS:[<&USER32.RegisterCl>; \RegisterClassW
01002298  |.  66:85C0       TEST    AX, AX
0100229B  |.  0F84 9A000000 JE      0100233B
010022A1  |.  68 F4010000   PUSH    0x1F4                             ; /RsrcName = 0x1F4
010022A6  |.  FF35 305B0001 PUSH    DWORD PTR DS:[0x1005B30]          ; |hInst = 01000000
010022AC  |.  FF15 D4100001 CALL    DWORD PTR DS:[<&USER32.LoadMenuW>>; \LoadMenuW
010022B2  |.  68 F5010000   PUSH    0x1F5                             ; /TableName = 0x1F5
010022B7  |.  FF35 305B0001 PUSH    DWORD PTR DS:[0x1005B30]          ; |hInst = 01000000
010022BD  |.  A3 945A0001   MOV     DWORD PTR DS:[0x1005A94], EAX     ; |
010022C2  |.  FF15 60110001 CALL    DWORD PTR DS:[<&USER32.LoadAccele>; \LoadAcceleratorsW


RegisterClassW 注册后用于调用CreateWindow (创建窗口)  ,其次加载菜单资源。调入键表。
[Asm] 纯文本查看 复制代码
010022E1  |.  57            PUSH    EDI                               ; /lParam = NULL
010022E2  |.  FF35 305B0001 PUSH    DWORD PTR DS:[0x1005B30]          ; |hInst = 01000000
010022E8  |.  03C8          ADD     ECX, EAX                          ; |
010022EA  |.  57            PUSH    EDI                               ; |hMenu
010022EB  |.  57            PUSH    EDI                               ; |hParent
010022EC  |.  51            PUSH    ECX                               ; |Height
010022ED  |.  8B0D 905A0001 MOV     ECX, DWORD PTR DS:[0x1005A90]     ; |
010022F3  |.  03D1          ADD     EDX, ECX                          ; |
010022F5  |.  52            PUSH    EDX                               ; |Width
010022F6  |.  8B15 B4560001 MOV     EDX, DWORD PTR DS:[0x10056B4]     ; |
010022FC  |.  2BD0          SUB     EDX, EAX                          ; |
010022FE  |.  A1 B0560001   MOV     EAX, DWORD PTR DS:[0x10056B0]     ; |
01002303  |.  52            PUSH    EDX                               ; |Y
01002304  |.  2BC1          SUB     EAX, ECX                          ; |
01002306  |.  50            PUSH    EAX                               ; |X
01002307  |.  68 0000CA00   PUSH    0xCA0000                          ; |Style = WS_OVERLAPPED|WS_MINIMIZEBOX|WS_SYSMENU|WS_CAPTION
0100230C  |.  56            PUSH    ESI                               ; |WindowName
0100230D  |.  56            PUSH    ESI                               ; |Class
0100230E  |.  57            PUSH    EDI                               ; |ExtStyle
0100230F  |.  FF15 5C110001 CALL    DWORD PTR DS:[<&USER32.CreateWind>; \CreateWindowExW


消息响应 获取菜单句柄 压入宽度  xy坐标 压入窗口风格  

0100230F  创建窗口
[Asm] 纯文本查看 复制代码

01002342  |> \FF35 C4560001    PUSH    DWORD PTR DS:[0x10056C4]
01002348  |.  E8 98190000      CALL    01003CE5
0100234D  |.  E8 28130000      CALL    0100367A
01002352  |.  53               PUSH    EBX                                          ; /ShowState
01002353  |.  FF35 245B0001    PUSH    DWORD PTR DS:[0x1005B24]                     ; |hWnd = 0060012E ('Minesweeper',class='Minesweeper')
01002359  |.  FF15 34110001    CALL    DWORD PTR DS:[<&USER32.ShowWindow>]          ; \ShowWindow
0100235F  |.  FF35 245B0001    PUSH    DWORD PTR DS:[0x1005B24]                     ; /hWnd = 0060012E ('Minesweeper',class='Minesweeper')
01002365  |.  FF15 58110001    CALL    DWORD PTR DS:[<&USER32.UpdateWindow>]        ; \UpdateWindow
0100236B  |.  8B35 54110001    MOV     ESI, DWORD PTR DS:[<&USER32.GetMessageW>]    ;  user32.GetMessageW
01002371  |.  893D 385B0001    MOV     DWORD PTR DS:[0x1005B38], EDI


跟进 0100234D  E8 28130000      CALL    0100367A

[Asm] 纯文本查看 复制代码
010036F0  |.  C1E0 05          SHL     EAX, 0x5
010036F3  |.  8D8430 40530001  LEA     EAX, DWORD PTR DS:[EAX+ESI+0x1005340]
010036FA  |.  8008 80          OR      BYTE PTR DS:[EAX], 0x80
010036FD      FF0D 30530001    DEC     DWORD PTR DS:[0x1005330]
01003703  |.^ 75 C2            JNZ     SHORT 010036C7


Int3 断点位于  010036F3  取消所有断点 重载
010036F3  |.  8D8430 40530001  LEA     EAX, DWORD PTR DS:[EAX+ESI+0x1005340]
信息窗口显示
DS:[01005330]=00000028

16进制的28 转换下10进制=40
[Asm] 纯文本查看 复制代码
010036F3  |.  8D8430 40530001  LEA     EAX, DWORD PTR DS:[EAX+ESI+0x1005340]
010036FA  |.  8008 80          OR      BYTE PTR DS:[EAX], 0x80
010036FD      FF0D 30530001    DEC     DWORD PTR DS:[0x1005330]
01003703  |.^ 75 C2            JNZ     SHORT 010036C7
01003705  |.  8B0D 38530001    MOV     ECX, DWORD PTR DS:[0x1005338]

01003703  一直循环在置入地雷 循环一共置入40个地雷
[Asm] 纯文本查看 复制代码
010053B0     0F 10 0F 0F 0F 0F 0F 0F 0F 0F 0F 0F 0F 0F 0F 0F  
010053C0     10 0F 0F 0F 0F 0F 0F 0F 0F 0F 0F 0F 0F 0F 0F 0F  
010053D0     0F 10 0F 0F 0F 0F 0F 0F 0F 0F 0F 0F 0F 0F 0F 0F  
010053E0     10 0F 0F 0F 0F 0F 0F 0F 0F 8F 0F 0F 0F 0F 0F 0F  ?
010053F0     0F 10 0F 0F 0F 0F 0F 0F 0F 0F 0F 0F 0F 0F 0F 0F  
01005400     10 0F 0F 0F 0F 0F 0F 0F 0F 0F 0F 0F 0F 0F 8F 0F  ?
01005410     0F 10 0F 0F 0F 0F 0F 0F 0F 0F 0F 0F 0F 0F 0F 0F  
01005420     10 8F 0F 0F 0F 0F 0F 0F 0F 0F 0F 0F 0F 0F 0F 0F  ?
01005430     0F 10 0F 0F 0F 0F 0F 0F 0F 0F 0F 0F 0F 0F 0F 0F  
01005440     10 0F 0F 0F 0F 0F 0F 0F 0F 0F 0F 0F 0F 0F 0F 0F  
01005450     0F 10 0F 0F 0F 0F 0F 0F 0F 0F 0F 0F 0F 0F 0F 0F  
01005460     10 0F 0F 0F 0F 0F 0F 0F 0F 0F 8F 0F 0F 0F 0F 0F  ?
01005470     0F 10 0F 0F 0F 0F 0F 0F 0F 0F 0F 0F 0F 0F 0F 0F  
01005480     10 0F 0F 0F 0F 0F 0F 8F 8F 0F 0F 0F 0F 0F 0F 0F  ??
01005490     0F 10 0F 0F 0F 0F 0F 0F 0F 0F 0F 0F 0F 0F 0F 0F  
010054A0     10 0F 0F 0F 0F 0F 0F 0F 8F 0F 0F 0F 0F 0F 0F 0F  ?
010054B0     0F 10 0F 0F 0F 0F 0F 0F 0F 0F 0F 0F 0F 0F 0F 0F  
010054C0     10 0F 0F 0F 0F 0F 0F 0F 0F 0F 0F 0F 0F 0F 0F 0F  
010054D0     0F 10 0F 0F 0F 0F 0F 0F 0F 0F 0F 0F 0F 0F 0F 0F  
010054E0     10 0F 0F 0F 0F 0F 0F 0F 0F 0F 0F 0F 0F 0F 0F 0F  
010054F0     0F 10 0F 0F 0F 0F 0F 0F 0F                       


可以清晰的看到 地雷已经置入啦。
[Asm] 纯文本查看 复制代码
01002353  |.  FF35 245B0001    PUSH    DWORD PTR DS:[0x1005B24]                     ; |hWnd = 0063012E ('Minesweeper',class='Minesweeper')
01002359  |.  FF15 34110001    CALL    DWORD PTR DS:[<&USER32.ShowWindow>]          ; \ShowWindow
0100235F  |.  FF35 245B0001    PUSH    DWORD PTR DS:[0x1005B24]                     ; /hWnd = 0063012E ('Minesweeper',class='Minesweeper')
01002365  |.  FF15 58110001    CALL    DWORD PTR DS:[<&USER32.UpdateWindow>]        ; \UpdateWindow
0100236B  |.  8B35 54110001    MOV     ESI, DWORD PTR DS:[<&USER32.GetMessageW>]    ;  user32.GetMessageW
01002371  |.  893D 385B0001    MOV     DWORD PTR DS:[0x1005B38], EDI
01002377  |.  EB 2B            JMP     SHORT 010023A4
01002379  |>  8D45 DC          /LEA     EAX, DWORD PTR SS:[EBP-0x24]
0100237C  |.  50               |PUSH    EAX                                         ; /pMsg
0100237D  |.  FF75 14          |PUSH    DWORD PTR SS:[EBP+0x14]                     ; |hAccel
01002380  |.  FF35 245B0001    |PUSH    DWORD PTR DS:[0x1005B24]                    ; |hWnd = 0063012E ('Minesweeper',class='Minesweeper')

开始显示窗口 然后更新窗口。。

随机数的地雷都置入了也初始完了 窗口都即将显示 01002353  压入了常量 0x1005B24 再次压入 0x1005B24

找段空代码 最后修改如下
01002380  |.  FF35 245B0001

Patch
[Asm] 纯文本查看 复制代码
01002380   /E9 F5260000        JMP     01004A7A
01002385   |90                 NOP

01004A7A    FF35 245B0001      PUSH    DWORD PTR DS:[0x1005B24]
01004A80    6A 0A              PUSH    0xA
01004A82    E8 F9E4FFFF        CALL    01002F80
01004A87  ^ E9 F9D8FFFF        JMP     01002385
01004A8C    0000               ADD     BYTE PTR DS:[EAX], AL


Done..

Patch.png


BTW: 没走捷径,这个程序我只是盲目的F8 F7 分析。 把他当做一个Crack Me来玩 最后达到自己的目的 也是一种虐心的享受








winmine.7z

65.79 KB, 下载次数: 334, 下载积分: 吾爱币 -1 CB

PW:Sound

点评

真是老毕啊  发表于 2015-11-14 11:10
幸亏大神这次没用英文  发表于 2015-11-13 22:50
扫雷这么简单游戏你还要用OD。。。  发表于 2015-11-13 22:43
你是有多屌,扫雷从来都不知道如何去玩。  发表于 2015-11-13 21:00

免费评分

参与人数 38吾爱币 +1 热心值 +38 收起 理由
GNUBD + 1 + 1 谢谢@Thanks!
yangqyloki + 1 用心讨论,共获提升!
Winmu + 1 非常感谢
robber + 1 热心回复!
yhzh + 1 热心回复!
砂砾酱 + 1 中文!! 好评!!
清香白莲 + 1 我很赞同!
EternityPM + 1 感谢发布原创作品,吾爱破解论坛因你更精彩.
eric2056 + 1 我很赞同!
fanvalen + 1 我很赞同!
NYX + 1 请收下我的膝盖
Thefirst1 + 1 感谢发布原创作品,吾爱破解论坛因你更精彩.
Zde_Hui + 1 牛逼的用OD去玩扫雷,我很赞同
Summer1998菜鸟 + 1 扫雷还能玩的如此之高端佩服佩服!
taylor薯条 + 1 我很赞同!
药石无医 + 1 向大牛学习,苦于扫雷被虐,今天有解决方案.
劫局丶 + 1 收下我的膝盖
FannyKong + 1 我很赞同!
LOLOL + 1 就想说楼主6666的飞起!!!!
枫MapleLCG + 1 牛逼
1875979715 + 1 热心回复!
不懂767 + 1 你真的是够了
三笠·阿克曼 + 1 好厉害,崇拜
Poison丶biting + 1 我很赞同!
小俊的风潇 + 1 好厉害
zhaoxinyu2012 + 1 热心回复!
WJJIahUa + 1 已经处理,感谢您对吾爱破解论坛的支持!
Ebichu + 1 碉堡了
c516730499 + 1 大神会玩
凌云9 + 1 我很赞同!
赖哥 + 1 太牛逼 膜拜
Peace + 1 热心回复!
超哥哥 + 1 这是真的无聊
追风筝的骇纸 + 1 感谢发布原创作品,吾爱破解论坛因你更精彩.
wb9353 + 1 欢迎分析讨论交流,吾爱破解论坛有你更精彩.
yypE + 1 欢迎分析讨论交流,吾爱破解论坛有你更精彩.
蓝洛水深 + 1 厉害!学习了
wgz001 + 1 感谢发布原创作品,吾爱破解论坛因你更精彩.

查看全部评分

本帖被以下淘专辑推荐:

发帖前要善用论坛搜索功能,那里可能会有你要找的答案或者已经有人发布过相同内容了,请勿重复发帖。

gyang1987 发表于 2016-7-24 10:21 来自手机
扫雷还要破解?本来就是消磨时间的小游戏,个人感觉破解意义不大。楼主纯闲,坚定完毕!
感情 发表于 2015-11-14 10:46
你真是够了!!!不错一看好专业的样子  本以为扫雷这么简单的东西反编译估计会简单些的   在一个纯白看白  好高深啊
Emil 发表于 2015-11-13 01:14
头像被屏蔽
yc016 发表于 2015-11-13 01:32
提示: 作者被禁止或删除 内容自动屏蔽
嬴承仲 发表于 2015-11-13 08:02
佩服,佩服!
我去玩几局!
妖孽成佛 发表于 2015-11-13 08:38
容我在地上趴一会儿。。。
叫兽丶 发表于 2015-11-13 09:11
大神连小游戏都不放过了
头像被屏蔽
陪你晒月亮 发表于 2015-11-13 09:15
提示: 作者被禁止或删除 内容自动屏蔽
wgz001 发表于 2015-11-13 09:33
最后一句是亮点,羡慕
何时带我飞
夏末的静寂 发表于 2015-11-13 09:40
我感觉言语不能表示我的震惊,只剩膜拜了,把扫雷完成这样我也是醉了
bfqjge 发表于 2015-11-13 09:50
分析好充实,感谢大神,好好学习!
您需要登录后才可以回帖 登录 | 注册[Register]

本版积分规则 警告:本版块禁止灌水或回复与主题无关内容,违者重罚!

快速回复 收藏帖子 返回列表 搜索

RSS订阅|小黑屋|处罚记录|联系我们|吾爱破解 - LCG - LSG ( 京ICP备16042023号 | 京公网安备 11010502030087号 )

GMT+8, 2024-4-28 15:01

Powered by Discuz!

Copyright © 2001-2020, Tencent Cloud.

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