本帖最后由 红绡枫叶 于 2013-11-3 18:14 编辑
Crackme有以下特点: 1,由于是win32汇编语言编写,反汇编代码几乎和源代码一样, 特别适合新手分析. 2,”麻雀虽小,五脏俱全”Crackme以对话框为主窗口(模态),虽然没有 自己的消息循环结构(此时是系统内建),但消息处理过程也是很典型的. 3,新手会”惊奇”的发现,搜索不到字符串,==||,但是鉴于程序太小,随便往上翻看就看到了, 对!字符串”变成”资源载入使用,一般的软件开发都是这样做的….,没有用到 GetWindowText,GetDlgItemText一类的函数来获取文本编辑框的内容…. 4,双线程编程.我把消息处理过程与验证过程分开在两个线程里 5,算法比较简单….希望有人把注册机源码贴上来 6,外带一点ReserveMe,请把serial的长度由15改为30及以上…
不久后我将贴上汇编源码…..代码不足之处请不吝指出,谢谢
希望论坛越办越好...
已修改serial最小长度为6.....
;>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
.386
.model flat,stdcall
option casemap:none
;>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
; Include 文件定义
include windows.inc
include gdi32.inc
includelib gdi32.lib
include user32.inc
includelib user32.lib
include kernel32.inc
includelib kernel32.lib
;>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
;equ 等值定义
DLG_MAIN equ 1
IDC_EDIT equ 2
IDC_STC equ 3
IDC_Button_Try equ 4
IDC_Button_ABOUT equ 5
C_ICO equ 6
szUnRegInfo equ 100
szUnRegCap equ 101
szRegedInfo equ 102
szRegedCap equ 103
szAbout equ 104
szAboutCap equ 105
;>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
; 数据段
.data?
hInstance dd ?
hIcon dd ?
hEdit dd ?
szRegBuff db 100 dup(?)
szInfoBuff db 80 dup(?)
szInfoCapBuff db 20 dup(?)
zRegLenth db ?
boolJudge db ? ;全局标志变量
;>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
; 代码段
.code
;>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
;注册判断
_RegJudge proc uses ebx esi edi,_lParam
LOCAL CmpLenth: byte ;局部变量的申明,要特别注意它是用ebp当作指针存储的
pushad
mov ebx,offset szRegBuff
mov ebp,offset szRegBuff ;输入字符缓冲区地址
movzx eax,zRegLenth
movzx edx,zRegLenth ;字符长度
.if eax >=6 ;--------------------------------算法区
mov esi,edx
mov ecx,2
div cl
.if ah!=0
add al,1
movzx ecx,al
mov CmpLenth,al
mov al,byte ptr [ebx+1]
mov byte ptr [ebp+edx],al
.else
movzx ecx,al
mov CmpLenth,al
sub esi,1
.endif
xor eax,eax
push ebp ;-------------------注意,ebp入栈,不然等会儿用到局部变量时候会出大问题,当然也要注意堆栈平衡
.while ecx>=1
movzx edx,byte ptr [ebx]
movzx edi,byte ptr [ebp+esi]
xor edx,edi
add eax,edx
imul eax,ecx
inc ebx
dec ebp ;-----------此处更改了ebp
dec ecx
.endw
.if eax==102 || eax==345 || eax==235
mov boolJudge,TRUE
.else
mov boolJudge,FALSE
.endif
pop ebp ;---------------恢复ebp以便使用局部变量
mov cl,CmpLenth
mov ebx,offset szRegBuff
mov ebp,offset szRegBuff
.while ecx>=1
movzx edx,byte ptr [ebx]
movzx edi,byte ptr [ebp+esi]
.if edx==edi
mov boolJudge,FALSE
.break
.endif
inc ebx
dec ebp
dec ecx
.endw
.else
mov boolJudge,FALSE
.endif ;---------------------------------------------------------算法区
popad
ret
_RegJudge endp
;>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
; 窗口过程
;>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
_ProcWinMain proc uses ebx edi esi hWnd,uMsg,wParam,lParam ;hWnd 即为对话框句柄
LOCAL RegThreadId: dword
mov eax,uMsg
.if eax == WM_INITDIALOG
invoke LoadIcon,hInstance,C_ICO
mov hIcon,eax
invoke GetDlgItem,hWnd,IDC_EDIT
mov hEdit,eax
invoke SendMessage,hWnd,WM_SETICON,ICON_SMALL,hIcon
.elseif eax == WM_CLOSE
invoke EndDialog,hWnd,NULL
.elseif eax == WM_COMMAND
movzx eax,word ptr wParam
.if eax==IDC_EDIT ;------------文本编辑框消息
invoke GetDlgItem,hWnd,IDC_EDIT
mov hEdit,eax
invoke SendMessage,hEdit,EM_LIMITTEXT,15,NULL
invoke SendMessage,hEdit,WM_GETTEXT,30,offset szRegBuff
invoke SendMessage,hEdit,WM_GETTEXTLENGTH,NULL,NULL
mov zRegLenth,al
invoke CreateThread,NULL,0,offset _RegJudge,NULL,0,addr RegThreadId;-----新建算法线程
invoke CloseHandle,eax
.elseif eax==IDC_Button_Try
.if boolJudge==FALSE
invoke LoadString,hInstance,szUnRegInfo,offset szInfoBuff,80
invoke LoadString,hInstance,szUnRegCap,offset szInfoCapBuff,20
invoke MessageBoxEx,hWnd,offset szInfoBuff,offset szInfoCapBuff,MB_ICONWARNING,NULL
.elseif boolJudge==TRUE
invoke LoadString,hInstance,szRegedInfo,offset szInfoBuff,80
invoke LoadString,hInstance,szRegedCap,offset szInfoCapBuff,20
invoke MessageBox,hWnd,offset szInfoBuff,offset szInfoCapBuff,MB_ICONASTERISK
.endif
.elseif eax==IDC_Button_ABOUT
invoke LoadString,hInstance,szAbout,offset szInfoBuff,80
invoke LoadString,hInstance,szAboutCap,offset szInfoCapBuff,20
invoke MessageBeep,MB_ICONASTERISK
invoke MessageBox,hWnd,offset szInfoBuff,offset szInfoCapBuff,MB_DEFBUTTON2
.endif
.else
mov eax,FALSE
ret
.endif
mov eax,TRUE
ret
_ProcWinMain endp
;>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
start: ;程序入口
invoke GetModuleHandle,NULL
mov hInstance ,eax
invoke DialogBoxParam,hInstance,DLG_MAIN,NULL,offset _ProcWinMain,NULL
invoke ExitProcess,NULL
;>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
end start
|