CTF

alictf 2016 LoopAndLoop writeup

Posted by Jieming Gu on 2016-11-29

本文为2016年alictf中LoopAndLoop的writeup。

LoopAndLoop writeup

首先点我下载题目。直接使用jeb反编译,当返回值为1835996258时,程序显示flag,故只需要分析check函数。

check

用IDA反汇编liblhm.so,F5看伪代码发现有问题:s值不变,chec循环执行check1且永不停止。这时需要看汇编代码,结果如下:

2

分析完程序流程后,题目的核心问题可归结为s的取值,分以下三种情况:

  1. 判断何时结束(s’ = s - 1,s’ <= 0);
  2. 判断是check1、check2或者check3(2 * s % 3);
  3. 确定checkX传入的s值(chec的s值即上轮checkX的s值)。

1

2

3

关于s的取值范围我通过动态调试得到s’取值[0,98],(2)取值[1,99],(3)取值[0,98]。

手写几轮即发现运算规律。

1

程序运行结果是答案:236492408。