题目描述

菜鸡学逆向学得头皮发麻,终于它拿到了一段源代码

Solution

原代码里有 4 个分支,如果每次都进入分支,程序就会exit()退出,我们要做的就是避免程序进入分支,即每次if判断都应该是假命题。

第一个分支是if(argc != 4),这意味着我们要额外输入 3 个参数,像./a.out 1 2 3酱。

第二个分支是我们输入的第一个参数要等于0xcafe,我们只需要在 Linux 终端输入echo ((0xcafe))就能得到它的十进制数。

第三个分支要求我们输入的第二个参数模 5 不能等于三,并且模 17 得等于 8。我们用 Python 的列表推导式帮我们过滤[0, 100]这个集合中满足条件的元素:

  1. my_list = [i for in range(0, 100) if i % 5 != 3 and i % 17 == 8]
  2. print(my_list)

最后一个分支,只要输入的字符串等于h4cky0ustrcmp()函数就返回 0,自然就进不到分支里了。

001-1.png