之前破文使用的都是http://www.cnblogs.com/ZRBYYXDM/p/5002789.html这篇博文中编写的注册机模板,这篇文章里前面大半部分都在分析KeygenMe_1_by_boonz程序的关键算法,乍一看让人摸不着头脑。这次我结合破解的经验,专门写一篇搭建注册机模板的教程。

 

  这次还是使用MFC编写程序,新建基于对话框的应用程序,工程取名为Kengen_Template,并删除自动产生的对话框资源上已有的控件,然后在其上放置两个静态文本控件,标题分别为:“用户名”、“序列号”,并在其后添加两个编辑框控件、其ID分别为:IDC_EDIT_NAME、IDC_EDIT_PASSWORD。再在其后分别放置一个按钮。标题分别设置为:“马上解密!”、“拷贝用户名”。ID分别设置为:IDC_BTN_DECRYPT和IDC_BTN_COPY。最后,在拷贝用户名按钮下面添加一个静态文本,ID设置为IDC_STC_MSG并清空标题属性。设计完成的对话框资源如图所示:

 

双击界面上的“马上解密!”按钮,添加消息响应函数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 <= 64 ){                                        //格式控制。
        SetDlgItemText( IDC_EDIT_PASSWORD,str );
    }
    else
        MessageBox( "用户名格式错误!" );
}

继续双击界面上的“拷贝用户名”按钮,添加消息响应函数OnBtnCopy,然后添加代码实现将字串拷贝到剪贴板的功能:

void CKengen_TemplateDlg::OnBtnCopy() 
{
    // TODO: Add your control notification handler code here
    CString cmd;
    GetDlgItemText( IDC_BTN_COPY,cmd );

    if ( OpenClipboard() ){                                        //打开剪贴板
        CString str;
        HANDLE hClip;
        char *pBuf;

        EmptyClipboard();
        
        if ( cmd == "拷贝用户名" )                                //如果命令是拷贝用户名
            GetDlgItemText( IDC_EDIT_NAME,str );
        else
            GetDlgItemText( IDC_EDIT_PASSWORD,str );

        hClip = GlobalAlloc( GMEM_MOVEABLE,str.GetLength() + 1 );
        pBuf = (char*)GlobalLock( hClip );
        strcpy( pBuf,str );
        GlobalUnlock( hClip );
        SetClipboardData( CF_TEXT,hClip );
        CloseClipboard();

        if ( cmd == "拷贝用户名" ){                                //变换命令
            SetDlgItemText( IDC_BTN_COPY,"拷贝序列号" );
            SetDlgItemText( IDC_STC_MSG,"拷贝用户名成功!" );    //提示成功
        }
        else{
            SetDlgItemText( IDC_BTN_COPY,"拷贝用户名" );
            SetDlgItemText( IDC_STC_MSG,"拷贝序列号成功!" );
        }
    }
    else
        SetDlgItemText( IDC_STC_MSG,"拷贝失败!" );
}

编译运行程序,效果如图: