样本的链接: http://pan.baidu.com/s/1o8lwLiq

首先运行样本,随机输入字符串,得到:

通过观察,可以发现该样本可能用了printf函数打印,用IDA加载样本,通过shift+F12查找printf字符,很遗憾,里面并没有。继续查看输入随机字符串,还是没有。我们再试试弹出框里面的”try again”,果然,在里面发现了它:

双击”try agin”,我们看到:

双击上图右边红框处,看到下图,我们会发现此处00401094调用函数”IstrcmpA”

在函数处用”Tab”键进入反汇编。(注意要在调用函数处才能进入!)我们看到了这里有两个字符串的比较,由此联想到可能是输入字符串和真正的密码的比较。

下面,用OD对该样本进行调试,加载样本,找到00401094,我们可以发现这里有两个字符串,对应输入的和实际上的。

用”F2”在此处下断点,运行样本,可以看到字符串”`mddggzdl”:

它有可能就是真正的密码,也有可能不是(由密码加密得到),我们可以先尝试一下,发现它竟然就真的而是!


拓展:

观察代码,我们可以发现这个过程就是两个字符串的比较,如果输入为真是,就弹出”very good!”,为假是,弹出”try again!”。

由此,可以在”JE”处,双击,进入汇编此处,改为”JNE”改变条件,这样,当输入不一致时,就会弹出”very good!”。修改后,空白处右键->复制到可执行文件->所有修改->全部复制,在弹框中右键->保存文件

运行,我们看到: