下载附件得到压缩包,又是文件和文件夹嵌套
名为data的未知格式文件可以读出来
再结合文件夹名字,可以推测,整个压缩包内文件是一个非常明确的树结构
为防止出错,按照前序遍历进行遍历,将每一结点的data读出来
遍历完发现像是base64加密文本
Q2hpbmVzZSB0cmFkaXRpb25hbCBjdWx0dXJlIGlzIGJyb2FkIGFuZCBwcm9mb3VuZCEgU28gSSBXYW50IEdpdmUgWW91IE15IEZsYWcgQnV0IFlvdSBOZWVkIERlY29kZSBJdC5FbmpveSBUaGUgRmxhZyEhOuW4iCDlhZEg5aSNIOaNnyDlt70g6ZyHIOaZiyDlp6Qg5aSn6L+HIOiuvCDlmazll5Eg6ZyHIOaBkiDoioIg6LGrIA==
解密
伏羲六十四卦加密的flag,解密(参考:[BJDCTF2020]伏羲六十四卦)
'''
Author: Jack Jparrow
Date: 2021-12-25 14:00:29
LastEditTime: 2021-12-25 14:30:42
LastEditors: Jack Jparrow
Description: 伏羲六十四卦解密
'''
s='师兑复损巽震晋姤大过讼噬嗑震恒节豫'
dic={'坤': '000000', '剥': '000001', '比': '000010', '观': '000011', '豫': '000100', '晋': '000101', '萃': '000110', '否': '000111', '谦': '001000', '艮': '001001', '蹇': '001010', '渐': '001011', '小过': '001100', '旅': '001101', '咸': '001110', '遁': '001111', '师': '010000', '蒙': '010001', '坎': '010010', '涣': '010011', '解': '010100', '未济': '010101', '困': '010110', '讼': '010111', '升': '011000', '蛊': '011001', '井': '011010', '巽': '011011', '恒': '011100', '鼎': '011101', '大过': '011110', '姤': '011111', '复': '100000', '颐': '100001', '屯': '100010', '益': '100011', '震': '100100', '噬嗑': '100101', '随': '100110', '无妄': '100111', '明夷': '101000', '贲': '101001', '既济': '101010', '家人': '101011', '丰': '101100', '离': '101101', '革': '101110', '同人': '101111', '临': '110000', '损': '110001', '节': '110010', '中孚': '110011', '归妹': '110100', '睽': '110101', '兑': '110110', '履': '110111', '泰': '111000', '大畜': '111001', '需': '111010', '小畜': '111011', '大壮': '111100', '大有': '111101', '夬': '111110', '乾': '111111'}
li=[]
k=0
for i in range(len(s)):
if k ==1:
k=0
continue
try:
li.append(dic[s[i]])
except:
t=''
t=t+s[i]+s[i+1]
li.append(dic[t])
k=1
ss=''.join(li)
print(ss)
enc=''
for i in range(0,len(ss),8): enc+=chr(eval('0b'+ss[i:i+8]))
print(enc)
关于伏羲六十四卦,参考维基百科——六十四卦(可能需要梯子)
六十四个卦,二进制表示需要6位,按照顺序从000000到111111排好,再进行替换,然后转文本就能出结果
——————分割线——————
赛后发现,strings -a可以直接排列好打出来,掐头去尾拼起来就是加密的文本,大无语事件( ̄ー ̄)