题目说明
说明:该题目由CrackMee.exe一个文件组成。该文件是一个简单的小程序,请大家逆向该程序,找到正确的字符串,输入到程序后即为成功。
解题步骤
image.png首先看到这一部分的分支跳转
cmp eax,14
jbe short CrackMee.00401428
说明输入的字符串长度大于14,也就是十进制的20时会导致Wrong Length :(
我们注意到左下dump数据窗口的信息,发现00402000开始的数据正在被改变写入
image.png
推测这个是需要输入的key:thi5_1s_K3y
image.png
然后我们继续分析,验证这个想法:注意到程序中的“hey! You did it…”部分
image.png
可以看到,第一遍顺序执行这个部分的时候因为执行了jmp short CrackMee.004013A2,并没有执行“hey!you did it…”相关的内容,后面出现一个循环:
image.png
这里设置两个断点让程序的内容更加显然,程序先给ss:[esp+3c]赋值5,每次循环加一,一直到ss:[esp+3c]大于8的时候跳出循环。
image.png
逐步执行的时候发现,这里是在给密码处赋值。
下面关注一下是怎么判别输入密码是否正确的:
image.png
我们关注这一小部分:
首先逆推分析,为了不执行0040148c 处的语句,避免输出“NO No No…”,我们看到上面跳转的部分:
cmp dword ptr ss:[esp+38],0
jnz short CrackMee.0040148c
只有在ss:[esp+38]等于0的时候才会输出“Key Right!”。向上回溯,发现00401461处对ss:[esp+38]进行赋值1。我们应该跳过这一句,那么就需要执行0040145F处的跳转语句,也就需要0040145d处edx与eax等值。
再正着分析:
image.png
发现这个部分利用循环在判断输入是否与设置的密码相同,如果本次循环比较时相同则跳转到0040146B进行下一次循环,如果不同则说明输入的密码错误,执行00401461将ss:[esp+38]赋值1,后续导致输出NO No No…
结论:
需要的key是thi5_1s_K3y
image.png
网友评论