一、文件还原
某个重要文件被篡改,你能还原文件吗
下载压缩包里面有一个exe文件,双击无法打开应用
把应用拖进010editor查看,看到是修改过的,是个jpg图片,文件通过base64编码
需要使用脚本将base64转换成图片
贴一个脚本,需要将base64编码放进src里面
# -*- coding: utf-8 -*-
import base64
import re
import uuid
def decode_image(src):
"""
解码图片
:param src: 图片编码
:return: str 保存到本地的文件名
"""
# 1、信息提取
result = re.search("data:image/(?P<ext>.*?);base64,(?P<data>.*)", src, re.DOTALL)
if result:
ext = result.groupdict().get("ext")
data = result.groupdict().get("data")
else:
raise Exception("Do not parse!")
# 2、base64解码
img = base64.urlsafe_b64decode(data)
# 3、二进制文件保存
filename = "{}.{}".format(uuid.uuid4(), ext)
with open(filename, "wb") as f:
f.write(img)
return filename
if __name__ == '__main__':
# 解码测试
src = "" #base64编码
decoded_filename = decode_image(src)
print(f"图片已保存到本地: {decoded_filename}")
解出图片
没用发现flag应该是个图片隐写,尝试查看文件长宽是否正确
贴一个脚本查看
import sys
import struct
import zlib
filename = sys.argv[1]
with open(filename, 'rb') as f:
all_b = f.read()
crc32key = int(all_b[29:33].hex(),16)
data = bytearray(all_b[12:29])
n = 4095
for w in range(n):
width = bytearray(struct.pack('>i', w))
for h in range(n):
height = bytearray(struct.pack('>i', h))
for x in range(4):
data[x+4] = width[x]
data[x+8] = height[x]
crc32result = zlib.crc32(data)
if crc32result == crc32key:
print("宽为:",end="")
print(width)
print("高为:",end="")
print(height)
exit(0)
将图片拖进010editor,发现图片高度不对,将高度修改保存
查看到flag
二、找到证据
某个服务器的密钥被泄露,密码是100-1000以内的质素总和。帮公司拿到关键性的证据
下载为一个压缩包,需要密码,而密码就是100-1000以内质数总和
里面有一张图片
点击图片并未查看到有用信息,将图片放进010editor,查看到存在base64编码,需要将编码转换(使用上题脚本),转换出来得到一个完整的二维码,扫描即可得到flag