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