0x01. 进入环境,下载附件
题目给出了一个无后缀文件,使用txt打开,如图:
0x02. 问题分析
可以看出,题目包含的内容就是base64字符,想办法接触base64编码内容即可。但是这么多编码信息,如何拿到flag?
解题过程参考大佬的博客,https://www.cnblogs.com/coming1890/p/13540370.html,在此引用一张图片:
在这里,说明加密后的填充位0,解码过程中,即使当
a
i
≠
0
a_i≠0
ai=0,解码过程也能正确进行。那么也就是可以使用
a
i
a_i
ai传递一些信息。因此,将编码中的ai提取出来
0x03. 直接上代码
from string import ascii_uppercase, ascii_lowercase, digits
from Crypto.Util.number import long_to_bytes
def solve():
with open('pic/1a351e90fb2b476a929d1e2666d7c511', 'r') as file:
f = file.read()
lc = f.split('\n')[:-1] # split最后一个字符为空,因此要去到倒数第二个
# base就是对应的64个字符
base = ascii_uppercase + ascii_lowercase + digits + '+/'
re2 = []
for code in lc:
if '==' in code: # 如果是编码一个字节
re2.append(bin(base.find(code[-3]))[2:].rjust(6, '0')[2:])
elif '=' in code: # 如果是编码两个字节
re2.append(bin(base.find(code[-2]))[2:].rjust(6, '0')[4:])
ret = ''.join(re2)
return long_to_bytes(int(ret[:ret.rfind('1') + 1], 2), 2).decode()
if __name__ == '__main__':
print(solve())
运行后,最终的答案为:ROIS{base_GA_caN_b3_d1ffeR3nT}
最后,base64编码的原理一定要知道,后续作为内容进行整理!