古剑山misc01与02详解

古剑山misc01与02详解

蓝书包

下载附件有182个加密压缩包 ,开始没有思路挑一两个尝试爆破看看

这样密码就有点明了了,压缩包的命名为1.zip到182.zip,密码10001到10182正好对应每一个压缩包,写脚本批量解压

import zipfile
import os

def extract_zip(zip_file, password, output_dir):
    """解压zip文件"""
    try:
        with zipfile.ZipFile(zip_file, 'r') as zip_ref:
            zip_ref.setpassword(password.encode())
            zip_ref.extractall(output_dir)
            print(f"解压 {zip_file} 成功")
    except Exception as e:
        print(f"解压 {zip_file} 失败: {e}")

def batch_extract(directory):
    """批量解压指定目录下的所有文件"""
    for i in range(1, 183):  # 1.zip 到 182.zip
        zip_filename = f"{i}.zip"
        zip_file_path = os.path.join(directory, zip_filename)
        password = str(10000 + i)  # 密码从10001到10182

        if os.path.exists(zip_file_path):  # 确保压缩包存在
            extract_zip(zip_file_path, password, directory)
        else:
            print(f"压缩包 {zip_filename} 不存在")

if __name__ == "__main__":
    directory = input("请输入文件夹路径: ")
    batch_extract(directory)

010打开发现第一个文件头是png的,我们加一下文件后缀(其实无所谓方便观察)

import os

def add_png_extension(directory):
    """将文件夹中所有文件名加上 .png 后缀"""
    for filename in os.listdir(directory):
        # 获取文件的完整路径
        file_path = os.path.join(directory, filename)
        
        # 检查是否为文件而非文件夹
        if os.path.isfile(file_path):
            # 获取文件名和扩展名
            name, ext = os.path.splitext(filename)
            
            # 新的文件名,加上 .png 后缀
            new_filename = name + '.png'
            
            # 构建新的文件路径
            new_file_path = os.path.join(directory, new_filename)
            
            # 重命名文件
            os.rename(file_path, new_file_path)
            print(f"文件 {filename} 已重命名为 {new_filename}")

if __name__ == "__main__":
    directory = input("请输入文件夹路径: ")
    add_png_extension(directory)

只有文件头的第一张图片用windows自带图片查看打开,发现只有一小部分

在182最后一个文件发现png文件结尾

然后我们需要读取文件夹所有文件的16进制并拼起来保存为一个文件

import os

def read_file_as_hex(file_path):
    """读取文件并返回其16进制内容"""
    try:
        with open(file_path, 'rb') as f:
            file_content = f.read()
            hex_content = file_content.hex()  # 转换为16进制字符串
            return hex_content
    except Exception as e:
        print(f"无法读取文件 {file_path}{e}")
        return ""

def combine_hex_files(directory, output_file):
    """将文件夹中所有文件的16进制内容拼接并保存为一个新文件"""
    with open(output_file, 'w') as output:
        for filename in os.listdir(directory):
            file_path = os.path.join(directory, filename)
            
            if os.path.isfile(file_path):  # 只处理文件,忽略文件夹
                hex_content = read_file_as_hex(file_path)
                if hex_content:  # 如果读取成功
                    output.write(hex_content + "\n")  # 拼接16进制内容,并换行

    print(f"所有文件的16进制内容已保存到 {output_file}")

if __name__ == "__main__":
    directory = input("请输入文件夹路径: ")
    output_file = input("请输入输出文件路径(例如output.txt): ")
    combine_hex_files(directory, output_file)

新建一个空png,将数据写进去

import os

def hex_to_bytes(hex_string):
    """将16进制字符串转换为字节"""
    try:
        # 每对16进制字符转换为1个字节
        return bytes.fromhex(hex_string)
    except ValueError as e:
        print(f"无效的16进制数据: {e}")
        return None

def save_hex_as_file(hex_file_path, output_file_path):
    """从包含16进制数据的文件恢复文件"""
    try:
        with open(hex_file_path, 'r') as hex_file:
            # 读取文件内容,假设每行是一个16进制字符串
            hex_data = hex_file.read().replace('\n', '')  # 移除换行符

            # 将16进制数据转换为字节
            file_data = hex_to_bytes(hex_data)
            if file_data is not None:
                with open(output_file_path, 'wb') as output_file:
                    output_file.write(file_data)
                print(f"文件已恢复并保存为: {output_file_path}")
            else:
                print("转换失败,无法保存文件。")
    except Exception as e:
        print(f"发生错误: {e}")

if __name__ == "__main__":
    hex_file_path = input("请输入包含16进制数据的文件路径: ")
    output_file_path = input("请输入恢复后的文件保存路径: ")
    save_hex_as_file(hex_file_path, output_file_path)

得到

最后puzzlesolver解密得flag

jpg

随波逐流检测一下

存在隐藏文件,使用binwalk分离

三个加密文件

用伪加密可以分离出pdf,且只有pdf是伪加密的

wps和浏览器打开pdf都没有任何线索,也不是pdf隐写,查看文件exif信息,发现使用过ps

用ps打开

在download图层看到二维码

用qr扫出信息

67f480eff11781617044bd47fb9535cfb0e4b6a09e51daff2107c536e9d4eebb3d517cfea6e3f176d4e0d37a9f3658845f3d1917cfce30a4f44ffa2e0af58485

回到压缩包,发现文件使用store储存,猜测本题使用明文攻击

新建一个sha512.txt,将内容复制进去

注意原文件压缩格式

使用7z标准压缩sha512.txt

最后使用aapr进行明文爆破

爆破成功

获得flag

posted @   Alexander17  阅读(23)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· 10年+ .NET Coder 心语 ── 封装的思维:从隐藏、稳定开始理解其本质意义
· 地球OL攻略 —— 某应届生求职总结
· 提示词工程——AI应用必不可少的技术
· Open-Sora 2.0 重磅开源!
· 周边上新:园子的第一款马克杯温暖上架
点击右上角即可分享
微信分享提示