您的位置:首页 > 其它

OllyDBG 入门系列(三)-函数参考 之 注册机的实现

2010-08-18 14:01 645 查看
本程序是在我阅读了

OllyDBG 入门系列(三)-函数参考http://bbs.pediy.com/showthread.php?s=&threadid=21330

之后根据已知的分析结果用win32汇编实现的练习。

具体的分析方法在原文中已经有了非常详细的解释,这里仅给出具体的注册机实现代码。由于刚学破解,请笔下留情。

代码

WndProc proc hWin:HWND,uMsg:UINT,wParam:WPARAM,lParam:LPARAM
LOCAL @DriveType: DWORD
LOCAL @szVolumnName [128] : BYTE
LOCAL @szBuffer[128] : BYTE

pushad
mov eax,uMsg
.if eax==WM_INITDIALOG
push hWin
pop hWnd

.elseif eax==WM_COMMAND
mov eax,wParam
and eax,0FFFFh
.if eax==IDM_FILE_EXIT
invoke SendMessage,hWin,WM_CLOSE,0,0
.elseif eax==IDM_HELP_ABOUT
invoke ShellAbout,hWin,addr AppName,addr AboutMsg,NULL
.elseif eax == IDC_BTN1
;register

;为局部变量清零
push edi
mov ecx, 128
lea edi, @szVolumnName
mov al, 0
rep STOSB
pop edi

;获得卷轴属性
invoke GetDriveType, NULL
push eax
pop @DriveType

;获得卷轴名
invoke GetVolumeInformation, NULL, addr @szVolumnName, 128, \
NULL, NULL, NULL, NULL, NULL

;按照破解得到的算法进行解密
xor edi, edi
mov ecx, @DriveType
.repeat
mov eax, ecx
mov ebx, dword ptr @szVolumnName
mul ebx
add edi, eax
;dec ecx ;在反汇编后.untilcxz会自动递减ecx
.untilcxz
xor edi, 797a7553h

;将十六进制转换成十进制, Format被定义为db '%d'
invoke wsprintf, addr @szBuffer, addr Format, edi

;显示结果
invoke MessageBox, NULL, addr @szBuffer, addr Result, MB_OK
.endif
.elseif eax==WM_CLOSE
invoke DestroyWindow,hWin
.elseif uMsg==WM_DESTROY
invoke PostQuitMessage,NULL
.else
invoke DefWindowProc,hWin,uMsg,wParam,lParam
ret
.endif
popad

xor eax,eax
ret

WndProc endp

最后在使用的时候,只需要将该程序与待破解程序放在一起即可。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: