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

这看上去是一个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有毒,反正就是跑出来乱码。。心情糟糕,最后终于解决。

推荐阅读更多精彩内容

  • SQL注入是CTF的WEB方向必不可少的一种题型,斗哥最近也做了一些在线题目,其中最常见的题目就是给出一个登录界面...
    漏斗社区阅读 19,033评论 0 7
  • “好了,我的乖孙女。有什么麻烦事来找爷爷啊?”爷爷调皮的朝我眨眨眼,我就知道爷爷一定会调侃我的!就在我准备抱怨...
    絮絮芬芳阅读 343评论 0 0
  • “马内科太太的精力极其旺盛,她像一颗种子,发芽、抽茎、成长。她可以不用一滴奶油就调制出乳酪浓汤,可以只用一小杯面粉...
    初照晨阅读 269评论 0 0
  • 这是股初训练营46班阿篱班班讲述的一个故事,来自古典的书《跃迁》。 这张海报之所以被那么多人知道,很大一部分原因是...
    林奕扬阅读 695评论 0 2
  • 膝下百凤俯首坐 玉露点点杯中落 清泉揽叶涟漪薄 寒蟾秋月唯心诺 盘王座 忆笙歌 银丝针绣穿花过 繁华散尽终归土 朱...
    小醉翁阅读 277评论 0 2