zhengsidie 发表于 2017-6-10 17:18

看雪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
破解成功!

huangsijun17 发表于 2017-6-13 09:17

Jr丶新一 发表于 2017-6-13 02:35
你只知道CF?这是ctf


就不能看一下我应用的帖子的原文吗?逗。

huangsijun17 发表于 2017-6-14 19:28

Jr丶新一 发表于 2017-6-14 03:43
哦?人家说了ctf你车CF干什么?呵呵

别人在问是不是CF的外挂,变成我撤CF了?不识字吗?

Mr.Mlwareson_V 发表于 2017-6-10 17:37

感谢分享{:1_927:}

qianeymax6274 发表于 2017-6-10 17:54

兄弟你这个是什么啊,我咋不懂啊

mrwinner 发表于 2017-6-10 18:00

感谢分享

zhengsidie 发表于 2017-6-10 18:16

qianeymax6274 发表于 2017-6-10 17:54
兄弟你这个是什么啊,我咋不懂啊

哪不懂?

whyida 发表于 2017-6-10 18:19

151N                     

photonmang 发表于 2017-6-10 18:25

挺好的。继续加油~

KaQqi 发表于 2017-6-10 19:04

perfect,看雪官方也有一堆分析,但是都没楼主这么详细。另外cm5楼主研究了么?

win111jack 发表于 2017-6-10 20:06

不错。分析精彩

dxdeng 发表于 2017-6-10 20:32

学习了阿
页: [1] 2 3 4 5
查看完整版本: 看雪ctf2017第一题详解