woodongwong / notes

4 stars 0 forks source link

如何破解加密的字体?(使用ChatGPT编写) #72

Open woodongwong opened 1 year ago

woodongwong commented 1 year ago

写在前头

本篇文章99%的内容使用ChatGPT(new bing)编写的,由于ChatGPT无法生成很长的文章,所以此篇文章是多个回复的拼接,我只是做个整合。我是这么给ChatGPT说的:

我想编写一篇关于字体加密破解的技术文章,我的思路是这样的:1、将字体通过python fontTools库读取出cmap。2、根据cmap中的unicode码点生成html,并在html中引入加密字体,这样就可以将所有加密过的字体通过浏览器展示出来。3、将浏览器的内容截图并交给OCR识别成文字。4、将文字的顺序和cmap的顺序一一对应起来,这样就创建好了一个映射关系。

以下内容是ChatGPT生成:

如何破解加密的字体?

字体加密是一种常见的网页反爬虫技术,它通过将文字替换成自定义的符号,使得爬虫无法直接获取文字内容。但是,这种技术并不是无懈可击的,我们可以用Python+OCR来实现一个简单的字体加密破解器。

第一步:读取cmap

cmap是一个字体文件中的一个表,它存储了字符和字形之间的映射关系。我们可以用Python的fontTools库来读取cmap,并将其转换成一个字典。

首先,我们需要安装fontTools库:

pip install fontTools

然后,我们需要下载一个加密过的字体文件,接着,我们可以用以下代码来读取cmap:

from fontTools.ttLib import TTFont

# 读取字体文件
font = TTFont('encrypted_font.woff')

# 获取cmap表
cmap = font['cmap']

# 转换成字典
cmap_dict = cmap.getBestCmap()

# 打印结果
print(cmap_dict)

运行结果如下:

{57344: '', 57345: '', 57346: '', 57347: '', 57348: '', 57349: '', ...}

这样,我们就得到了每个字符对应的自定义符号。

第二步:生成html并引入加密字体

在第一步中,我们已经通过python fontTools库读取出了加密字体文件中的cmap表,这个表存储了每个字符对应的unicode码点。我们可以利用这个信息来生成一个html文件,并在其中引入加密字体文件。这样,我们就可以通过浏览器来展示出所有加密过的字符。

具体来说,我们需要做以下几件事: