古剑山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

古剑山misc01与02详解的更多相关文章

  1. spring原理案例-基本项目搭建 02 spring jar包详解 spring jar包的用途

    Spring4 Jar包详解 SpringJava Spring AOP: Spring的面向切面编程,提供AOP(面向切面编程)的实现 Spring Aspects: Spring提供的对Aspec ...

  2. Spark详解(02) - Spark概述

    Spark详解(02) - Spark概述 什么是Spark Hadoop主要解决,海量数据的存储和海量数据的分析计算. Spark是一种基于内存的快速.通用.可扩展的大数据分析计算引擎. Hadoo ...

  3. kafka详解(02) - kafka_2.11-2.4.1安装部署

    kafka详解(02) - kafka_2.11-2.4.1安装部署 环境准备 下载安装包 官网下载地址:https://kafka.apache.org/downloads.html 2.4.1版本 ...

  4. HBase详解(02) - HBase-2.0.5安装

    HBase详解(02) - HBase-2.0.5安装 HBase安装环境准备 Zookeeper安装 Zookeeper安装参考<Zookeeper详解(02) - zookeeper安装部署 ...

  5. Hive详解(02) - Hive 3.1.2安装

    Hive详解(02) - Hive 3.1.2安装 安装准备 Hive下载地址 Hive官网地址:http://hive.apache.org/ 官方文档查看地址:https://cwiki.apac ...

  6. Zookeeper详解(02) - zookeeper安装部署-单机模式-集群模式

    Zookeeper详解(02) - zookeeper安装部署-单机模式-集群模式 安装包下载 官网首页:https://zookeeper.apache.org/ 历史版本下载地址:http://a ...

  7. Hadoop详解(02)Hadoop集群运行环境搭建

    Hadoop详解(02)Hadoop集群运行环境搭建 虚拟机环境准备 虚拟机节点数:3台 操作系统版本:CentOS-7.6-x86-1810 虚拟机 内存4G,硬盘99G IP地址分配 192.16 ...

  8. maven实战(02)_坐标详解

    (一)  何为mave坐标 maven的世界中拥有数量非常巨大的构件,也就是平时用的一些jar,war等文件. maven定义了这样一组规则: 世界上任何一个构件都可以使用Maven坐标唯一标志,ma ...

  9. adb调试命令详解-2016.02.01

    adb(Android Debug Bridge),调试桥可以让设备的调试监测过程在远端进行,而不必在运行实际运行应用的设备上,方便调试的输出. 1 命令详解 a 查看帮助信息         adb ...

  10. 02.PHP7.x编译详解

    #php7编译安装安装 ``` useradd -M -s /sbin/nologin www yum -y install openssl-devel bzip2-devel curl-devel ...

随机推荐

  1. 事务中无法切换数据源?DataSourceSwitchInvoker:轻松实现多数据源切换执行工具类

    背景: 在有标注为@Transactional的类或公共方法中(传播特性,如:NOT_SUPPORTED.SUPPORTS.REQUIRED[默认值].REQUIRES_NEW)执行数据源切换可能不成 ...

  2. SSM - 狂神的项目示例

    出于对狂神的崇拜,总结SSM项目. 基本介绍 项目分层 基本介绍 项目名称:ssmbuild 介绍:通过书籍管理系统实现一个简单的SSM项目,可以作为其他Java Web项目的借鉴. 主要功能模块:查 ...

  3. 如何通过 Linux Bash 技术,让你的独立产品实现一键安装

    我在业余时间开发了一款自己的独立产品:升讯威在线客服与营销系统.陆陆续续开发了几年,从一开始的偶有用户尝试,到如今线上环境和私有化部署均有了越来越多的稳定用户. 虽然我编写了非常详细的在线文档,说明如 ...

  4. Scala样例类及底层实现伴生对象

    package com.wyh.day01 /** * 样例类的使用 * 1.使用case修饰类 * 2.不需要写构造方法,getter,setter方法,toString方法 * 3.直接通过对象名 ...

  5. php执行时间

    要计算代码的bai执行时间,在PHP来讲是du十分简单的,首先,zhi你需要知道,PHP是一种dao顺序执行的脚本语言,所以,可以按照以下步骤来计算代码的执行时间: <?php function ...

  6. 【Unit3】社交系统模拟(JML规格化设计)-作业总结

    第三单元作业难度在OO课程中当属最低.原因在于最复杂多变(贻害无穷)的设计环节被作业接口和JML规格描述限定,我们不再需要考虑整体的构架(抽象出那些类,设置哪些方法等),唯一的能动性仅在具体实现和复杂 ...

  7. 【记录】C-文件输入输出

    写在开头   摸鱼摸得昏天黑地,是该炸一炸鱼的本愿了~ 以前总觉得笔记没什么重要的,但有时事到临头,又十分渴求简明的提纲来唤起记忆/提供重学的门路.于是就有了以下的产物,也希望能抑制一下无效摸鱼的堕落 ...

  8. go 定义接口解决 import cycle not allowed

    前言 go项目运行报错: import cycle not allowed,导入循环(import cycle) 报错原因,在Go语言中,两个或更多的包之间形成了相互依赖的关系,即A包导入了B包,而B ...

  9. MongoDB 复制集机制及原理

    复制集的作用 MongoDB 复制集的主要意义在于实现服务高可用. 它的现实依赖于两个方面的功能: 数据写入时将数据迅速复制到另一个独立节点上 在接受写入的节点发生故障时自动选举出一个新的代替节点 在 ...

  10. go module基本使用

    前提 go版本为1.13及以上 官方文档 如果你想更深层次的了解GO MODULE的意义及开发者们的顾虑,可以直接访问官方文档(EN) https://github.com/golang/go/wik ...