看雪ctf2017第一题详解

来源:互联网 发布:大数据与经济发展 编辑:程序博客网 时间:2024/05/18 01:25

第一步、先瞅瞅

随便输入点啥,发现如下报错

第二步、Od加载程序,下断点

一般这种程序,第一感觉就是在下api断点,右键->查找->当前模块中的名称

找到getDlgItemTextA


右键->在输入函数上切换断点  设置断点

F9运行程序,程序断在了此处


第三步,算法分析

一路f8执行到retn返回,来到

这里我们看到它调用了一个wannaLOL.00401300这么个函数,

执行返回后比较eax和4是否相等,这里我们不难想到,这里应该是判断输入的序列号的位数。

这里我们设[ebp-0x1c]=f(1),[ebp-0x1b]=f(2),ebp-0x1a=(3),ebp-0x19=f(4)

紧接着,下面判断这四个数是否为0,然后判断f(1)是否为1,f(2)是否为5。图上已经标注得很清楚了。

 这里我们为了进一步调试,需要在判断跳转时候将z标志位置1。在判断f(1)和f(2)时。


接着我们便来到了这里,需要进行一些简单的浮点计算,最后和[0x407118]处数值比较

如图,我已经分析得很清楚了


我们可以整理得这个浮点计算的公式为   (f(3)-0.2)*f(4)*[0x40711c]=[0x407118]

其中根据od的提示,我们可以知道[0x407118]=384,[0x40711c]=16


所以公式整理得(f(3)-0.2)*f(4)=24,易估得,f(3)=5,f(4)=5

最后得序列号为:1555

输入验证下:

破解成功!


原创粉丝点击