码迷,mamicode.com
首页 > 其他好文 > 详细

crackme_zapline分析

时间:2015-02-21 06:28:36      阅读:201      评论:0      收藏:0      [点我收藏+]

标签:

  1 【破文标题】crackme_zapline 分析
  2 【破文作者】CloAk
  3 【作者邮箱】1211223967@qq.com
  4 【作者主页】
  5 【破解工具】OD,...
  6 【破解平台】Windows
  7 ------------------------------------------------------------------------
  8 【破解过程】//zaplineCreackme 分析
  9 
 10 // 首先,  程序没有按钮 目测使用 bp GetWindowText 
 11 
 12 // 早先已经调试过, 但是因为没仔细看, 研究了半天
 13 
 14 // 首先下 bp GetWindowTextW 断下返回来到下面,
 15 
 16 00EBCA12  |.  56            PUSH ESI                                 ; /Count = 0x8
 17 00EBCA13  |.  50            PUSH EAX                                 ; |Buffer = 00000007
 18 00EBCA14  |.  8B03          MOV EAX, DWORD PTR DS:[EBX]              ; |
 19 00EBCA16  |.  50            PUSH EAX                                 ; |hWnd = 00000007
 20 00EBCA17  |.  FF15 E002ED00 CALL DWORD PTR DS:[<&USER32.GetWindowTex>; \GetWindowTextW
 21 00EBCA1D  |.  8BF0          MOV ESI, EAX
 22 00EBCA1F  |.  83FE FF       CMP ESI, -0x1
 23 00EBCA22  |.  75 13         JNZ SHORT 00EBCA37
 24 
 25 // 上面的地方没有上来, 走到retn 来到下面
 26 
 27 00EBCA60  /$  53            PUSH EBX
 28 00EBCA61  |.  56            PUSH ESI
 29 00EBCA62  |.  8BF1          MOV ESI, ECX
 30 00EBCA64  |.  57            PUSH EDI
 31 00EBCA65  |.  8DBE 78030000 LEA EDI, DWORD PTR DS:[ESI+0x378]
 32 00EBCA6B  |.  57            PUSH EDI
 33 00EBCA6C  |.  8D8E 84030000 LEA ECX, DWORD PTR DS:[ESI+0x384]
 34 00EBCA72  |.  E8 59FFFFFF   CALL 00EBC9D0                            ;  // 读取注册名
 35 00EBCA77  |.  8D86 7C030000 LEA EAX, DWORD PTR DS:[ESI+0x37C]        ;  ** 来到这里
 36 00EBCA7D  |.  50            PUSH EAX
 37 00EBCA7E  |.  8D8E 88030000 LEA ECX, DWORD PTR DS:[ESI+0x388]
 38 00EBCA84  |.  E8 47FFFFFF   CALL 00EBC9D0                            ;  // 读取代码
 39 00EBCA89  |.  8D9E 80030000 LEA EBX, DWORD PTR DS:[ESI+0x380]
 40 00EBCA8F  |.  53            PUSH EBX                                 ;  // 这两个参数是一样的 所以先不管了
 41 00EBCA90  |.  57            PUSH EDI                                 ; // 继续走过这个call  这个里边你可以自己跟一下
 42 00EBCA91  |.  E8 1AFDFFFF   CALL 00EBC7B0                            ;  // compare?
 43 00EBCA96  |.  83C4 08       ADD ESP, 0x8
 44 00EBCA99  |.  84C0          TEST AL, AL
 45 00EBCA9B  |.  74 33         JE SHORT 00EBCAD0
 46 00EBCA9D  |.  8B4E 04       MOV ECX, DWORD PTR DS:[ESI+0x4]
 47 00EBCAA0  |.  6A 35         PUSH 0x35                                ; /TimerID = 35 (53.)
 48 00EBCAA2  |.  51            PUSH ECX                                 ; |hWnd = NULL
 49 00EBCAA3  |.  FF15 3003ED00 CALL DWORD PTR DS:[<&USER32.KillTimer>]  ; \KillTimer
 50 00EBCAA9  |.  8B56 04       MOV EDX, DWORD PTR DS:[ESI+0x4]
 51 00EBCAAC  |.  6A 36         PUSH 0x36                                ; /TimerID = 36 (54.)
 52 00EBCAAE  |.  52            PUSH EDX                                 ; |hWnd = 009D0000
 53 00EBCAAF  |.  FF15 3003ED00 CALL DWORD PTR DS:[<&USER32.KillTimer>]  ; \KillTimer
 54 00EBCAB5  |.  57            PUSH EDI
 55 00EBCAB6  |.  8BCB          MOV ECX, EBX
 56 00EBCAB8  |.  E8 83EDFEFF   CALL 00EAB840
 57 00EBCABD  |.  8B46 04       MOV EAX, DWORD PTR DS:[ESI+0x4]
 58 00EBCAC0  |.  6A 00         PUSH 0x0                                 ; /Timerproc = NULL
 59 00EBCAC2  |.  68 C8000000   PUSH 0xC8                                ; |Timeout = 200. ms
 60 00EBCAC7  |.  6A 34         PUSH 0x34                                ; |TimerID = 34 (52.)
 61 00EBCAC9  |.  50            PUSH EAX                                 ; |hWnd = NULL
 62 00EBCACA  |.  FF15 F002ED00 CALL DWORD PTR DS:[<&USER32.SetTimer>]   ; \SetTimer
 63 00EBCAD0  |>  5F            POP EDI                                  ;  009DF938
 64 00EBCAD1  |.  5E            POP ESI                                  ;  009DF938
 65 00EBCAD2  |.  5B            POP EBX                                  ;  009DF938
 66 00EBCAD3  \.  C3            RETN
 67 
 68 // 走过retn来到下面这里
 69 00EBCAE0  /$  53            PUSH EBX
 70 00EBCAE1  |.  56            PUSH ESI
 71 00EBCAE2  |.  57            PUSH EDI
 72 00EBCAE3  |.  8BF1          MOV ESI, ECX
 73 00EBCAE5  |.  E8 76FFFFFF   CALL 00EBCA60                            ;  ** 在这里
 74 00EBCAEA  |.  8B96 78030000 MOV EDX, DWORD PTR DS:[ESI+0x378]        ;  读取注册名
 75 00EBCAF0  |.  8B4A F4       MOV ECX, DWORD PTR DS:[EDX-0xC]          ;  长度
 76 00EBCAF3  |.  33DB          XOR EBX, EBX
 77 00EBCAF5  |.  33C0          XOR EAX, EAX
 78 00EBCAF7  |.  85C9          TEST ECX, ECX
 79 00EBCAF9  |.  7E 1A         JLE SHORT 00EBCB15
 80 00EBCAFB  |.  EB 03         JMP SHORT 00EBCB00
 81 00EBCAFD  |   8D49 00       LEA ECX, DWORD PTR DS:[ECX]
 82 00EBCB00  |>  85C0          /TEST EAX, EAX
 83 00EBCB02  |.  78 44         |JS SHORT 00EBCB48
 84 00EBCB04  |.  3BC1          |CMP EAX, ECX
 85 00EBCB06  |.  7F 40         |JG SHORT 00EBCB48
 86 00EBCB08  |.  0FB73A        |MOVZX EDI, WORD PTR DS:[EDX]
 87 00EBCB0B  |.  40            |INC EAX
 88 00EBCB0C  |.  03DF          |ADD EBX, EDI
 89 00EBCB0E  |.  83C2 02       |ADD EDX, 0x2
 90 00EBCB11  |.  3BC1          |CMP EAX, ECX
 91 00EBCB13  |.^ 7C EB         \JL SHORT 00EBCB00                       ;  累加用户名ascii码
 92 00EBCB15  |>  8BB6 7C030000 MOV ESI, DWORD PTR DS:[ESI+0x37C]
 93 00EBCB1B  |.  8B4E F4       MOV ECX, DWORD PTR DS:[ESI-0xC]
 94 00EBCB1E  |.  33FF          XOR EDI, EDI
 95 00EBCB20  |.  33C0          XOR EAX, EAX
 96 00EBCB22  |.  85C9          TEST ECX, ECX
 97 00EBCB24  |.  7E 17         JLE SHORT 00EBCB3D
 98 00EBCB26  |.  8BD6          MOV EDX, ESI
 99 00EBCB28  |>  85C0          /TEST EAX, EAX
100 00EBCB2A  |.  78 1C         |JS SHORT 00EBCB48
101 00EBCB2C  |.  3BC1          |CMP EAX, ECX
102 00EBCB2E  |.  7F 18         |JG SHORT 00EBCB48
103 00EBCB30  |.  0FB732        |MOVZX ESI, WORD PTR DS:[EDX]
104 00EBCB33  |.  40            |INC EAX
105 00EBCB34  |.  03FE          |ADD EDI, ESI
106 00EBCB36  |.  83C2 02       |ADD EDX, 0x2
107 00EBCB39  |.  3BC1          |CMP EAX, ECX
108 00EBCB3B  |.^ 7C EB         \JL SHORT 00EBCB28                       ;  累加注册码ascii码
109 00EBCB3D  |>  33C0          XOR EAX, EAX
110 00EBCB3F  |.  3BDF          CMP EBX, EDI                                      ; 比较累加的数值对不对
111 00EBCB41  |.  5F            POP EDI                                  ;  009DF938
112 00EBCB42  |.  5E            POP ESI                                  ;  009DF938
113 00EBCB43      0F94C0        SETE AL                        // 这里可以改 setnt
114 00EBCB46  |.  5B            POP EBX                                  ;  009DF938
115 00EBCB47  |.  C3            RETN
116 
117 // 然后继续走过这个call
118 
119 00EBCCCE  |.  E8 0DFEFFFF   CALL 00EBCAE0
120 00EBCCD3  |.  85C0          TEST EAX, EAX                            ;  ** 来到这里
121 00EBCCD5      74 4D         JE SHORT 00EBCD24
122 00EBCCD7  |.  8B46 04       MOV EAX, DWORD PTR DS:[ESI+0x4]
123 00EBCCDA  |.  6A 34         PUSH 0x34                                ; /TimerID = 34 (52.)
124 00EBCCDC  |.  50            PUSH EAX                                 ; |hWnd = 00000035
125 00EBCCDD  |.  FF15 3003ED00 CALL DWORD PTR DS:[<&USER32.KillTimer>]  ; \KillTimer
126 00EBCCE3  |.  8B4E 04       MOV ECX, DWORD PTR DS:[ESI+0x4]
127 00EBCCE6  |.  6A 00         PUSH 0x0                                 ; /Timerproc = NULL
128 00EBCCE8  |.  68 C8000000   PUSH 0xC8                                ; |Timeout = 200. ms
129 00EBCCED  |.  6A 35         PUSH 0x35                                ; |TimerID = 35 (53.)
130 00EBCCEF  |.  51            PUSH ECX                                 ; |hWnd = 009DFAD8
131 00EBCCF0  |.  FF15 F002ED00 CALL DWORD PTR DS:[<&USER32.SetTimer>]   ; \SetTimer
132 00EBCCF6  |.  5E            POP ESI                                  ;  // 上面开始了时钟看到下面的0x35
133 00EBCCF7  |.  5D            POP EBP                                  ;  // 果断在 0xEBCCFB下断
134 00EBCCF8  |.  C2 0400       RETN 0x4
135 00EBCCFB  |>  83F8 35       CMP EAX, 0x35
136 00EBCCFE      75 24         JNZ SHORT 00EBCD24
137 00EBCD00  |.  E8 5BFEFFFF   CALL 00EBCB60                            ;  // 又是比较F7
138 00EBCD05  |.  85C0          TEST EAX, EAX
139 00EBCD07  |.  74 1B         JE SHORT 00EBCD24
140 00EBCD09  |.  8B56 04       MOV EDX, DWORD PTR DS:[ESI+0x4]
141 00EBCD0C  |.  6A 35         PUSH 0x35                                ; /TimerID = 35 (53.)
142 00EBCD0E  |.  52            PUSH EDX                                 ; |hWnd = 00200894 (吾爱破解2012CM大赛作品,class=ATL:00ED82E8)
143 00EBCD0F  |.  FF15 3003ED00 CALL DWORD PTR DS:[<&USER32.KillTimer>]  ; \KillTimer
144 00EBCD15  |.  6A 01         PUSH 0x1
145 00EBCD17  |.  68 EE030000   PUSH 0x3EE
146 00EBCD1C  |.  8D4E 50       LEA ECX, DWORD PTR DS:[ESI+0x50]
147 00EBCD1F  |.  E8 BCFEFFFF   CALL 00EBCBE0                            ;  成功标志
148 00EBCD24  |>  5E            POP ESI                                  ;  009DFAD8
149 00EBCD25  |.  5D            POP EBP                                  ;  009DFAD8
150 00EBCD26  \.  C2 0400       RETN 0x4
151 
152 //  来到0x00EBCD00, 看到类似刚才的代码我有些被弄混了!!
153 00EBCB79  |. /7E 1A         JLE SHORT 00EBCB95
154 00EBCB7B  |. |EB 03         JMP SHORT 00EBCB80
155 00EBCB7D  |  |8D49 00       LEA ECX, DWORD PTR DS:[ECX]
156 00EBCB80  |> |85C0          /TEST EAX, EAX
157 00EBCB82  |. |78 49         |JS SHORT 00EBCBCD
158 00EBCB84  |. |3BC1          |CMP EAX, ECX
159 00EBCB86  |. |7F 45         |JG SHORT 00EBCBCD
160 00EBCB88  |. |0FB73A        |MOVZX EDI, WORD PTR DS:[EDX]
161 00EBCB8B  |. |40            |INC EAX
162 00EBCB8C  |. |03DF          |ADD EBX, EDI
163 00EBCB8E  |. |83C2 02       |ADD EDX, 0x2
164 00EBCB91  |. |3BC1          |CMP EAX, ECX
165 00EBCB93  |.^|7C EB         \JL SHORT 00EBCB80
166 00EBCB95  |> \8BB6 7C030000 MOV ESI, DWORD PTR DS:[ESI+0x37C]
167 00EBCB9B  |.  8B4E F4       MOV ECX, DWORD PTR DS:[ESI-0xC]
168 00EBCB9E  |.  33FF          XOR EDI, EDI
169 00EBCBA0  |.  33C0          XOR EAX, EAX
170 00EBCBA2  |.  85C9          TEST ECX, ECX
171 00EBCBA4  |.  7E 17         JLE SHORT 00EBCBBD
172 00EBCBA6  |.  8BD6          MOV EDX, ESI
173 00EBCBA8  |>  85C0          /TEST EAX, EAX
174 00EBCBAA  |.  78 21         |JS SHORT 00EBCBCD
175 00EBCBAC  |.  3BC1          |CMP EAX, ECX
176 00EBCBAE  |.  7F 1D         |JG SHORT 00EBCBCD
177 00EBCBB0  |.  0FB732        |MOVZX ESI, WORD PTR DS:[EDX]
178 00EBCBB3  |.  40            |INC EAX
179 00EBCBB4  |.  03FE          |ADD EDI, ESI
180 00EBCBB6  |.  83C2 02       |ADD EDX, 0x2
181 00EBCBB9  |.  3BC1          |CMP EAX, ECX
182 00EBCBBB  |.^ 7C EB         \JL SHORT 00EBCBA8
183 00EBCBBD  |> \8D045B        LEA EAX, DWORD PTR DS:[EBX+EBX*2]        ;  **注册码累加的值 *3
184 00EBCBC0  |.  33C9          XOR ECX, ECX
185 00EBCBC2  |.  3BC7          CMP EAX, EDI
186 00EBCBC4  |.  0F94C1        SETE CL
187 00EBCBC7  |.  5F            POP EDI                                  ;  crackme_.00EBCD05
188 00EBCBC8  |.  5E            POP ESI                                  ;  crackme_.00EBCD05
189 00EBCBC9  |.  5B            POP EBX                                  ;  crackme_.00EBCD05
190 00EBCBCA  |.  8BC1          MOV EAX, ECX
191 00EBCBCC  |.  C3            RETN
192 
193 // 当上面的判断比较成功的话 即出现注册成功, 但是因为自己没细心看, 浪费了很多时间
194 
195 
196 
197 
198 
199 
200 ------------------------------------------------------------------------
201 【破解总结】参考sdzzb大神的破文 
202 http://www.52pojie.cn/forum.php?mod=viewthread&tid=146265
203 
204 // 总结
205 对每一个retn后的数据需要仔细观察!  , 特别是多层嵌套的call , 不要弄混了!
206 ------------------------------------------------------------------------
207 【版权声明】

 

crackme_zapline分析

标签:

原文地址:http://www.cnblogs.com/CLink/p/4296819.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!