第46天:红帽杯2019-childRE(二)

昨天说到处理完输入了,今天把这道题干掉了,一定要有耐心,慢慢调试。

把输入的三个数设为x,y,z。

断到这里,

注释都标注了,自己分析一下。

在这里,发现goto到label_47就直接到运行结束了,没有flag,所以就不让他跳转,就要满足x<z

类似的,也要满足y<x。继续单步,来到一堆计算的地方。

这里是计算位数的。

这都是一步一步分析的,没什么说的。

有很多类似下边这种的判断,刚开始分析了一下,后来发现不影响值的变化,可以忽略。

继续调试,看到了flag字样:

这里只有v88小于等于0时才能执行到You win,然后v88又是某个数的位数,所以只能等于0,然后就需要往上翻找到刚才的一堆计算,最后可以得出如下:

                 (x+y)**3-(x*3*y**2)-(x**2*3*y)=0
                  ((z+4)**3-z*z*12)-z*48-22=0

可以得出,x**3+y**3-z**3=42

我也算不出来,但是有答案啊,说实话就算我比赛的时候做到这儿,我也不知道有这么三个数。。。。

 

一定要记住,分析程序的时候,不要太依赖IDA的伪代码,很多代码我都是配合汇编才看懂,这道题需要慢慢分析各个函数的作用,要有耐心。

 

官方writeup:https://mp.weixin.qq.com/s?__biz=MzU3MzczNDg1OQ==&mid=2247484311&idx=1&sn=5d0276066554008c078e42114301095b&chksm=fd3c6933ca4be02567b7f6728013b042cd170b01b05ded7658c0c45262c2cb5a2603ee3e878e&mpshare=1&scene=23&srcid=&sharer_sharetime=1573799898081&sharer_shareid=04486716e12bbdc0ba643240297c2f60#rd

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值