美文网首页CTF练习解析
实验吧逆向工程-bin100(ebCTF 2013)

实验吧逆向工程-bin100(ebCTF 2013)

作者: 追求科技的足球 | 来源:发表于2019-05-12 22:58 被阅读3次

    这看上去是一个2013年的CTF题,就一点点加油吧!
    题目链接:http://ctf5.shiyanbar.com/re/Dice.exe
    1、是个exe文件,常规操作,Exeinfo PE查看一下。


    2、建议Ida,那就Ida打开吧。

    3、逻辑还是有点多的,忽然想起了看提示:Beat our dice game and get the flag。看上去是个骰子游戏啊,试一下吧。

    4、扔对了就继续,扔错了就退出,就是一个随机扔啊。
    回到Ida,找String(View->open subviews->Strings),发现蹊跷:

    5、双击进入:

    6、双击DATA后面的WinMain进入调用,然后F5反编译:

    7、可以看到结果就在v84中。然后再看逻辑,每次扔数值都是v82随机:

    8、看完逻辑发现扔的顺序需要是3-1-3-3-7,而7是不会扔出来的(我第一次运行的时候前四个都rand对了。。。太神奇了),因为最后一次根本没有扔,看源码

    并没有对v82进行rand

    9、接下来使用od吧!
    使用F2在此处设置断点(因为下一行有注释),F9运行:

    在运行到此处时暂停:

    虽然投出了1,但是可以更改z指示位使其不跳转,这里看跳转条件为jnz,即不为0跳转,z为1时表示为0,因此z改为1(或者直接把这一句改为nop)。

    然后回车发现到了下一个扔骰子处,依旧下断点改z执行。
    10、最后一步发现出问题了,如果一直不跳转,会最后跳出来说遇到了莫名的错误,因此我每次扔骰子后更改比较语句,我扔几就是给我比较几,每次都会过跳转(或者改jnz为jz也行反正就是要执行跳转)

    11、但是还是不行:

    12、回到Ida看逻辑,有一个和ebCTF的比较:

    13、回到od,原来是这个地方在作祟,设个断点。

    je为z=1时跳转,真的狡猾,现在要把z再设成0(或者直接je换nop)。

    14、恶心的题目,看这里:


    15、原因是有个时间判断函数,会测试你投骰子的时间,特别恶心。


    16、解决方法,在9-13步,把之前的jnz的和最后一个je都改为nop,然后直接右键复制到新的可执行文件,然后疯狂回车,就出结果了。。。
    (tips:使用cmd打开exe最后不会闪退)


    小结:网上的解决办法都是假的,还是我的OD有毒,反正就是跑出来乱码。。心情糟糕,最后终于解决。

    相关文章

      网友评论

        本文标题:实验吧逆向工程-bin100(ebCTF 2013)

        本文链接:https://www.haomeiwen.com/subject/ajphaqtx.html