[纵横网络靶场社区]奇怪的文件_源文件


part1part2part3很明显是zip文件的压缩源文件数据区压缩源文件目录区压缩源文件目录结束标志

[纵横网络靶场社区]奇怪的文件_数据_02


[纵横网络靶场社区]奇怪的文件_工控CTF_03


[纵横网络靶场社区]奇怪的文件_工控CTF_04


三个文件都补全50 4B两个字节,然后依次把part2part3补全到part1文件中;修改part1文件名为part1.zip

[纵横网络靶场社区]奇怪的文件_数据_05


使用010 Editor打开,分析文件结构发现压缩源文件数据区CRC字段为空、压缩源文件目录区filename字段为空。CRC可以从压缩源文件目录区获得,filename字段可以从压缩源文件数据区获得。互相补全即可得到完整的zip文件。

[纵横网络靶场社区]奇怪的文件_数据_06


有加密,真加密,接下来就是这道题出题人第一个令人看不懂的操作:7位大小写字母+数字的zip密码爆破。

[纵横网络靶场社区]奇怪的文件_数据_07


果然脑洞大开,懒得理,直接看答案

[纵横网络靶场社区]奇怪的文件_字段_08


得到zip压缩密码:GyxXaq9

[纵横网络靶场社区]奇怪的文件_源文件_09


使用010 Editor打开,发现文件末附加隐写了一些数据

[纵横网络靶场社区]奇怪的文件_字段_10


[纵横网络靶场社区]奇怪的文件_数据_11


仔细观察不难发现这些数据是zip的字节流数据的逆序,将这些数据提取出来,然后Python简单处理

from binascii import *

with open('reverse_data', 'rb') as f:
    hex_data = hexlify(f.read())[::-1]
    with open('flag.zip', 'wb') as f1:
        for i in range(0, len(hex_data), 2):
            data = hex_data[i: i+2][::-1]
            f1.write(unhexlify(data))

[纵横网络靶场社区]奇怪的文件_源文件_12


enc.pyc文件使用pyc反编译得到源码:https://tool.lu/pyc/

import random
import base64
import sys

def KeyGenerate():
    random.seed(10)
    keyseed = ''
    for i in range(12):
        x = random.randint(32, 127)
        keyseed += chr(x)
    
    return base64.b64encode(keyseed.encode('utf-8')).decode('utf-8')


def enc(key, file):
    count = 0
    f = open(file, 'rb')
    f1 = open('encrypted', 'wb')
    for now in f:
        for nowByte in now:
            newByte = nowByte ^ ord(key[count % len(key)])
            count += 1
            f1.write(bytes([newByte]))
        
    

if __name__ == '__main__':
    key = KeyGenerate()
    enc(key, sys.argv[1])

通过分析加密源代码还原出加密前的文件,Python简单处理

import random
import base64


def KeyGenerate():
    random.seed(10)
    keyseed = ''
    for i in range(12):
        x = random.randint(32, 127)
        keyseed += chr(x)
    return base64.b64encode(keyseed.encode('utf-8')).decode('utf-8')

def dec(key):
    count = 0
    with open('encrypted', 'rb') as enc_data:
        with open('decrypted_data', 'wb') as dec_data:
            for now in enc_data:
                for nowByte in now:
                    newByte = nowByte ^ ord(key[count % len(key)])
                    count += 1
                    dec_data.write(bytes([newByte]))


if __name__ == '__main__':
    key = KeyGenerate()
    dec(key)
    #print(key)

得到一张jpg图片

[纵横网络靶场社区]奇怪的文件_数据_13


接下来就是出题人第二个令人看不懂的操作:LSB隐写7位大小写字母+数字+特殊符号的密码爆破 懒得管,直接贴密码:U!lSb29

[纵横网络靶场社区]奇怪的文件_数据_14


然后最后一个令人看不懂的操作:只有半张图?

我尝试了修改了jpg图片的高度,发现也得不到完整清晰的图片

[纵横网络靶场社区]奇怪的文件_工控CTF_15


肉眼识别flag。。。。。。。识别不出来,直接偷吧。。。

flag{2ceuagIha7v8mlfod9uas1d86wqer0}