vc6.0编译
没加壳
没任何anti措施
见附件
crackme.rar
附上源码
void GetSerial(HWND hDlg)
{
char name[10],serial[13];
if(0==GetDlgItemText(hDlg,IDC_EDIT1,name,7))
{
MessageBox(hDlg,"Name can not be empty.","Erorr",0x40);
return;
}
if(0==GetDlgItemText(hDlg,IDC_EDIT2,serial,7))
{
MessageBox(hDlg,"Serial can not be empty.","Erorr",0x40);
return;
}
if(strlen(name)==6&&strlen(serial)==6)
CheckSerial(name,serial);
}
void Copy()
{
char object[1];
char* ShellCode="\x90"//填充
"\x12\x45\xFA\x7F"//jmp esp
"\x33\xC0\x50\x68\x65\x73\x73\x21\x68\x53\x75\x63\x63\x8B\xD4\x50"
"\x68\x65\x72\x21\x20\x68\x68\x61\x63\x6B\x68\x6B\x65\x72\x2F\x68"
"\x63\x72\x61\x63\x68\x65\x61\x74\x20\x68\x61\x20\x67\x72\x68\x61"
"\x72\x65\x20\x68\x59\x6F\x75\x20\x8B\xCC\x50\x52\x51\x50\xB8\xA0"
"\x50\x40\x40\xC1\xE0\x08\xC1\xE8\x08\xFF\x10\x33\xC0\x50\xB8\x2C"
"\x50\x40\x40\xC1\xE0\x08\xC1\xE8\x08\xFF\x10";//注册成功提示信息
strcpy(object,ShellCode);
}
void CheckSerial(char* name,char* serial)
{
int i;
for(i=0;i<=5;i++)
{
if((((int)name[i]*(int)name[i])%25+65)!=(int)serial[i]) return;
}
Copy();
}
上面shellcode中我直接call了手工查看的输入表地址
因此不具备通用性,如果你要在自己机器上调试,vc6.0 release默认设置,运气好的话会成功的
注册码计算本来就一行,的确比较弱,不过正好让刚开始学调试的增加点自信
本来打算将注册码。用户名,shellcode这三个进行一定的交互计算,应该会有点意思
不过太麻烦了
just for fun ^_^
[招生]科锐逆向工程师培训(2024年11月15日实地,远程教学同时开班, 第51期)