;---------------------------------------------------------------
;【程序名称】:我的小CrackMe,^-^
;【适用系统】:Win98以上
;【作 者】:wHt
;【日 期】:2005-7-15
;【版 权】:没有^Q^,但如欲转载,请保持本程序的完整,并注明:
; 转载自“www.aogosoft.com”。(大家好像写上流行这个)
;----------------------------------------------------------------
1 ;----------------
2 ;编译模式="DLG"
3 ;----------------
4
5 .586
6 .Model Flat, StdCall
7 Option Casemap :None
8 ;-------------------------------------------------------
9 ;导入库
10 Include windows.inc
11 Include Kernel32.inc
12 Include User32.inc
13
14 includelib Kernel32.lib
15 includelib User32.lib
16 ;-------------------------------------------------------
17
18 ;-------------------------------------------------------
19 ;过程声明
20 DlgProc proto :DWORD,:DWORD,:DWORD,:DWORD
21 CryptName proto :DWORD,:DWORD,:DWORD
22 CryptCodeCompName proto :DWORD,:DWORD,:DWORD,:DWORD,:DWORD
23 DeCryptCode proto :DWORD
24 _Debug proto :DWORD,:DWORD
25 CreateFunc proto :DWORD,:DWORD
26 ;-------------------------------------------------------
27
28 ;-------------------------------------------------------
29 ;花指令宏(两组花)
30 JUNPCODE1 MACRO
31 call $+14
32 db 0e8h
33 db 0EBh
34 add BYTE ptr [esp],2
35 retn
36 db 0e8h
37 db 0EBh
38 add esp,4
39 call $-10
40 db 0e8h
41 db 0ebh
42 ENDM
43
44 JUNPCODE2 MACRO
45 push eax
46 call $+7
47 db 0e8h
48 db 0e9h
49 add esp,4
50 mov eax,$+10
51 add eax,2
52 jmp eax
53 db 0e8h
54 db 0ebh
55 pop eax
56 ENDM
57
58 ;-------------------------------------------------------
59 .const
60
61 DLG_MAIN equ 100
62 DLG_EDIT1 equ 1000
63 DLG_EDIT2 equ 1001
64
65 ;-------------------------------------------------------
66 .data ;数据段
67 _table dd 1 ;注册成功标志1
68 s1 db "0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz",0
69 lpszCapOk db "Ok",0
70 lpszNameBuff1 db 200 dup(0)
71 lpszMsgOk db "注册成功!^Q^!",0
72 lpszCodeBuff db 200 dup(0)
73 _szGetDlgItemText db "GetDlgItemTextA",0
74 szUser32 db "User32.dll",0
75 dwFlags dd 0 ;注册成功标志2
76 dwMsgOk dd 0
77 dwCapOk dd 0
78
79 ;-------------------------------------------------------
80 .data?
81 hInstance dd ?
82
83
84 ;-------------------------------------------------------
85 .CODE
86
87 ;创建API函数地址函数,szModule指向Dll模块名,szFunc指向函数名。EAX返回函数入口地址。
88 CreateFunc proc szModule:DWORD,szFunc:DWORD
89 mov eax,szModule
90 invoke GetModuleHandle,eax
91 mov edx,szFunc
92 invoke GetProcAddress,eax,edx
93 ret
94 CreateFunc endp
95
96 ;CC断点检测,dwFunc指向函数入口地址,dwSize检测代码的长度,若代码有CC断点则返回1,否则返回0
97 _Debug proc uses edi dwFunc:DWORD,dwSize
98 mov eax,dwFunc
99 mov edi,dwSize
100 @@:
101 dec edi
102 jz @f
103 mov ecx,50h
104 xor ecx,9ch
105 cmp BYTE ptr [eax+edi],cl
106 jnz @b
107 mov eax,1
108 ret
109 @@:
110 xor eax,eax
111 ret
112 _Debug endp
113
114 ;注册机函数。szStr指向要解密的字符。
115 DeCryptCode proc USES edi esi ebx szStr:DWORD
116 mov eax,szStr
117 invoke lstrlen,eax
118 mov ecx,eax
119 mov eax,szStr
120 @@:
121 sub BYTE ptr [eax],20h
122 inc eax
123 dec ecx
124 jnz @b
125 ret
126 DeCryptCode endp
127
128 ;Name加密函数,szName指向加密的字符,szNameBuff为输出加密字符空间,szConst指向一串字符表
129 CryptName proc uses edi esi ebx szName:DWORD,szNameBuff:DWORD,szConst:DWORD
130 mov eax,szConst
131 invoke lstrlen,eax
132 mov ecx,eax
133 xor esi,esi
134 @@:
135 mov eax,szName
136 movzx eax,BYTE ptr[eax+esi]
137 or al,al
138 jz @f
139 add eax,ecx
140 cdq
141 div ecx
142 mov eax,szConst
143 movzx eax,BYTE ptr [eax+edx]
144 mov edx,szNameBuff
145 mov [edx+esi],al
146 inc esi
147 jmp @b
148 @@:
149 ret
150 CryptName endp
151
152 ;加密Code字符并比较字符,szCode指向Code的字符,szCodeBuff为保存加密的Code空间,lpszNameBuff,指向加密后的szNameBuff地址,szConst指向一串字符串常数。szCodeSize,Code的字符长度。
153 CryptCodeCompName proc uses edi esi ebx szCode:DWORD,szCodeBuff:DWORD,lpszNameBuff:DWORD,szConst:DWORD,szCodeSize:DWORD
154 mov eax,szConst
155 invoke lstrlen,eax
156 mov ecx,eax
157 xor esi,esi
158 @@:
159 mov eax,szCode
160 movzx eax,BYTE ptr [eax+esi]
161 or al,al
162 jz @f
163 lea eax,[ecx+20h+eax]
164 cdq
165 div ecx
166 mov eax,szConst
167 movzx eax,BYTE ptr[eax+edx]
168 mov edx,szCodeBuff
169 mov [edx+esi],al
170 inc esi
171 jmp @b
172 @@:
173 xor esi,esi
174 @@:
175 mov eax,lpszNameBuff
176 mov edx,szCodeBuff
177 movzx eax,BYTE ptr [eax+esi]
178 or al,al
179 jz @f
180 xor [edx+esi],al
181 inc esi
182 jmp @b
183 @@:
184 mov eax,[edx]
185 ret
186 CryptCodeCompName endp
187
188 ;异常句柄地址
189 Exception_Handle proc Exception_Pointers:DWORD
190 .if _table != 0 ;比较标志1是否不为零
191 mov eax,1
192 ret
193 .endif
194 mov eax,Exception_Pointers
195 mov eax,[eax+4]
196 assume eax:ptr CONTEXT
197 xor edx,edx
198 ;Drx寄存器清0
199 mov [eax].iDr0,edx
200 mov [eax].iDr1,edx
201 mov [eax].iDr2,edx
202 mov [eax].iDr3,edx
203 mov [eax].iDr6,edx
204 mov [eax].iDr7,edx
205 mov [eax].regEip,offset RegOk ;修改EIP地址,异常结束后会转到这个地址继续运行。
206 assume eax:nothing
207 mov eax,dwFlags ;呵呵,这个标志有什么用,你们自己猜猜^-^
208 and eax,1
209 dec eax
210 ret
211 Exception_Handle endp
212
213 DlgProc proc USES edi esi ebx hWnd:HWND,uMsg:UINT,wParam:WPARAM,lParam:LPARAM
214 LOCAL szName[8]:byte
215 LOCAL szCode[8]:byte
216 LOCAL szNameBuff[8]:byte
217 LOCAL szCodeBuff[8]:byte
218 .if uMsg==WM_INITDIALOG
219 push offset lpszMsgOk
220 pop dwMsgOk
221 invoke LoadIcon,hInstance,100
222 invoke SendMessage,hWnd,WM_SETICON,ICON_SMALL,eax
223 push offset lpszCapOk
224 pop dwCapOk
225 .elseif uMsg==WM_COMMAND
226 mov eax,wParam
227 .if ax==IDOK
228 ;创建GetDlgItemText函数地址,如果返回0则退出
229 invoke CreateFunc,addr szUser32,addr _szGetDlgItemText
230 .if eax==0
231 mov eax,TRUE
232 ret
233 .endif
234 ;Anit-Debug,检测代码前几位有没有断点CC,返回1则退出注册码算法,下面几个类似
235 invoke _Debug,eax,4
236 .if eax==1
237 mov eax,TRUE
238 ret
239 .endif
240 mov eax,offset _TEABLE1
241 dec eax
242 invoke _Debug,eax,20h
243 .if eax==1
244 mov eax,TRUE
245 ret
246 .endif
247 mov eax,offset _TEABLE2
248 dec eax
249 invoke _Debug,eax,20h
250 .if eax==1
251 mov eax,TRUE
252 ret
253 .endif
254 mov eax,offset GetDlgItemTextA
255 sub eax,20h
256 invoke _Debug,eax,40h
257 .if eax==1
258 mov eax,TRUE
259 ret
260 .endif
261 _TEABLE1:
262 invoke GetDlgItemText,hWnd,DLG_EDIT1,addr szName,sizeof szName
263 _TEABLE2:
264 invoke GetDlgItemText,hWnd,DLG_EDIT2,addr szCode,sizeof szCode
265 invoke CryptName,addr szName,addr szNameBuff,addr s1
266 invoke lstrlen,addr szCode
267 invoke CryptCodeCompName,addr szCode,addr szCodeBuff,addr szNameBuff,addr s1,eax
268 xor dwFlags,eax ;修改注册标志
269 mov _table,eax ;修改注册标志
270 add eax,20h
271 cdq
272 lea ecx,szCodeBuff
273 mov ecx,[ecx]
274 div ecx ;注册码正确会在这里产生除0异常
275 cmp eax,0 ;迷惑指令,没用的^-^
276 jz _end
277 jmp _Result
278 RegOk::
279 push 0
280 mov eax,dwCapOk
281 push eax
282 mov eax,dwMsgOk
283 push eax
284 push 0
285 call MessageBox
286 jmp _end
287 _Result:
288 jz _end
289 xor eax,eax
290 _end:
291 inc eax
292 .elseif ax==2
293 invoke EndDialog,hWnd,FALSE
294 .endif
295 .elseif uMsg==WM_CLOSE
296 invoke EndDialog,hWnd,FALSE
297 .else
298 mov eax,FALSE
299 ret
300 .endif
301 mov eax,TRUE
302 ret
303 DlgProc endp
304
305 ;-------------------------------------------------------
306 ;WinMain
307 START:
308 ;设置异常链,当程序产生异常后会转到Exception_Handle继续运行。
309 invoke SetUnhandledExceptionFilter,addr Exception_Handle
310 invoke GetModuleHandle,NULL
311 mov hInstance,eax
312 invoke DialogBoxParam,hInstance,DLG_MAIN,0,offset DlgProc,0
313 invoke ExitProcess,0
314 END START
;【程序名称】:我的小CrackMe,^-^
;【适用系统】:Win98以上
;【作 者】:wHt
;【日 期】:2005-7-15
;【版 权】:没有^Q^,但如欲转载,请保持本程序的完整,并注明:
; 转载自“www.aogosoft.com”。(大家好像写上流行这个)
;----------------------------------------------------------------
1 ;----------------
2 ;编译模式="DLG"
3 ;----------------
4
5 .586
6 .Model Flat, StdCall
7 Option Casemap :None
8 ;-------------------------------------------------------
9 ;导入库
10 Include windows.inc
11 Include Kernel32.inc
12 Include User32.inc
13
14 includelib Kernel32.lib
15 includelib User32.lib
16 ;-------------------------------------------------------
17
18 ;-------------------------------------------------------
19 ;过程声明
20 DlgProc proto :DWORD,:DWORD,:DWORD,:DWORD
21 CryptName proto :DWORD,:DWORD,:DWORD
22 CryptCodeCompName proto :DWORD,:DWORD,:DWORD,:DWORD,:DWORD
23 DeCryptCode proto :DWORD
24 _Debug proto :DWORD,:DWORD
25 CreateFunc proto :DWORD,:DWORD
26 ;-------------------------------------------------------
27
28 ;-------------------------------------------------------
29 ;花指令宏(两组花)
30 JUNPCODE1 MACRO
31 call $+14
32 db 0e8h
33 db 0EBh
34 add BYTE ptr [esp],2
35 retn
36 db 0e8h
37 db 0EBh
38 add esp,4
39 call $-10
40 db 0e8h
41 db 0ebh
42 ENDM
43
44 JUNPCODE2 MACRO
45 push eax
46 call $+7
47 db 0e8h
48 db 0e9h
49 add esp,4
50 mov eax,$+10
51 add eax,2
52 jmp eax
53 db 0e8h
54 db 0ebh
55 pop eax
56 ENDM
57
58 ;-------------------------------------------------------
59 .const
60
61 DLG_MAIN equ 100
62 DLG_EDIT1 equ 1000
63 DLG_EDIT2 equ 1001
64
65 ;-------------------------------------------------------
66 .data ;数据段
67 _table dd 1 ;注册成功标志1
68 s1 db "0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz",0
69 lpszCapOk db "Ok",0
70 lpszNameBuff1 db 200 dup(0)
71 lpszMsgOk db "注册成功!^Q^!",0
72 lpszCodeBuff db 200 dup(0)
73 _szGetDlgItemText db "GetDlgItemTextA",0
74 szUser32 db "User32.dll",0
75 dwFlags dd 0 ;注册成功标志2
76 dwMsgOk dd 0
77 dwCapOk dd 0
78
79 ;-------------------------------------------------------
80 .data?
81 hInstance dd ?
82
83
84 ;-------------------------------------------------------
85 .CODE
86
87 ;创建API函数地址函数,szModule指向Dll模块名,szFunc指向函数名。EAX返回函数入口地址。
88 CreateFunc proc szModule:DWORD,szFunc:DWORD
89 mov eax,szModule
90 invoke GetModuleHandle,eax
91 mov edx,szFunc
92 invoke GetProcAddress,eax,edx
93 ret
94 CreateFunc endp
95
96 ;CC断点检测,dwFunc指向函数入口地址,dwSize检测代码的长度,若代码有CC断点则返回1,否则返回0
97 _Debug proc uses edi dwFunc:DWORD,dwSize
98 mov eax,dwFunc
99 mov edi,dwSize
100 @@:
101 dec edi
102 jz @f
103 mov ecx,50h
104 xor ecx,9ch
105 cmp BYTE ptr [eax+edi],cl
106 jnz @b
107 mov eax,1
108 ret
109 @@:
110 xor eax,eax
111 ret
112 _Debug endp
113
114 ;注册机函数。szStr指向要解密的字符。
115 DeCryptCode proc USES edi esi ebx szStr:DWORD
116 mov eax,szStr
117 invoke lstrlen,eax
118 mov ecx,eax
119 mov eax,szStr
120 @@:
121 sub BYTE ptr [eax],20h
122 inc eax
123 dec ecx
124 jnz @b
125 ret
126 DeCryptCode endp
127
128 ;Name加密函数,szName指向加密的字符,szNameBuff为输出加密字符空间,szConst指向一串字符表
129 CryptName proc uses edi esi ebx szName:DWORD,szNameBuff:DWORD,szConst:DWORD
130 mov eax,szConst
131 invoke lstrlen,eax
132 mov ecx,eax
133 xor esi,esi
134 @@:
135 mov eax,szName
136 movzx eax,BYTE ptr[eax+esi]
137 or al,al
138 jz @f
139 add eax,ecx
140 cdq
141 div ecx
142 mov eax,szConst
143 movzx eax,BYTE ptr [eax+edx]
144 mov edx,szNameBuff
145 mov [edx+esi],al
146 inc esi
147 jmp @b
148 @@:
149 ret
150 CryptName endp
151
152 ;加密Code字符并比较字符,szCode指向Code的字符,szCodeBuff为保存加密的Code空间,lpszNameBuff,指向加密后的szNameBuff地址,szConst指向一串字符串常数。szCodeSize,Code的字符长度。
153 CryptCodeCompName proc uses edi esi ebx szCode:DWORD,szCodeBuff:DWORD,lpszNameBuff:DWORD,szConst:DWORD,szCodeSize:DWORD
154 mov eax,szConst
155 invoke lstrlen,eax
156 mov ecx,eax
157 xor esi,esi
158 @@:
159 mov eax,szCode
160 movzx eax,BYTE ptr [eax+esi]
161 or al,al
162 jz @f
163 lea eax,[ecx+20h+eax]
164 cdq
165 div ecx
166 mov eax,szConst
167 movzx eax,BYTE ptr[eax+edx]
168 mov edx,szCodeBuff
169 mov [edx+esi],al
170 inc esi
171 jmp @b
172 @@:
173 xor esi,esi
174 @@:
175 mov eax,lpszNameBuff
176 mov edx,szCodeBuff
177 movzx eax,BYTE ptr [eax+esi]
178 or al,al
179 jz @f
180 xor [edx+esi],al
181 inc esi
182 jmp @b
183 @@:
184 mov eax,[edx]
185 ret
186 CryptCodeCompName endp
187
188 ;异常句柄地址
189 Exception_Handle proc Exception_Pointers:DWORD
190 .if _table != 0 ;比较标志1是否不为零
191 mov eax,1
192 ret
193 .endif
194 mov eax,Exception_Pointers
195 mov eax,[eax+4]
196 assume eax:ptr CONTEXT
197 xor edx,edx
198 ;Drx寄存器清0
199 mov [eax].iDr0,edx
200 mov [eax].iDr1,edx
201 mov [eax].iDr2,edx
202 mov [eax].iDr3,edx
203 mov [eax].iDr6,edx
204 mov [eax].iDr7,edx
205 mov [eax].regEip,offset RegOk ;修改EIP地址,异常结束后会转到这个地址继续运行。
206 assume eax:nothing
207 mov eax,dwFlags ;呵呵,这个标志有什么用,你们自己猜猜^-^
208 and eax,1
209 dec eax
210 ret
211 Exception_Handle endp
212
213 DlgProc proc USES edi esi ebx hWnd:HWND,uMsg:UINT,wParam:WPARAM,lParam:LPARAM
214 LOCAL szName[8]:byte
215 LOCAL szCode[8]:byte
216 LOCAL szNameBuff[8]:byte
217 LOCAL szCodeBuff[8]:byte
218 .if uMsg==WM_INITDIALOG
219 push offset lpszMsgOk
220 pop dwMsgOk
221 invoke LoadIcon,hInstance,100
222 invoke SendMessage,hWnd,WM_SETICON,ICON_SMALL,eax
223 push offset lpszCapOk
224 pop dwCapOk
225 .elseif uMsg==WM_COMMAND
226 mov eax,wParam
227 .if ax==IDOK
228 ;创建GetDlgItemText函数地址,如果返回0则退出
229 invoke CreateFunc,addr szUser32,addr _szGetDlgItemText
230 .if eax==0
231 mov eax,TRUE
232 ret
233 .endif
234 ;Anit-Debug,检测代码前几位有没有断点CC,返回1则退出注册码算法,下面几个类似
235 invoke _Debug,eax,4
236 .if eax==1
237 mov eax,TRUE
238 ret
239 .endif
240 mov eax,offset _TEABLE1
241 dec eax
242 invoke _Debug,eax,20h
243 .if eax==1
244 mov eax,TRUE
245 ret
246 .endif
247 mov eax,offset _TEABLE2
248 dec eax
249 invoke _Debug,eax,20h
250 .if eax==1
251 mov eax,TRUE
252 ret
253 .endif
254 mov eax,offset GetDlgItemTextA
255 sub eax,20h
256 invoke _Debug,eax,40h
257 .if eax==1
258 mov eax,TRUE
259 ret
260 .endif
261 _TEABLE1:
262 invoke GetDlgItemText,hWnd,DLG_EDIT1,addr szName,sizeof szName
263 _TEABLE2:
264 invoke GetDlgItemText,hWnd,DLG_EDIT2,addr szCode,sizeof szCode
265 invoke CryptName,addr szName,addr szNameBuff,addr s1
266 invoke lstrlen,addr szCode
267 invoke CryptCodeCompName,addr szCode,addr szCodeBuff,addr szNameBuff,addr s1,eax
268 xor dwFlags,eax ;修改注册标志
269 mov _table,eax ;修改注册标志
270 add eax,20h
271 cdq
272 lea ecx,szCodeBuff
273 mov ecx,[ecx]
274 div ecx ;注册码正确会在这里产生除0异常
275 cmp eax,0 ;迷惑指令,没用的^-^
276 jz _end
277 jmp _Result
278 RegOk::
279 push 0
280 mov eax,dwCapOk
281 push eax
282 mov eax,dwMsgOk
283 push eax
284 push 0
285 call MessageBox
286 jmp _end
287 _Result:
288 jz _end
289 xor eax,eax
290 _end:
291 inc eax
292 .elseif ax==2
293 invoke EndDialog,hWnd,FALSE
294 .endif
295 .elseif uMsg==WM_CLOSE
296 invoke EndDialog,hWnd,FALSE
297 .else
298 mov eax,FALSE
299 ret
300 .endif
301 mov eax,TRUE
302 ret
303 DlgProc endp
304
305 ;-------------------------------------------------------
306 ;WinMain
307 START:
308 ;设置异常链,当程序产生异常后会转到Exception_Handle继续运行。
309 invoke SetUnhandledExceptionFilter,addr Exception_Handle
310 invoke GetModuleHandle,NULL
311 mov hInstance,eax
312 invoke DialogBoxParam,hInstance,DLG_MAIN,0,offset DlgProc,0
313 invoke ExitProcess,0
314 END START
浙公网安备 33010602011771号