1.压缩包加解密
附件是压缩包,伪加密直接用winhex修改标志位解压。
解压发现是张残缺的二维码,三个角的占位符缺失,用stegsolve颜色取反,再在网上找张占位符,调整大小贴上修复就可以扫码了,
2.文件识别、合并与分离
附件是压缩包,有密码,用winhex发现找不到504B0102
010editor甚至直接报错,考虑到名字叫fakezip,可能是压缩包坏了,索性直接用winrar修复,结果解压内容为空,这条路走不通,直接binwalk分离出png文件
试了下不是flag,那就只能是源附件压缩包的密码了,解压得到下图和一个txt,小丑头倒过来是32位MD5,即用32位MD5加密FakeFlag.txt
this_is_fake_zip用32位md5加密得到4059614b85477b90720a772f4fdbf1f6
3.图片隐写
附件解压是jpg文件,打不开,用winhex发现文件头尾很多数值调换了位置,一般jpg文件头:FFD8FFE0或FFD8FFE1或FFD8FFE8,文件尾是FFD9。
导出全部数据并以四个字节为一组反向排列,尾部两个字节单独互换,脚本如下
def reverse_bytes_in_groups(input_file, output_file):
try:
# 读取输入文件内容
with open(input_file, 'r') as file:
hex_data = file.read().strip() # 去掉文件内容的空白字符
reversed_hex_data = ""
# 每8个字符(4个字节)作为一组
for i in range(0, len(hex_data), 8):
group = hex_data[i:i + 8]
# 按字节逆序并拼接
reversed_group = group[6:8] + group[4:6] + group[2:4] + group[0:2]
reversed_hex_data += reversed_group
# 将结果写入输出文件
with open(output_file, 'w') as file:
file.write(reversed_hex_data)
print(f"转换完成!结果已写入 '{output_file}'")
except FileNotFoundError:
print("输入文件未找到,请检查文件路径")
except ValueError as e:
print(f"错误:{e}")
# 使用示例
input_file = "1.txt"
output_file = "output.txt"
reverse_bytes_in_groups(input_file, output_file)
得到新的jpg图片nixv.jpg,尝试用PS拉高对比度,vmc{You_Are_Huo_Yan_Jin_Jing}
4.流量包分析
附件解压是pcap,用wireshark打开,字符串搜索png,在108、3848、3895处有ncc.png和url:192.168.163.1:8000,无法访问,直接导出http对象,修改高度得到flag
5.音频隐写
附件解压是我最爱的–少年他的奇幻漂流-五月天.mp3和txt,txt里是歌词,用Audacity打开mp3,查看频谱,放大,其实可以下载原曲对比着看
6.简单的音乐
附件解压一首歌,winhex打开发现最底下有密码,用mp3stego进行解码,得到txt,打开就是flag
Decode -X 1.mp3 -P Pa55w0Rd,
7.猜猜生日
附件有密码,尝试用archpr爆破密码,无果,强行修改加密点也不行,使用解密工具john
先利用
zip2john ‘/home/kali/Desktop/251.zip’ > hash.txt
得到zip的哈希值,再用
john ‘/home/kali/Desktop/hash.txt’
尝试破解,最后用
john -show ‘/home/kali/Desktop/hash.txt’
得到解压密码20010207
注意到上面有四种数字,直接四进制转字符串就可以得到flag,不过四进制的对应关系可能要试几次,里面的四个数字404、996、251、985分别对应0、1、2、3,但是不知道具体的对应关系,要把对应关系试出来 ,由于前三个字母是 vmc,所以
v=0x76=01110110=1312,m=0x6d=01101101=1231,c=0x63=01100011=1203,404=1, 985=3,996=2,251=0
以此类推,得到vmc{Ji_De1_Su1_sHen_X1e_dAi_Lu_yin_bi},脚本如下
四进制数字替换输出:
from itertools import permutations
# 定义待匹配的数字
numbers = [404, 996, 251, 985]
mappings = list(permutations([0, 1, 2, 3])) # 所有可能的对应关系
# 读取文件1.txt中的数据
with open('1.txt', 'r') as file:
data = file.read().strip().split() # 读取并按空格分割
# 尝试每一种可能的对应关系
results = []
for mapping in mappings:
# 构建当前映射字典
num_to_digit = {numbers[i]: mapping[i] for i in range(4)}
# 转换数据
transformed_data = ''.join(str(num_to_digit[int(num)]) for num in data)
results.append(transformed_data)
# 将结果写入2.txt
with open('2.txt', 'w') as file:
for result in results:
file.write(result + '\n')
print("转换完成,结果已保存到2.txt中。")
个位数转二进制:
# 打开4.txt文件,读取内容
with open('4.txt', 'r') as f:
data = f.read()
# 创建一个空列表,用于存储每个个位数转换成的二进制数
binary_numbers = []
# 遍历文件内容中的每一个字符
for char in data:
# 检查字符是否为个位数
if char.isdigit() and 0 <= int(char) <= 9:
# 将该数字转换为二进制,并填充成两位
binary_numbers.append(bin(int(char))[2:].zfill(2))
# 将二进制结果写入5.txt文件,每个二进制数独占一行
with open('5.txt', 'w') as f:
for binary in binary_numbers:
f.write(binary)
print("转换完成,结果已保存到5.txt")
连续二进制序列转ascii:
# 打开5.txt文件,读取所有二进制数
with open('5.txt', 'r') as f:
binary_data = f.read().replace('\n', '') # 去掉所有换行符,使二进制数连在一起
# 检查二进制长度是否是8的倍数(一个ASCII字符是8位)
if len(binary_data) % 8 != 0:
print("警告:二进制数据的长度不是8的倍数,可能存在不完整的字节。")
# 创建一个空字符串,用于存储转换后的ASCII文本
ascii_text = ""
# 按8位分割二进制数据并转换为ASCII字符
for i in range(0, len(binary_data), 8):
byte = binary_data[i:i+8] # 取8位作为一个字节
ascii_text += chr(int(byte, 2)) # 将二进制字符串转换为整数,再转换为对应的ASCII字符
print(ascii_text)
# 将ASCII结果写入6.txt文件
with open('6.txt', 'w') as f:
f.write(ascii_text)
print("转换完成,结果已保存到6.txt")
8.总不能一个个打吧-怎么获取图片信息
附件是png
图片里的文本就是用base64加密之后填充了无关字符进行混淆,想办法提取文字,
有个Flag is vmc{Wooooooow_Uknow_b4s3_64}