题目地址:BUUCTF在线评测
文本内容:
(╯°□°)╯︵ ┻━┻
50pt
(╯°□°)╯︵ ┻━┻
d4e8e1f4a0f7e1f3a0e6e1f3f4a1a0d4e8e5a0e6ece1e7a0e9f3baa0c4c4c3d4c6fbb9b2b2e1e2b9b9b7b4e1b4b7e3e4b3b2b2e3e6b4b3e2b5b0b6b1b0e6e1e5e1b5fd
单看文本内容,除了这一长串的数字好像每什么其他的东西了。那就从这里入手,首先看它的长度,有135左右,那就排除md5和sha1加密。可能是十六进制的字符串。那就把它转成十进制再转成ascii码就行了。
脚本如下:
finish = []
#将十六进制的数据.append在一个空的数组里面方便做切片
flag = ''
#定义一个空的flag 方便等一下输出
number = 'd4e8e1f4a0f7e1f3a0e6e1f3f4a1a0d4e8e5a0e6ece1e7a0e9f3baa0c4c4c3d4c6fbb9b2b2e1e2b9b9b7b4e1b4b7e3e4b3b2b2e3e6b4b3e2b5b0b6b1b0e6e1e5e1b5fd'
#第一个for循环的作用是将十六进制数据以每两个一组分割
for i in range(0,len(number),2):
#以题目给的长度做for循环,后面的2是步长,意思是每次for循环结束后i都会加2。第
number_good = number[i:i+2]
#做切片,在这个时候十六进制数据就已经是两个两个的被分割了
finish.append(number_good)
#第二个for循环的作用则是将分号的十六进制转换成十进制再转换成ascii码
for k in range(0,len(finish)):
fla = (chr(int(finish[k],16) - 128))
#在调试的时候发现输出的十进制均大于128,所以减去128.输出正确的flag
flag += fla
#使用+=加到一个空值里
print (flag)