·分析该CrackMe按钮事件
这个check就是个按钮,现在用visual studio提供的工具看看这个按钮id
·选择自己的Spy++(不会用的话百度查一下)
找到check按钮id是1
·那该程序的检查按钮事件就为
找到按钮事件地址 795E7980
·地址795E7980的汇编代码看着有点怪异的是因为这里是虚函数调用(vcall) 执行到795E798D jmp eax f7跟进去后来到真正的按钮事件地址
·现在来讲讲vcall,写了个小例子
·执行的结果
#### 而myvirfunc1 myvirfunc2函数真正的地址为
现在00FB1084与00FB1088代码组合
是不是和地址795E7980代码很相似
·vcall 的作用
调整这个指针到真正的虚函数中
·现在看看代码还原
ida打开该程序跳转00401512
·因为该程序是vc6写的,我自己也用vc6写了一份,因为该crackme引用的dll是 MFC42.DLL 明说不是Debug编译的,Debug编译的是用的MFC42D.DLL,所以
选择用Release编译,第二因为该crackme是用ebp寻找的局部变量,说明没有开 o2优化编译,我个人就选择的无优化编译,最后生成的二进制和原版还有略有差异
·最后输入秘钥 实现破解
·完成自己代码还原的mfc程序以打包到附件了