crackme_zapline分析

  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 【版权声明】

 

你可能感兴趣的:(rack)