这道题是个 elf 文件,在 Linux 环境中打开之后发现什么提示都没有,随便输入一串字符也没提示就直接退出了,于是就还是用 ida pro 打开,发现没有主函数的窗口,那就检索字符串吧,看到这么一大堆字符串
然后交叉引用一下进入到该字符串所在的函数,这应该就是关键函数了,发现这里有十个一样的函数
就发现这是 base64,而且进行了十次,进行十次之后的结果就是刚才那一大堆字符串,然后把它解码十次之后,就… 就得到了一个网站 https://bbs.pediy.com/thread-254172.htm,然后进去这个网站之后,根本就没有 flag
说明我们思路不对,所以我就返回去看主函数,看到这一部分
这里将三个字符串拼到一起,然后还在 v [12] 和 v [13] 的末端加了一个 127,然后再进行一次异或运算,写了个脚本得到了 Info:The first four chars are `flag`,这应该是一个提示,然后在这里呆了半天也不知道下一步该怎么做,看了大佬的题解提示,在进行完上面的异或和 base 循环之后,下面又调用了 sub_400D35 这个函数
我们看看这个函数
关键部分就是一个 if 条件语句和一个 for 循环了,if 的括号中的条件,是 v4 和一个已知数组的异或
1 | [0x40, 0x35, 0x20, 0x56, 0x5D, 0x18, 0x22, 0x45, 0x17, 0x2F, 0x24, 0x6E, 0x62, 0x3C, 0x27, 0x54, 0x48, 0x6C, 0x24, 0x6E, 0x72, 0x3C, 0x32, 0x45, 0x5B] |
也容易看出前四位的异或结果应该就是 flag 了,然后在下面的 for 循环中再和 v4 进行异或,要知道 v4 我们就再进行一次异或就可以得到,然后就可以进行 for 循环中的异或了,异或之后的结果应该就是 flag 了,毕竟前四个结果就是 flag 嘛,脚本如下
1 | a = [73, 111, 100, 108, 62, 81, 110, 98, 40, 111, 99, 121, 127, 121, 46, 105, 127, 100, 96, 51, |
得到 flag {Act1ve_Defen5e_Test}
题目来源:BUUCTF 在线评测 (buuoj.cn)——[2019 红帽杯] easyRE