适合破解新手的160个crackme练手之03
拿到exe,首先用peid查壳吧
检测发现没壳,而且是用vb写的,那么来运行一下先,运行过程中发现程序会先在下面这个画面等待一会才会到达Crackme界面
然后界面跟第二个Crackme是差不多的,唯一的区别就是叫我们要先kill the Nag 再去找key,那么Nag应该就是运行程序时等待的那个界面
那么首先来kill the Nag吧,由于之前没弄过这种,在网上学习了师傅们的wp,发现一款反编译vb的工具:VBExplorer (可以到看雪工具下载:https://tools.pediy.com/windows/decompilers.htm),用VBExplorer打开exe,选到CMSplash,然后看到有个Timer函数,在属性那里选择Timer1 timer观察到有个变量Interval的Timeer1值是 7000,我们知道Interval是间隔的意思,所以我们可以大胆猜测这个就是表示开头Nag运行的时间间隔
那么我们只需要修改这个7000为0就可以让Nag不显示了
修改后再运行可以发现Nag已经被我们Kill掉了
接下来上od分析注册机算法,跟上一篇一样查找字符串,观察汇编语言
可以看到这里的逻辑跟Crackme-02有点类似,都是用test si,si 和je语句来判断Serial是否正确
再往上看点,可以发现这里出现了我们输入的Serial和正确的Serial,推测前面应该会有生成正确的Serial算法,虽然已经可以知道注册码了,但是为了深入研究注册码生成的算法,继续调试
在函数开头下个断点,一步一步慢慢调试
调试到这里,发现对Name进行了一系列操作,用len(name) * 0x15b38 + Name第一个字符的ascii码得到一个十六进制数,再调用算法1
而算法1的核心函数在这里,算法1的主要作用就是将16进制数变成十进制,比如0xa变成10
总结上面函数的作用就是len(name) * 0x15b38 + Name 生成一个十进制数
然后对刚刚的十进制数+2 再*3然后-2
最后再+15
最后运算出来的结果就是我们最终的Serial
根据算法写注册机脚本
name = "123"
a = len(name) * 0x15b38
a += ord(name[0:1])
a += 2
a = a*3-2 + 15
Serial = a
print "Serial: ",Serial
成功了