201912_BUUCTF_Base64隐写

tags:Base64隐写

0x00. 题目

附件路径:https://pan.baidu.com/s/1GyH7kitkMYywGC9YJeQLJA?pwd=Zmxh#list/path=/CTF附件

附件名称:201912_BUUCTF_Base64隐写.zip

0x01. WP

打开文件发现为多行Base64文本,猜测为Base64隐写

exp1.py

# 使用现成第三方库进行解码
import b64steg
with open('flag.txt' ,'r') as f:
    s=f.read()

print(b64steg.decry(s))
# b'GXY{fazhazhenhaoting}\x00'

exp2.py

从Base64编码算法入手逆向解码分析隐写二进制内容,并将二进制内容转为字符串

import base64

def int2Bin(digit):
   return bin(digit)[2:]  #将索引转成二进制,去掉'0b';


def binAsc(string):       #二进制转成ASCII码
   temp = ''
   for i in range(int(len(string) / 8)):
      temp += chr(int(string[i * 8 : i* 8 + 8] , 2))
   return temp

def readBase64FromFile(filename):
   Base64Char = "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/"     #Base64字符集 已按照规范排列
   result = ''
   with open(filename ,'r') as f:
      for data in f.readlines():
         if data.find('==') > 0:
            result += int2Bin(Base64Char.index(data[-4]))[-4:]    #根据隐写原理,‘==’情况取等号前最后一个字符转换后取后4位
         elif data.find('=') > 0:
            result += int2Bin(Base64Char.index(data[-3]))[-2:]    #根据隐写原理,‘=’情况取等号前最后一个字符转换后取后2位
   print(binAsc(result))

readBase64FromFile('flag.txt')
# GXY{fazhazhenhaoting}
posted @ 2025-09-09 22:22  JasonJHu  阅读(22)  评论(0)    收藏  举报