得到一个.docx文件
目前大部分的.docx文档都是 以压缩的形式存在的
修改末尾为zip 查看
在这一步中 我之前直接把这个
鸣雏恋.docx
给foremost 分离了,分离后的压缩包打开后没找到love.zip
与
key.txt
ε=(´ο`*)))唉
.
这里是领宽度字符隐写
vim key.txt 打开查看即可
http://330k.github.io/misc_tools/unicode_steganography.html
压缩包密码是:Because I like naruto best
接着我们来打开 love.zip 压缩包
分析可得:
有129488张图片,图片只有两种类型,分别用,0 1 来表示 8个为一组,转为10进制后 转为字母即可
算法的大致思路如下:
先提取压缩包内的所有文件名和文件大小.
因为zipobj.namelist()文件列表中的文件名不是按递增排序的,所以需要先将文件名和文件大小提取到另一个列表内
第一条数据是空的需要删除
这个大列表内存在着许多的小列表,每个子列表代表一个文件,子列表的第一个元素是文件名称,第二个元素是文件大小
因为文件名称是以out/名称为格式的,所以需要删除后缀和out/字符串,保留数字后再转换成数字类型
使用sorted()函数对大列表进行递增,如果列表的元素都为列表时,默认会按每个子列表的第一个元素递增排序
之后的操作就是将文件大小替换成0和1,每8位二进制就转换成十进制,然后再从十进制转换成ASCII码对应的字符
最后把字符结果写入文件
# 小作者:小狐狸FM
import zipfile
lis = []
result = ""
data = ""
size = 1
with zipfile.ZipFile('love.zip', 'r') as zipobj: #读取压缩包
for file_name in zipobj.namelist(): #遍历名称
info = zipobj.getinfo(file_name)
file_name = file_name.encode('cp437').decode('gbk')
lis.append([file_name,info.file_size])
# print(lis)
del lis[0]
for i in range(len(lis)): #处理文件名和数据
lis[i][0] = lis[i][0].replace("out/","")
lis[i][0] = lis[i][0].replace(".png", "")
lis[i][0] = int(lis[i][0])
if lis[i][1]==262:
lis[i][1]='0'
else:
lis[i][1]='1'
# print(lis)
lis = sorted(lis)
# print(lis)
for i in range(len(lis)):
data += lis[i][1] #数据大小
if len(data)%8==0: #集齐八位二进制时
result+=chr(int(data,2))
data=""
with open("2.txt","w") as fp:
fp.write(result)
base64转图片
http://tool.chinaz.com/tools/imgtobase/