SWPU2019-Misc:Network
打开文件发现里面有一堆数字,仔细观察发现只有:63,127,191,255
和今年的西湖论剑预选赛的题有点像,考了TTL,参考:
标签: CTF - CodingBox技术博客
不难发现TTL值只有 63,127,191,255 四种,都是2的某次幂−1的值。于是将这四个数都转换成二进制,得到 111111、1111111、10111111、11111111四个二进制数。从后面两个数字可以观察到二进制数的开头两位似乎有关系。又因为TTL值为一个8位整数,进行合理猜想,不妨将不足8位的二进制数开头补0,变为8位后再取开头两位。即:00111111、01111111、10111111、11111111提取开头两位为:00、01、10、11,恰好为全排列,可以用于数据的存储。
通过这个规律。自己写了脚本qwq。。耗时很长,感觉自己也tcl。
file = open("attachment.txt",'r') flag = open("flag.txt",'w') linee = file.readlines() num = [] string = "" for i in linee: num.append("".join(i.split('\n'))) for n in num: if(n == '63'): n = '00' if(n == '127'): n = '01' if(n == '191'): n = '10' if(n == '255'): n = '11' string += n step = 8 b = [string[i:i+step] for i in range(0,len(string),step)] hey = [] for i in b: hey.append(i) for i in hey: flag.write(chr(int(i,2)))
运行之后得到以504B0304开头的十六进制数字,无疑是ZIP的文件头,保存为ZIP:
打开时提示输入密码,其实是伪加密,修改加密位:
打开文件发现是一堆base64,写脚本就vans了,不虚:
import base64 file = open("flag.txt",'r') base = file.read() for i in range(29): base = base64.b64decode(base) print(base)
那个range里的数是自己猜着试出来的,运行后就可以得到flag。
总的来说这道题还挺好玩,不难,又捡起来快遗忘的东西了OTZ