题目链接:https://buuoj.cn/challenges#[2019%E7%BA%A2%E5%B8%BD%E6%9D%AF]easyRE
题目是个.elf文件,拖进IDA64,看看字符串,前几行字符串都挺可疑的,查看哪个函数使用了他们
这是关键部分,包含着前几个字符串
在字符串"continue!"之前有一段加密,脚本跑一下,看看是什么内容
s=[73,111,100,108,62,81,110,98,40,111,99,121,127,121,46,105,127,100,96,51,119,125,119,101,107,57,123,105,121,61,126,121,76,64,69,67,]
flag=''
for i in range(len(s)):
flag += chr(s[i]^i)
print(flag)
跑出来的结果是Info:The first four chars are `flag`,说前四个字符是flag,再往下看是base64编码,密文是之前找到的第一个字符串,需要十次解码。
最终得到的字符串为"https://bbs.pediy.com/thread-254172.htm",点进去看到是一个论坛,跟flag没什么关系。
在查看base64密文的时候看到有可疑的数组,查看哪个函数使用了
这里是那个数组的加密方式,脚本解密一下
根据if里的判断条件和之前脚本解出的那个字符串提示,先是"flag"与数组前四个进行异或,再把数组于得到的字符串依次异或,最终得到flag。
s = [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]
s1 = 'flag'
key = ''
flag = ''
for i in range(len(s1)):
key += chr(s[i] ^ ord(s1[i]))
for i in range(len(s)):
flag += chr(s[i] ^ ord(key[i % 4]))
print(flag)
flag:flag{Act1ve_Defen5e_Test}