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

古剑山misc01与02详解的更多相关文章
- spring原理案例-基本项目搭建 02 spring jar包详解 spring jar包的用途
Spring4 Jar包详解 SpringJava Spring AOP: Spring的面向切面编程,提供AOP(面向切面编程)的实现 Spring Aspects: Spring提供的对Aspec ...
- Spark详解(02) - Spark概述
Spark详解(02) - Spark概述 什么是Spark Hadoop主要解决,海量数据的存储和海量数据的分析计算. Spark是一种基于内存的快速.通用.可扩展的大数据分析计算引擎. Hadoo ...
- 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版本 ...
- HBase详解(02) - HBase-2.0.5安装
HBase详解(02) - HBase-2.0.5安装 HBase安装环境准备 Zookeeper安装 Zookeeper安装参考<Zookeeper详解(02) - zookeeper安装部署 ...
- Hive详解(02) - Hive 3.1.2安装
Hive详解(02) - Hive 3.1.2安装 安装准备 Hive下载地址 Hive官网地址:http://hive.apache.org/ 官方文档查看地址:https://cwiki.apac ...
- Zookeeper详解(02) - zookeeper安装部署-单机模式-集群模式
Zookeeper详解(02) - zookeeper安装部署-单机模式-集群模式 安装包下载 官网首页:https://zookeeper.apache.org/ 历史版本下载地址:http://a ...
- Hadoop详解(02)Hadoop集群运行环境搭建
Hadoop详解(02)Hadoop集群运行环境搭建 虚拟机环境准备 虚拟机节点数:3台 操作系统版本:CentOS-7.6-x86-1810 虚拟机 内存4G,硬盘99G IP地址分配 192.16 ...
- maven实战(02)_坐标详解
(一) 何为mave坐标 maven的世界中拥有数量非常巨大的构件,也就是平时用的一些jar,war等文件. maven定义了这样一组规则: 世界上任何一个构件都可以使用Maven坐标唯一标志,ma ...
- adb调试命令详解-2016.02.01
adb(Android Debug Bridge),调试桥可以让设备的调试监测过程在远端进行,而不必在运行实际运行应用的设备上,方便调试的输出. 1 命令详解 a 查看帮助信息 adb ...
- 02.PHP7.x编译详解
#php7编译安装安装 ``` useradd -M -s /sbin/nologin www yum -y install openssl-devel bzip2-devel curl-devel ...
随机推荐
- Hadoop - [01] 概述
Hadoop官网:https://hadoop.apache.org/ Hadoop下载:https://archive.apache.org/dist/hadoop/common/ 一.Hadoop ...
- PHP将变量存储在数据库中,读取并执行变量的方法
http://www.edbiji.com/doccenter/showdoc/4/nav/1214.html 例如将下边的字符串存储到数据库中您好,您的验证码是".$authcode.&q ...
- sap 管理--企业解决方案 -设备管理
1.什么是sap 管理 2.设备管理管的是什么 3.设备的几种状态 4.设备bom(物料清单) 5.测量点计数器 1.什么是sap 管理 System Applications and Product ...
- 【译】Visual Studio 中新的强大生产力特性
有时候,生活中的小事才是最重要的.在最新版本的 Visual Studio 中,我们增加了一些功能和调整,目的是让您脸上带着微笑,让您更有效率.这里是其中的一些列表,如果您想要完整的列表,请查看发行说 ...
- 写于vue3.0发布前夕的helloworld之二
接着,继续走,来到了vm.$mount. 开始生成render函数,生成VNode,由于是第一次加载,所以patch机制为只删除前一个dom节点机制,下面都会讲到. 先到$mount: Vue.pro ...
- mac 如何开启指定端口供外部访问?
前言 需要 mac 上开放指定端口,指定 ip 访问 解决 在 macOS 上开放一个端口,并指定只能特定的 IP 访问,可以使用 macOS 内置的 pfctl(Packet Filter)工具来实 ...
- Linux权限与特殊权限
目录 5.1 权限讲解 5.1.1 什么是权限 5.1.2 为什么要管理权限 5.1.3 权限的分类 5.1.4 Linux的文件属于谁? 5.1.5 文件属主.属组.其他用户 5.1.6 所属者的表 ...
- DevOps - DevOps基础概念梳理
目录 DevOps DevOps的好处与价值 可能的几个关注点 DevOps能力环 DevOps与持续集成.持续交付 一个完整的过程 典型的CICD流水线过程 DevOps黄金思维圈 初见 一些图示 ...
- 在Java集合框架中,`Set`接口是一个重要的接口,它表示一个不包含重复元素的集合。常见的`Set`实现类有`HashSet`、`LinkedHashSet`和`TreeSet`。下面是关于`Set`接口的一些基本用法和方法介绍:
常用实现类 HashSet: 基于哈希表实现,元素无序. 插入.删除.查找操作的时间复杂度为O(1). LinkedHashSet: 继承自HashSet,并使用双向链表来维护元素的插入顺序. 保留元 ...
- AIR724UG上电后引脚的默认电平
使用AIR724UG的引脚作为继电器的控制引脚时,由于上电时引脚的电平有的高,有的低. 在某些场合我们希望GPIO上电默认是低电平,所以我将常用引脚中可用的引脚标注了出来.