得到一個加密的壓縮包
百度了一下,簡單了解zip文件的結構:
zip文件由三部分構成:壓縮源文件數據區+目錄區+目錄結束區
源文件數據區:文件頭+文件數據+數據描述符
通過百度我們知道這個zip文件是一個偽加密
需要使用winhex工具去修改文件頭的加密標志位,或者使用zipcenop.jar
下面說說兩種工具的簡單使用:
-
winhex
可參考https://blog.csdn.net/pdsu161530247/article/details/73612910
大致操作如下截圖:
為什么要搜索50 4B呢,因為50 4B 01 02是目錄中文件文件頭標記,關於更多詳細信息參考上面給出的帖子 -
zipcenop.jar
或者使用zipcenop.jar(需要java環境)進行破解:
java -jar ZipCenOp.jar r a2eb7ceaf5ab49f7acb33de2e7eed74a.zip
得到一個base64加密的文本:
行數有點多,此處就不放該文本了
解密后得到如下內容:
Steganography is the art and science of writing hidden messages in such a way that no one
沒有flag
這里涉及到一個base64的隱寫
我們可以利用base64的隱寫py腳本跑出結果:
Base_sixty_four_point_five
由於本人也沒有學過python,此處關於腳本的編寫我也是直接copy的別人的腳本:
import re
import base64
b64chars = 'ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/'
# s.txt為待解密的base64隱寫字符串所在的文件
f = open('s.txt','r')
base64str = f.readline()
# pattern2用於匹配兩個等號情況時,等號前的一個字符
# pattern2用於匹配一個等號情況時,等號前的一個字符
pattern2 = r'(\S)==$'
pattern1 = r'(\S)=$'
# 提取后的隱寫二進制字符加入binstring中
binstring = ''
# 逐行讀取待解密的base64隱寫字符串,逐行處理
while(base64str):
# 先匹配兩個等號的情況,如果匹配不上,再配置一個等號的情況
# 如果無等號,則沒有隱藏,無需處理
if re.compile(pattern2).findall(base64str):
# mstr為等號前的一個字符,該字符為隱寫二進制信息所在的字符
mstr = re.compile(pattern2).findall(base64str)[0]
# 確認mstr字符對應的base64二進制數,賦值給mbin
mbin = bin(b64chars.find(mstr))
# mbin格式如0b100,mbin[0:2]為0b
# mbin[2:].zfill(6)為將0b后面的二進制數前面補0,使0b后面的長度為6
mbin2 = mbin[0:2] + mbin[2:].zfill(6)
# 兩個等號情況隱寫了4位二進制數,所以提取mbin2的后4bit
# 賦值給stegobin,這就是隱藏的二進制信息
stegobin = mbin2[-4:]
binstring += stegobin
elif re.compile(pattern1).findall(base64str):
mstr = re.compile(pattern1).findall(base64str)[0]
mbin = bin(b64chars.find(mstr))
mbin2 = mbin[0:2] + mbin[2:].zfill(6)
# 一個等號情況隱寫了2位二進制數,所以提取mbin2的后2bit
stegobin = mbin2[-2:]
binstring += stegobin
base64str = f.readline()
# stegobin將各行隱藏的二進制字符拼接在一起
# 從第0位開始,8bit、8bit處理,所以range的步進為8
for i in range(0,len(binstring),8):
# int(xxx,2),將二進制字符串轉換為10進制的整數,再用chr()轉為字符
print(chr(int(binstring[i:i+8],2)),end='')
print()
可參考:
https://www.jianshu.com/p/1e4308489865
https://www.tr0y.wang/2017/06/14/Base64steg/