题目给了我们一个提示,告诉我们flag的长度。
题目附件用winhex打开,中间部分有串比较不一样的字母
猜测此处应该是一种密码
"DD"DD""""D"DD""""""DD"""DD"DD""D""DDD""D"D"DD""""""DD""D""""DD"D"D"DD""""D"DD""D"""DD"""""DDD""""D"DD"""D"""DD"""D""DD"D"D"DD"""DD""DD"D"D""DD""DD"DD"""D"""DD""DD"DD""D"D""DD"D"D"DD"""D"""DD"""D"DD""DD"""DD"D"D""DD"""D"DD""DD""DD"""""DDD""DD""DD"""D""DD""
题目说两种十六进制代表的是伤痕,我们猜测 " 代表的是0,D代表的是1,则可以转换为:
01101100 00101100 00001100 01101100 10011100 10101100 00001100 10000110 10101100 00101100 10001100 00011100 00101100 01000110 00100110 10101100 01100110 10100110 01101100 01000110 01101100 10100110 10101100 01000110 00101100 11000110 10100110 00101100 11001100 00011100 11001100 01001100
因为是二进制,所以我们可以利用脚本转换为字符串,一共32位,正好符合题目的要求,完成转换就行。附上网上师傅的脚本:
def bin_to_str(s):
return ''.join([chr(i) for i in [int(b, 2) for b in s.split(' ')]])
a = "01101100 00101100 00001100 01101100 10011100 10101100 00001100 10000110 10101100 00101100 10001100 00011100 00101100 01000110 00100110 10101100 01100110 10100110 01101100 01000110 01101100 10100110 10101100 01000110 00101100 11000110 10100110 00101100 11001100 00011100 11001100 01001100"
a = a.split(' ')
flag = ''
for i in a:
test = i[::-1]#::-1表示将字符串倒序,因为题目提示屁股,我们可以考虑是反着来的。
flag += bin_to_str(test)
print(flag)
Flag:
flag{6406950a54184bd5fe6b6e5b4ce43832}