之前破文使用的都是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,"拷贝失败!" );
}
编译运行程序,效果如图:
我们一路奋战,不是为了改变世界,而是不让世界改变我们
——《熔炉》