【CM】一只炒鸡简单的CM,欢迎新手挑战哦~
本帖最后由 MXWXZ 于 2017-6-22 21:20 编辑闲得无聊写了个CM,无壳无花无污染,逻辑简单无需追码,欢迎各位新手挑战哦~
注意:提供破解后文件才算数~
小声说:爆破即可别想太多……追码能搞出来的请受在下一拜,以后您说东我绝不向西……{:17_1074:}
static/image/hrline/4.gif
下面公布答案,源码面前了无秘密@byh3025 @wjdxs1 :
UINT Check(LPVOID lpParameter);
BOOL CCrackMeDlg::OnInitDialog()
{
CDialog::OnInitDialog();
SetIcon(m_hIcon, TRUE); // Set big icon
SetIcon(m_hIcon, FALSE); // Set small icon
// TODO: Add extra initialization here
AfxBeginThread(Check,this);
return TRUE;// return TRUEunless you set the focus to a control
}
void CCrackMeDlg::OnOK()
{
// TODO: Add extra validation here
UpdateData(TRUE);
MD5 md5;
md5.update(m_key.GetBuffer(0));
m_key.ReleaseBuffer();
CString md5ed=md5.toString().c_str();
if(md5ed == "d6c508b6bc2c6914811aba4de27e81ad")
MessageBox("别看了已经破解啦~");
}
UINT Check(LPVOID lpParameter)
{
while(true){
byte buf[] = "\x68\xF4\xD0\x42\x00";
void* addr=(void*)0x4014A7;
WriteProcessMemory(INVALID_HANDLE_VALUE,addr,buf,5,NULL);
addr=(void*)0x4014C3;
byte buf2[] = "\x75\x0E";
WriteProcessMemory(INVALID_HANDLE_VALUE,addr,buf2,2,NULL);
Sleep(200);
}
return 0;
}
看到了么?这个保护就是动态修改0x4014C3的那个跳转,而且很无耻的重开线程while无限改……{:17_1057:}初学者们需要另找破解思路(改RET等),大佬们就看看吧(直接段首JMP之类均可)
由于是“炒鸡简单”,这次我只是保护了一个跳转和一个md5密文字符串,大家以后可以试试动态生成汇编代码,保护整个函数等等方法……这样让人更摸不着头脑,明明改了为什么不生效@byh3025 :)
注:那个check线程需要前置声明然后放在后面,防止保护的地址发生变化= = MD5(name)=d6c508b6bc2c6914811aba4de27e81ad
从textbox访问开始…换过一次保存位址
不过最关键的还是lstrcmp函数
一直追追追…到在关键的 jne 004014D3
没想到还有修改还有做检测…直接改汇编还会被改回来,有点厉害
最后我是用 jne 004014D3的上一行,直接jmp跳过他
才完成的,谢谢分享。 支持 虽然我不会哈哈哈 shizp 发表于 2017-6-22 01:00
MD5(name)=d6c508b6bc2c6914811aba4de27e81ad
来个教程,谢谢 支持 虽然我不会 本帖最后由 wjdxs1 于 2017-6-22 08:24 编辑
搜索下字符串,,猜是 md5(注册码) = d6c508b6bc2c6914811aba4de27e81ad 具体没看
爆破 关键call mov eax,0 ret就搞定了
并不清楚为什么一定要提供破解文件猜算数,,,并木有啥保护啊好像
你还行,算高手 更正下,我上面截图中修改的那个地方保存后还是未破解,要改上面那个CALL的返回值为0,附件是正确的 好像很好玩的样子