记一次MISC记录(二)

一、文件还原

某个重要文件被篡改,你能还原文件吗

下载压缩包里面有一个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

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值