新手逆向(4)——abex'crackme#2的调试

运行abex’crackme#2

运行后可以看到要求输入name和serial,首先尝试不输入任何东西,直接check,
可以看到它会提示要求输入至少四个字符的name;那么我们就接着输入name而不输入serial得到一个提示;接着输入合理的name和serial也得到一个提示;可以发现这两次的提示是一样的Nope,this serial is wrong。由此可以推测,serial是由name得到的。

开始调试

载入OD后看到新手逆向(4)——abex'crackme#2的调试_第1张图片这是一个明显的Visual Basic编写的而成的。
简单分析一下:执行程序后,EP代码首先会调用VB引擎的主函数即 CALL,额,这个就不多说了,自己也没怎么研究过。
再来分析一下这个程序:首先搜索一下字符串新手逆向(4)——abex'crackme#2的调试_第2张图片发现了错误提示新手逆向(4)——abex'crackme#2的调试_第3张图片双击来到此处,经常性的我们会往上看一下,果然看到了一个CALL调用函数,和一个TEST来比较值,还有一个JE条件跳转。可以推测就是此条件跳转没有实现,从而导致输出了错误提示。
那么在CALL处下一个断点,并运行到此处,输入name和serial新手逆向(4)——abex'crackme#2的调试_第4张图片在此处可以查看一下栈中的内存,在栈窗口中右键->数据窗口跟随;来到数据窗口新手逆向(4)——abex'crackme#2的调试_第5张图片
可以看到我所输入的serial :abcd,再往上翻新手逆向(4)——abex'crackme#2的调试_第6张图片这里可以看出abcd是和95969798进行了比较(TEST),那么95969798即可能是1234的serial 。
退出OD重新运行此程序输入1234和95969798,显示正确,那么整个破解到此就是已经结束啦。
如果有兴趣可以尝试看看生成serial的算法(提示:可以往上翻找到PUSH EBP函数的开始部分,逐步向下可以找到一个加密循环)。

你可能感兴趣的:(reverse)