[HNCTF 2022 WEEK2]calligraphy 复现

复现流程:

  1. 打开word,出现这个,复制一下,粘贴出来是! "#$%flag is not here~~,所以说明这个字体肯定被修改过了。

[HNCTF 2022 WEEK2]calligraphy 复现_第1张图片

在这里插入图片描述


  1. 改后缀名为zip,解压压缩包,打开/word/fontTable.xml

[HNCTF 2022 WEEK2]calligraphy 复现_第2张图片

可以得到font-name为flag Mono,fontKey为{1F513ACE-F8AD-4F84-9264-C7B38E1D8CB7}


  1. 根据我们得到的fontKey,我们将我们的 word/fonts/font2.odttf 重命名为 1F513ACE-F8AD-4F84-9264-C7B38E1D8CB7.odttf

打开odttf转换ttf网站:https://somanchiu.github.io/odttf2ttf/js/demo,上传改过名的文件后就会自动下载ttf字体文件了。

[HNCTF 2022 WEEK2]calligraphy 复现_第3张图片

这一步也可以使用python脚本:

import os

odttf_name = "./1F513ACE-F8AD-4F84-9264-C7B38E1D8CB7.odttf"
odttf_path = os.path.abspath(odttf_name)

with open(odttf_path, "rb") as f:
    data = f.read()

# 获取文件名
file_name = os.path.splitext(odttf_path)[0].split("\\")[-1].replace("-", "")

# 获取key
key = []
for i in range(len(file_name), 0, -2):
    key.append(int(file_name[i-2:i], 16))

with open("./font2.ttf", "wb") as f:
    for i in range(32):
        f.write(bytes([data[i] ^ key[i % len(key)]]))
    f.write(data[32:])

  1. 使用在线网站FontDrop,拖到上传框中,得到flag。

[HNCTF 2022 WEEK2]calligraphy 复现_第4张图片

NSSCTF{How_ug1Y_f0Nt}


题目补充:

关于odttf转ttf脚本原理:

首先将1F513ACE-F8AD-4F84-9264-C7B38E1D8CB7.odttf,得到文件名1F513ACE-F8AD-4F84-9264-C7B38E1D8CB7

再将文件名去掉-,得到1F513ACEF8AD4F849264C7B38E1D8CB7

再将1字节为一组进行反序,得到key是:B78C1D8EB3C76492844FADF8CE3A511F

最后再对odttf文件的前32字节进行异或,密钥就是16字节的B78C1D8EB3C76492844FADF8CE3A511F

你可能感兴趣的:(python,安全)