今天做buu的一道题 [NPUCTF2020]芜湖🛫
题目考察base64隐写。
什么是base64隐写?
base64在加密时,二进制不足6位的地方以0代替,而在解密时这些空下的0如果被改为1也不会被读取,于是就可以隐藏信息。由于这样的隐藏位最多有四个,所以base64隐写需要很多条才能存储一句讯息。
下面是解密脚本
def base64_stego(str):
base64_list="ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789"
temp=''
if str.count('=')==2:
a=len(bin( base64_list.find(str[-3]) & 0xf).replace('0b', ''))
if a==3:
temp+="0"
elif a==2:
temp+="00"
elif a==1:
temp+="000"
temp+=bin( base64_list.find(str[-3]) & 0xf).replace('0b', '')
print(temp)
elif str.count('=')==1:
a = len(bin(base64_list.find(str[-3]) & 0x3).replace('0b', ''))
if a == 3:
temp += "0"
elif a == 2:
temp += "00"
elif a == 1:
temp += "000"
temp += bin(base64_list.find(str[-3]) & 0x3).replace('0b', '')
print(temp)
return temp
a = ["55y85YmN6YeN5aSN55qE6aOO5pmvLG==",
"5riQ5riQ5qih57OK5LqG57qm5a6aLO==",
"5pif56m65LiL5rWB5rWq55qE5L2gLH==",
"5LuN54S256eY5a+G55qE6Led56a7LA==",
"5rip5bqm5raI5aSx55qE556s6Ze0LH==",
"5peg5rOV6Kem5pG455qE5piO5aSpLF==",
"5rKh5pyJ5byV5Yqb55qE5LiW55WMLG==",
"5rKh5pyJ6ISa5Y2w55qE5YWJ5bm0LD==",
"6L+Y5Zyo562J552A5L2g5Ye6546wLH==",
"5pel5pel5aSc5aSc6Ieq6L2s55qE6KGM5pifLE==",
"5Yiw5aSE6YGu5ruh5Yir5Lq655qE6IOM5b2xLG==",
"6K6p6aOO5ZC55pWj5re35Lmx55qE5ZG85ZC4LG==",
"5b+r5b+r5riF6YaSfn==",
"6Z2Z6Z2Z54Wn5Lqu5Y6f5p2l55qE6Ieq5bexLL==",
"5aSp56m65rSS5ruh5b+954S255qE5YWJ5piOLE==",
"55y85Lit5Y+q6KaB57ua54OC55qE5aSp6ZmFLG==",
"5YaN6aOe6KGMIW==",
"5oiR5YuH5pWi5Zyw5oqs6LW35aS0LM==",
"55yL552A6Iyr6Iyr55qE5a6H5a6ZLH==",
"5aSa5bCR5pyq55+l55qE5pif55CDLJ==",
"5pyJ5rKh5pyJ6YCa5ZCR5pyq5p2l6Lev5Y+jLD==",
"5Lqy54ix55qE5LyZ5Ly0LB==",
"6K6p5oiR5Lus5LiA6LW354K554eDLG==",
"5YuH5rCU5ZKM5L+h5b+1LO==",
"5Zyo6YGl6L+c55qE5aSp6L65LG==",
"6ZO25rKz6L6557yYLH==",
"5pyJ5LiA54mH56We5aWH55qE5b2p6Jm55rW3LC==",
"5ZKM5oiR5LiA6LW35YaS6ZmpLB==",
"6aOe5ZCR5Y+m5LiA5Liq5LiW55WMLC==",
"5Zyo6YGl6L+c55qE5aSp6L65LB==",
"6ZO25rKz6L6557yYLC==",
"5pyJ5LiA54mH56We5aWH55qE5b2p6Jm55rW3LB==",
"5ZKM5oiR5LiA6LW35YaS6ZmpLH==",
"6aOe5ZCR5Y+m5LiA5Liq5LiW55WMLN==",
"c3VwZXIgbWFnaWMgd29ybGR+fg=="]
def cut(obj, sec):
return [obj[i:i+sec] for i in range(0,len(obj),sec)]
flag=''
print(len(a))
for i in range(len(a)):
flag+=base64_stego(a[i])
flagg=cut(flag,8)
flag=''
print(flagg)
ff=[1]*100
for i in range(len(flagg)):
ff[i]=int(flagg[i],2)
flag+=(chr(ff[i]))
print(flag)