逆向工程——自行分析2

2019-05-20  本文已影响0人  柳清檀

题目说明

说明:该题目由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
上一篇下一篇

猜你喜欢

热点阅读