[2019redhat]calc.zip

运行 发现 程序应该是 一个计算。

里面的 字符串 提示。

发现 里面 有几个 很长的 sleep 函数 ,为了 方便动态调试,先 nop 掉。

分析

  1. 首先发现 这里存在 三次输入。然后发现每次 输入 后下面都有 很多 没有特别多 作用的函数。应该是对存储空间的一个设置函数。

  2. 三次 输入后就 开始 进行的 关键比较。

    1. 这里 发现 在 每次输入后,我们的输入都被放到了 一个 对呀的 结构体进行保存。

      1. 结构体形式:
      name_struck{
      		int * valu;
      		int * buf;
      }
      
    2. 而且发现 buf 地址和 valu 地址是 连续保存的。但是我们输入的每个 字符 是用 4字节 保存的也就是说当 (**(buf)-** (valu)) >> 2 = len(num)

    3. 然后 分析 下面的函数。

      num1 < num3

    num2 < num1

    所以 得到我们的 输入应该满足的 要求 num2 < num1 < num3

  3. 然后 就进入到 计算。先进行了 依次 初始化

  1. 然后 发现 后面的 函数 我们 动态调试看看 发现 算法。其实很简单。基本就是 加减乘除的算法。

(a+b)****3 - 3**a**(b****2) - 3**b**(a***2) == (c+4)**3 - 12(c***2) - c*48 - 22

推出

a**3 + b**3 - c**3 == 42

百度得到 下面是 得到 flag