首页
社区
课程
招聘
[分享] CTF2017第一题解题分析-萌新版
2017-6-1 16:58 2118

[分享] CTF2017第一题解题分析-萌新版

2017-6-1 16:58
2118

开门见山,此三无CrackMe直接拖入OD运行,随便输入"1234567890",弹对话框显示"error !"

进OD搜字符串,直接有:

双击跳转到代码,上方靠近处有一个显眼的jnz,猜测是序列号比较了,在004012C6 jnz下断,再次运行,没断下来:

回到OD,继续往上翻,试了几次终于发现在00401225 cmp eax,0x4的比较失败,导致下面的jnz跳到error,而此处eax=0x0A即10,一猜是输入的字符串长度,那么把输入换成4位的"1234"再试,果然可以过这个jnz了

接下来就应该是对核心算法的分析了,通过单步跟踪,顺便学了浮点指令(那些褐色的指令,一看就不太常用)

终于理出了算法:

现将输入的4个字符与0x30(即Ascii码中的'0')相减,分别得到4个数字,假设其为A,B,C,D

这段代码的功能是计算 (C-A/B)*D的值,然后乘以16,再与384比较,相等则成功。

384/16=24,换成人话就是用 (C-A/B)*D来算24点,果然符合6.1儿童节主题。

对了忘了说,一开始会判断4个数字都不能为0。

这个24点有很多个解,后来程序更新后加了判断,A必须等于1,B必须等于5,这样解就很有限了。

比如(5-1/5)*5=24,也就是1555

其他解还没有尝试出来。

最后在程序里尝试1555,通过!


[培训]内核驱动高级班,冲击BAT一流互联网大厂工作,每周日13:00-18:00直播授课

收藏
点赞0
打赏
分享
最新回复 (0)
游客
登录 | 注册 方可回帖
返回