[HNCTF 2022 WEEK2]calligraphy 复现

复现流程:

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

在这里插入图片描述

在这里插入图片描述


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

在这里插入图片描述

可以得到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字体文件了。

在这里插入图片描述

这一步也可以使用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。

在这里插入图片描述

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

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值