平常暖手

系统 : Windows xpphp

程序 : dccrackme1html

程序下载地址 :http://pan.baidu.com/s/1bpBlRXH
框架

要求 : 注册机编写 & 拆解nag窗口函数

使用工具 : OD & DeDe工具

可在看雪论坛中查找关于此程序的破文,传送门spa

 

DeDe载入程序查看“过程”标签,其中有两个事件:code

1.按钮点击,这确定就是注册的按钮了orm

2.窗口建立,看来程序运行时的msg就是在这里编写的htm

 

首先把双击打开窗口建立的代码,拉到最后发现关键代码:blog

* Reference to: dialogs.ShowMessage(AnsiString); | 004431A6   E8A9E6FFFF             call    00441854
004431AB   33C0                   xor eax, eax 004431AD   5A                     pop edx 004431AE   59                     pop ecx 004431AF   59                     pop ecx 004431B0   648910                 mov     fs:[eax], edx

函数采用eax指向的字符串做为参数,直接nop掉就能够。

 

或者也能够默默地帮他加点料:

鼠标选中内存区域,右击选择二进制-》编辑,在文本框输入一些字符串,再点击继续运行

 

。。。。。。

 

解决了烦人的窗口,如今来看看注册代码:

00441C08  /.  55            push    ebp                              ; Btn_click
00441C09  |.  8BEC          mov ebp, esp 00441C0B  |.  33C9          xor ecx, ecx 00441C0D  |.  51            push ecx 00441C0E  |.  51            push ecx 00441C0F  |.  51            push ecx 00441C10  |.  51            push ecx 00441C11  |.  53            push ebx 00441C12  |.  56            push esi 00441C13  |.  8945 FC       mov     dword ptr [ebp-4], eax 00441C16  |.  33C0          xor eax, eax 00441C18  |.  55            push ebp 00441C19  |.  68 CD1C4400   push    00441CCD
00441C1E  |.  64:FF30       push    dword ptr fs:[eax] 00441C21  |.  64:8920       mov     dword ptr fs:[eax], esp 00441C24  |.  33F6          xor esi, esi 00441C26  |.  8D55 F8       lea     edx, dword ptr [ebp-8] 00441C29  |.  8B45 FC       mov     eax, dword ptr [ebp-4] 00441C2C  |.  8B80 C8020000 mov eax, dword ptr [eax+2C8] 00441C32  |.  E8 8D16FEFF   call    004232C4                         ; 获取用户名
00441C37  |.  8B45 F8       mov     eax, dword ptr [ebp-8] 00441C3A  |.  E8 491EFCFF   call    00403A88                         ; 获取用户名长度
00441C3F  |.  8BD0          mov edx, eax 00441C41  |.  85D2          test    edx, edx                         ; 不能为0
00441C43  |.  7E 22         jle     short 00441C67
00441C45  |.  B9 01000000   mov     ecx, 1
00441C4A  |>  8B45 F8       /mov     eax, dword ptr [ebp-8] 00441C4D  |.  8A4408 FF     |mov     al, byte ptr [eax+ecx-1]        ; 循环迭代用户名字符串
00441C51  |.  25 FF000000   |and     eax, 0FF
00441C56  |.  8BD8          |mov ebx, eax 00441C58  |.  83EB 17       |sub     ebx, 17
00441C5B  |.  83E8 11       |sub     eax, 11
00441C5E  |.  0FAFD8        |imul    ebx, eax                        ; (byte-17)*(byte-11)
00441C61  |.  03F3          |add     esi, ebx                        ; 累加
00441C63  |.  41            |inc ecx 00441C64  |.  4A            |dec     edx                             ; 循环变量递减
00441C65  |.^ 75 E3         \jnz     short 00441C4A
00441C67  |>  8D55 F4       lea edx, dword ptr [ebp-C] 00441C6A  |.  8B45 FC       mov     eax, dword ptr [ebp-4] 00441C6D  |.  8B80 CC020000 mov eax, dword ptr [eax+2CC] 00441C73  |.  E8 4C16FEFF   call    004232C4                         ; 取出密码
00441C78  |.  8B45 F4       mov eax, dword ptr [ebp-C] 00441C7B  |.  50            push eax 00441C7C  |.  8D55 F0       lea     edx, dword ptr [ebp-10] 00441C7F  |.  8BC6          mov eax, esi 00441C81  |.  E8 325AFCFF   call    004076B8                         ; IntToStr
00441C86  |.  8B55 F0       mov     edx, dword ptr [ebp-10]          ; 算出的序列号
00441C89  |.  58            pop eax 00441C8A  |.  E8 091FFCFF   call    00403B98                         ; 比较
00441C8F  |.  75 0C         jnz     short 00441C9D
00441C91  |.  A1 30584400   mov     eax, dword ptr [445830] 00441C96  |.  E8 B9FBFFFF   call    00441854
00441C9B  |.  EB 0A         jmp     short 00441CA7
00441C9D  |>  A1 34584400   mov     eax, dword ptr [445834] 00441CA2  |.  E8 ADFBFFFF   call    00441854
00441CA7  |>  33C0          xor eax, eax 00441CA9  |.  5A            pop edx 00441CAA  |.  59            pop ecx 00441CAB  |.  59            pop     ecx

打开http://www.cnblogs.com/ZRBYYXDM/p/5115596.html中搭建的框架,修改OnBtnDecrypt函数以下:

void CKengen_TemplateDlg::OnBtnDecrypt() { // TODO: Add your control notification handler code here
 CString str; GetDlgItemText( IDC_EDIT_NAME,str ); //获取用户名字串基本信息。
    int len = str.GetLength(); if ( len != 0 ){                                        //格式控制。
        unsigned int res = 0; for ( int i = 0 ; i != len ; i++ ) res += (str[i]-0x17) * (str[i]-0x11); CString PassWord; PassWord.Format( "%d",res ); SetDlgItemText( IDC_EDIT_PASSWORD,PassWord ); } else MessageBox( "用户名格式错误!" ); }

再在OnInitDialog中添加此代码修改标题:SetWindowText(_T("Keygen"));

运行效果: