看雪ctf2017第一题详解
本帖最后由 zhengsidie 于 2017-6-10 19:15 编辑看雪ctf2017第一题相对比较简单,没有什么难度,不过介于对于汇编不好的同学,搞起来也挺费事,这里详细地对这个crackme进行分析。图片看不清的话可以下附件看看。
第一步、先瞅瞅
http://img.blog.csdn.net/20170610165837766?watermark/2/text/aHR0cDovL2Jsb2cuY3Nkbi5uZXQvenNkNzQ3Mjg5NjM5/font/5a6L5L2T/fontsize/400/fill/I0JBQkFCMA==/dissolve/70/gravity/Center
随便输入点啥,发现如下报错
http://img.blog.csdn.net/20170610165912860?watermark/2/text/aHR0cDovL2Jsb2cuY3Nkbi5uZXQvenNkNzQ3Mjg5NjM5/font/5a6L5L2T/fontsize/400/fill/I0JBQkFCMA==/dissolve/70/gravity/Center
第二步、Od加载程序,下断点
一般这种程序,第一感觉就是在下api断点,右键->查找->当前模块中的名称
找到getDlgItemTextA
http://img.blog.csdn.net/20170610165943084?watermark/2/text/aHR0cDovL2Jsb2cuY3Nkbi5uZXQvenNkNzQ3Mjg5NjM5/font/5a6L5L2T/fontsize/400/fill/I0JBQkFCMA==/dissolve/70/gravity/Center
右键->在输入函数上切换断点设置断点
F9运行程序,程序断在了此处
http://img.blog.csdn.net/20170610170015096?watermark/2/text/aHR0cDovL2Jsb2cuY3Nkbi5uZXQvenNkNzQ3Mjg5NjM5/font/5a6L5L2T/fontsize/400/fill/I0JBQkFCMA==/dissolve/70/gravity/Center
第三步,算法分析
一路f8执行到retn返回,来到
http://img.blog.csdn.net/20170610170041804?watermark/2/text/aHR0cDovL2Jsb2cuY3Nkbi5uZXQvenNkNzQ3Mjg5NjM5/font/5a6L5L2T/fontsize/400/fill/I0JBQkFCMA==/dissolve/70/gravity/Center
这里我们看到它调用了一个wannaLOL.00401300这么个函数,
执行返回后比较eax和4是否相等,这里我们不难想到,这里应该是判断输入的序列号的位数。
这里我们设=f(1),=f(2),ebp-0x1a=(3),ebp-0x19=f(4)
紧接着,下面判断这四个数是否为0,然后判断f(1)是否为1,f(2)是否为5。图上已经标注得很清楚了。
这里我们为了进一步调试,需要在判断跳转时候将z标志位置1。在判断f(1)和f(2)时。
http://img.blog.csdn.net/20170610170217380?watermark/2/text/aHR0cDovL2Jsb2cuY3Nkbi5uZXQvenNkNzQ3Mjg5NjM5/font/5a6L5L2T/fontsize/400/fill/I0JBQkFCMA==/dissolve/70/gravity/Center
接着我们便来到了这里,需要进行一些简单的浮点计算,最后和处数值比较
如图,我已经分析得很清楚了004012B3处注释有误,fld应该是将复制到st(0)中,写的时候没注意。
http://img.blog.csdn.net/20170610170315428?watermark/2/text/aHR0cDovL2Jsb2cuY3Nkbi5uZXQvenNkNzQ3Mjg5NjM5/font/5a6L5L2T/fontsize/400/fill/I0JBQkFCMA==/dissolve/70/gravity/Center
http://img.blog.csdn.net/20170610170324788?watermark/2/text/aHR0cDovL2Jsb2cuY3Nkbi5uZXQvenNkNzQ3Mjg5NjM5/font/5a6L5L2T/fontsize/400/fill/I0JBQkFCMA==/dissolve/70/gravity/Center
我们可以整理得这个浮点计算的公式为 (f(3)-0.2)*f(4)*=
其中根据od的提示,我们可以知道=384,=16
http://img.blog.csdn.net/20170610170357398?watermark/2/text/aHR0cDovL2Jsb2cuY3Nkbi5uZXQvenNkNzQ3Mjg5NjM5/font/5a6L5L2T/fontsize/400/fill/I0JBQkFCMA==/dissolve/70/gravity/Center
http://img.blog.csdn.net/20170610170406304?watermark/2/text/aHR0cDovL2Jsb2cuY3Nkbi5uZXQvenNkNzQ3Mjg5NjM5/font/5a6L5L2T/fontsize/400/fill/I0JBQkFCMA==/dissolve/70/gravity/Center
所以公式整理得(f(3)-0.2)*f(4)=24,易估得,f(3)=5,f(4)=5
最后得序列号为:1555
输入验证下:
http://img.blog.csdn.net/20170610170456180?watermark/2/text/aHR0cDovL2Jsb2cuY3Nkbi5uZXQvenNkNzQ3Mjg5NjM5/font/5a6L5L2T/fontsize/400/fill/I0JBQkFCMA==/dissolve/70/gravity/Center
破解成功!
Jr丶新一 发表于 2017-6-13 02:35
你只知道CF?这是ctf
就不能看一下我应用的帖子的原文吗?逗。 Jr丶新一 发表于 2017-6-14 03:43
哦?人家说了ctf你车CF干什么?呵呵
别人在问是不是CF的外挂,变成我撤CF了?不识字吗? 感谢分享{:1_927:} 兄弟你这个是什么啊,我咋不懂啊 感谢分享 qianeymax6274 发表于 2017-6-10 17:54
兄弟你这个是什么啊,我咋不懂啊
哪不懂? 151N 挺好的。继续加油~ perfect,看雪官方也有一堆分析,但是都没楼主这么详细。另外cm5楼主研究了么? 不错。分析精彩 学习了阿