题目地址
https://game.fengtaisec.com/#/startQuestions/11
题目描述
在上位机中发现奇怪的文件,你能发现其中的秘密吗?flag形式为 flag{}
解题思路
下载压缩包,打开后是三个没有后缀名的文件,使用010打开查看
发现不是png,jpg格式,里面有个.jpg,可能是个压缩文件,里面压缩了一个jpg文件。经过查找文档,这个是确实是个zip文件,缺少了50 4b 也就是zip的常见标志:pk两个字符。三个文件是一个zip压缩包分成了三份
一个 ZIP 文件由三个部分组成:
压缩源文件数据区+压缩源文件目录区+压缩源文件目录结束标志
三个文件刚好分成了这三个部分
part1中CRC值缺失,可由part2中找到;part2中没有压缩文件名可由part1确定
三个文件part1-3分别就代表的zip的三个主要组成部分
压缩源文件数据区
打开一个完整的zip文件,,每个字节的含义逐个分析
压缩源文件数据区详解:
50 4B 03 04 (4 bytes):即为我们zip格式压缩文件的头文件标记。其中50 4B的ASCII对应的是PK,是创始人Phil Katz的缩写,可以用这个来识别zip格式压缩文件。实际上zip文件的各个部分都以这个为开头
0A 00(2 bytes):解压文件需要的pkware版本,部分也有14 00和14 03的。
00 00(2 bytes):全局定位标记,可以查看zip文件有无加密,有则为01 00,无则为00 00.如果没有设置密码,但我们把这个修改为了01 00则为俗称的伪加密
00 00(2 bytes):压缩方式。有些也为08 00
C9 46(2 bytes):最后修改文件时间
36 53(2 bytes):最后修改文件日期
C0 71 DE A0(4 bytes):CRC-32校验码(0AED170C)
05 00 00 00(4 bytes):压缩后尺寸
05 00 00 00(4 bytes): 压缩前尺寸
05 00 (4 bytes):文件名长度。代表扩展记录长度后面,包含的压缩源文件名有几个字节。
00 00(2 bytes):扩展记录长度
31 2E 74 78 74 31(6 bytes): 和前面的05 00对应。可以看到右侧转换出来的即为我们zip文件中包含有1.txt文件。
压缩源文件目录区详解:
50 4B 01 02(4 bytes):压缩源文件目录区的文件头标记。和数据区的不同即为01 02
3F 00(2 bytes): 压缩使用的pkware版本
0A 00(2 bytes):解压文件需要的pkware版本
00 00(2 bytes):全局定位标记,这里代表无加密
00 00(2 bytes):压缩方式。有些也为08 00
C9 46 36 53(4 bytes): 上次修改的时间、日期
C0 71 DE A0(4 bytes):CRC-32校验码(0AED170C)和part1的CRC-32效验码一样
05 00 00 00(4 bytes):压缩后尺寸
05 00 00 00(4 bytes): 压缩前尺寸
05 00 (2 bytes):文件名长度
24 00(2 bytes):扩展字段长度
00 00(2 bytes):文件注释长度
00 00 (2 bytes):磁盘开始号
00 00(2 bytes):内部文件属性
20 00 00 00(4 bytes):外部文件属性
00 00 00 00(4 bytes):局部头部偏移量
31 2E 74 78 74 31(6 bytes): 和前面的05 00对应。可以看到右侧转换出来的即为我们zip文件中包含有1.txt文件。
压缩源文件目录结束标志详解:
50 4B 05 06(4 bytes):压缩源文件目录结束标志头
00 00(2 bytes):当前磁盘编号
00 00(2 bytes):目录区开始磁盘编号
01 00(2 bytes):本磁盘上记录总数
01 00(2 bytes):目录区中记录总数
57 00 00 00(4 bytes):目录区尺寸大小
00 28 00 00(4 bytes):目录区对第一张磁盘的偏移量
00 00(2 bytes):ZIP文件注释长度
参考:一个zip文件由这样三个部分组成
https://blog.csdn.net/wclxyn/article/details/7288994
把三个文件的文件头进行补全,都要补上 50 4B ,part1 中的01 00 表示文件加密
00 00 00 00 四个字节即为我们缺失的CRC-32校验码
part2 中34 47 56 50 为CRC-32效验码 填充到part1中
将part1中的文件名:keyvisual.jpg对应的16进制:4B 65 79 56 69 73 75 61 6C 2E 6A 70 67 8D补全到part2中:
part3中插入 50 4B
在010中将part2 和part3部分的16进制代码复制粘贴到part1部分的结尾。
ctrl+s保存,给part1的文件名后面加上后缀.zip即可打开我们需要的zip文件:
有密码,看看是不是伪加密 把01 00 改为00 00 打开还是不行,说明需要爆破
也没有给提示,无脑爆破 ,直接wp破解出来 密码为GyxXaq9 解压后得到一张图片
使用010打开查看 ,开头标准的FF D8 jpg文件格式
在最后,发现 4B 50 ,猜测是 zip文件逆序
py脚本逆序读取文件
f1=open('KeyVisual.jpg','rb+')f2=open('KeyVisual.zip','wb+')f2.write(f1.read()[::-1])f1.close()f2.close()
得到一个KeyVisual.zip文件 进行解压, 存在有pyc文件,pyc文件反编译即为py文件
python在线反编译:http://tools.bugscaner.com/decompyle/
得到一个py文件 是一个进行加密的py文件 ,加密后的文件为encrypted
我们可以修改构建解密算法enc1.py
1
key生成函数中定义了种子始终为10,所以加解密使用的key都一样,为aSRWXWkhOlteQ3M0
2
查看算法为异或,即加解密使用的算法应当一样,直接再次调用加密函数即可解密
对encrypted加密文件解密,得到dncrypted文件
使用010打开,发现是一张png图片 ,加后缀为.png
修改后打开发现还是原来那张图片
发现该图片有LSB隐写,但隐写信息加密
猜测是弱密码 使用123456尝试 解密失败,直接看手wp:发现密码为7位大小写字母+数字+特殊符号的密码爆破
密码:U!lSb29 这
使用工具cloacked-pixel进行解密
释放出一个jpg文件
肉眼识别出flag:flag{2ceuagIha7v8mlfod9uas1d86wqer0}