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