在看雪论坛上看到一个Crackme,下下来练练手。
打开EXE文件,在Name和key处随便输入,点击注册,弹出“Wrong Code”的提示框,如下图所示:
然后使用PEiD,结果为MASM32 / TASM32,说明这个程序采用汇编语言编写,并且没有加壳。将这个EXE文件拖入OD,尝试着在GetDlgItemTextA和GetDlgItemTextW处下断,然后F9运行,输入Name和Key后,程序停在了GetDlgItemTextA处,如下图所示:
然后F8单步运行,直到弹出“Wrong Code”的提示框,如下图所示:
根据代码运行流程,查找到弹出错误提示框的判断语句,如下图所示:
这段代码的功能是对我们输入的Key和一个程序中生成的字符串("HNT-7440-1347-3820-GP")的长度进行比较,由于二者的长度不等,故弹出错误提示框。我又继续阅读了下面几句代码:
这段代码对我们输入的Key和一个程序中生成的字符串("HNT-7440-1347-3820-GP")进行比较,如果这两个字符串不相等,则弹出错误提示框。可见,"HNT-7440-1347-3820-GP"就是我们输入的Name所对应的Key。输入Name和Key进行验证,结果正确,如图:
然后单步跟踪,分析Key生成算法,完成了keygen,如图:
keygen的关键代码如下:
总体来说,这个Crackme并不是很难。如果只是找一个key,用OD运行一遍程序即可,如果要写出keygen,就需要分析一下key生成算法,这个稍微有点麻烦。
总结:
1、下断很重要
2、汇编基础很重要
3、OD和IDA的使用还不够灵活