系統 : 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"));
運行效果: