古剑山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
本文来自博客园,作者:{Alexander17},转载请注明原文链接:{https://home.cnblogs.com/u/alexander17}
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 10年+ .NET Coder 心语 ── 封装的思维:从隐藏、稳定开始理解其本质意义
· 地球OL攻略 —— 某应届生求职总结
· 提示词工程——AI应用必不可少的技术
· Open-Sora 2.0 重磅开源!
· 周边上新:园子的第一款马克杯温暖上架