zoukankan      html  css  js  c++  java
  • 一个好玩的CTF题

    一个CTF的题目,拿来学习学习

    玩了好久,再加上学校一堆破事,最近又开始瞎弄了,找了几个CTF的题目,和别人写的一些内容,也当是学习,也当是看完之后的小结。顺便也说一下如果自己拿到这题目会从哪做起。

    这个,由于之前IDA学的等于没学,一些神操作比如F5大法什么的,只是知道,具体也没怎么用,还需多实践啊!

    废话不多说,开搞

    瞎比看

    拿到了先运行下,这个,画风一如既往有点low逼,随便输入肯定不对,稍微记一下输出内容吧,毕竟字符串还是有用的。猜一下估计就知道如果对的话,应该就是所谓的好啊正确啊什么玩意的。

    拖到IDA中,图啊啥的就不贴了,看看函数吧,有个main,所以习惯性的瞅一眼吧

    看看代码,哦,应该就是跟一下call sub_4011E0

    大致看一下吧,应该就是这堆逻辑内容吧啊,一般需要注意一下这个输入的内容的判断,就是看看是不是字母啊数字啊大小写转化啊等等,还有就是长度什么的限制吧,同样这里也有

    这里我们还可以看到var_88是输入字符串的内容吧,再结合一下下面的比较语句应该这个var_10对应的就是与输入比较的东西吧

    没错就这样

    瞎比捣

    拖到od看看吧,简单的F7+F8走啊走啊就到了人生的十字路口了

    按照原来的分析的话,他继续走下去了,走的话得去模块分析,然后继续走,然后找啊找找到所谓的算法。脑洞好大。。。。。。我就不走了,反正我是不走了。

    但是,但是,机智的我看到了一个东西00401000,这还走个啥,直接过去不就得了改个代码走过去

    这里你就看到了你想看到一堆字符串吧,开心了吧,保存一下吧。

    再来吧,拖到IDA看看,然后和之前的一样走一下,就会来到这个地方,哎哟哟哟哟,好黑啊,这。。

    接下来就是F5大法了,呵呵呵,算了自行解决吧,我还是用OD看吧。

    首先我们看一下这几个报错的地方,看看吧

    第一个,看看上下文,应该是算长度的,然后比较长度和0x19也就是25比较一下,不是就出错,也就是输入时25个字符吧。

    然后下面就是定义的一个******的字符串吧,鬼知道是啥,不管它

    接着走接着看,做了几个比较,对al中的数据和6A/68/6B/6C作比较,不是的话就报错,al应该比较的是ascll码吧,对应的就是J/H/K/L,也就是说输入的25个字符必须是这4个之一

    这样吧,我们试试输入25个h看看,嘛情况?一路F8,果然走到h对应的case

    纵观这几个case,都有个共同点,和00409030的数据作比较,我们走去看看这到底是个啥?

    哦,好像迷宫啊,别问我咋知道的,多看看帖子就晓得。把它拉下来吧,那个记事本,然而这屌迷宫走不通。。。。。。。数数个数,调整调整,正好搞成8*8的,哎哟,还真能走通

    走迷宫嘛,习惯性想到上下左右,再看看刚才说的hjkl,应该就是对应的上下左右吧,具体看一下代码。case6B也就是对应的k,我们看下能看见对应的是004010C3 . 83EE 08 sub esi,0x8

    由于做的事一个8*8的迷宫,所以这个减8对应的就是迷宫中的向上,同样我们可以找到对应关系

    K--上

    J--下

    h--左

    l--右

    这里l对应代码没有写是右,但是由于之前排除掉其他字母的对应关系,然后这里只有l能对应右,所以那就右吧。。。。。

    然后还能看到表示的就是所谓的墙吧,因为移动之后做了下比较,是就报错。

    继续往下看,看到了good,这里看到了一个比较,0x23,对应的就是#也就是我们迷宫中终点吧,完美!

    来吧走迷宫吧,对应结果khkhhhjhjjjjjljlllklkkhhh,试试吧,没问题

    瞎比想

    1、呵呵呵,好像有啥问题没搞明白,起点为啥是那?回来看看代码。哦,没问题啊,眼瞎了。

    2、好吧,弄完了感觉好麻烦,总觉得不爆一下不爽。呵呵呵,就这吧

    让你瞎判断,改了你,直接jmp到good的位置

    保存,运行,随便输入点东西试试,搞定!

    小结一下:这题很好玩,嘿嘿嘿。

    附上原分析帖子链接:http://bbs.ichunqiu.com/forum.php?mod=viewthread&tid=15539&highlight=ctf

  • 相关阅读:
    看所访问网站的IP
    FLEX是什么及与FLASH的关系的介绍
    [设计模式]Head First Design Patterns[转]
    ASP.NET 2.0移动开发入门之使用模拟器
    在一篇文章的基础上总结了一下(接口,组合,继承,组件)
    抽象类与接口的区别 Java描述(转)
    C#:代表(delegate)和事件(event) (转)
    C#分页控件(自己做的)
    一个站点控制另一个站点的文件(添加,删除)用Webservices
    .net remoting程序开发入门篇
  • 原文地址:https://www.cnblogs.com/miaohj/p/6115949.html
Copyright © 2011-2022 走看看