base64编码zip文件还原----windows

2023-07-08 16:07:58 浏览数 (2)

开头

以下内容针对windows系统!!!

在CVE-2022-25099之后记这篇文章有讲到怎么还原,当时提到了两种还原思路,一种是将解码后的乱码复制到一个txt文件中,然后修改后缀名为zip,但是当时这种思路有问题。现在复盘一下。

失败原因

待系统学习windows和linux系统的文件格式和各种类型文件的文件编码。

虽说不具体了解,但是知道不同格式的文件有其独特的文件头、文件尾标识以及文件编码方式,比如图片文件、视频文件等。

比如在制作图片马时,需要将图片和木马转换为二进制然后将木马二进制追加到图片二进制之后。

为什么不将图片用文本编辑器打开然后保存为txt文件,再将木马添加到txt文件末尾后再修改后缀名为jpg呢?这种方式制作图片马还能否正常打开显示图像呢?

带着疑问我尝试以这种方式制作图片马,具体步骤如下:

  1. 将 jpg 图片用文本编辑器打开
  2. 另存为 txt 文件
  3. 打开 txt 文件,将木马追加到末尾
  4. 修改 txt 文件后缀名为 jpg

制作好后,发现无法正常显示。原因如下:

如上文所述,不同格式的文件有其独特的文件头、文件尾标识以及文件编码方式。在第二步另存为txt文件时,添加了txt文件独有的标识,改变了二进制。所以再将其改为jpg文件,系统也无法按图片的解析方式正常解析图像。

当然以修改后缀名的方式还原zip文件也是因此原因失败。

新想法,用文本编辑器打开图片后,直接在末尾添加字符串再保存,图片会不会正常显示图像

带着想法尝试,步骤如下:

  1. 将 jpg 图片用文本编辑器打开
  2. 在末尾添加字符串
  3. 直接保存或者另存为 jpg 文件

经过测试,发现图片正常显示图像。

同时又诞生新想法,直接修改 jpg 文件后缀名为 txt 。然后用画图软件打开

经测试发现,画图软件打开后图像正常显示。

小小总结

直接修改文件名并不会修改文件的文件格式,也就是不会修改文件的二进制。

仅仅改变了系统对文件的标识,换句话就是仅仅改变了文件名而已(windows系统文件名由名称和后缀名组成)

回归话题,怎么还原base64编码的zip文件

windows系统可以使用命令certutil还原,步骤如下:

  1. base64字符串保存到一个 txt 文件中,例如 base64.txt
  2. 使用如下命令还原成 zip 文件,例如 source.zip
代码语言:javascript复制
certutil -decode base64.txt source.zip

使用我编写的python工具还原:

代码语言:javascript复制
# -*- coding: utf-8 -*-
import argparse
import base64
import zipfile


def main():
    parser = argparse.ArgumentParser(description='This is a simple base64 encoded zip file restoration tool')
    parser.add_argument('-f', '--file', type=str, required=True)

    args = parser.parse_args()

    restoration(args)


def restoration(args):
    # 经过Base64编码的ZIP文件数据
    base64_encoded_data = open(args.file, 'r').read()

    # 解码Base64数据
    decoded_data = base64.b64decode(base64_encoded_data)

    # 写入解码后的数据到ZIP文件
    with open("restored_file.zip", "wb") as file:
        file.write(decoded_data)

    print("ZIP文件已还原")

    # 如果需要提取ZIP中的文件内容,可以使用zipfile模块
    with zipfile.ZipFile("restored_file.zip", 'r') as zip_ref:
        # 提取所有文件到目标文件夹
        zip_ref.extractall("restore_folder")

    print("ZIP文件已解压缩")


if __name__ == '__main__':
    main()

将代码保存为baseToZip.py,然后使用命令:

代码语言:javascript复制
python baseToZip.py -f base64.txt

使用命令后,会出现restored_file.zip文件和restore_folder目录

restored_file.zip是还原后的zip文件,restore_folder是restored_file.zip解压后的目录。

注意关闭 Windows Defender 安全杀毒软件 的实时保护,因为会识别木马文件,所以解压的木马文件也会打不开

0 人点赞