系统 : Windows xp
程序 : dccrackme1
程序下载地址 :http://pan.baidu.com/s/1bpBlRXH
要求 : 注册机编写 & 拆解nag窗口
使用工具 : OD & DeDe
可在看雪论坛中查找关于此程序的破文,传送门
DeDe载入程序查看“过程”标签,其中有两个事件:
1.按钮点击,这肯定就是注册的按钮了
2.窗口创建,看来程序运行时的msg就是在这里编写的
首先把双击打开窗口创建的代码,拉到最后发现关键代码:
* 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"));
运行效果:
时间: 2024-11-18 01:32:41