Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

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

Open
woodongwong opened this issue Feb 16, 2023 · 0 comments
Open

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

woodongwong opened this issue Feb 16, 2023 · 0 comments
Labels

Comments

@woodongwong
Copy link
Owner

写在前头

本篇文章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文件,并在其中引入加密字体文件。这样,我们就可以通过浏览器来展示出所有加密过的字符。

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

  • 创建一个空白的html文件,并在标签中添加<style>标签。
  • 在<style>标签中定义一个@font-face规则,指定加密字体文件的路径和名称。
  • 在<style>标签中定义一个类名为font-encrypt的样式,设置font-family为加密字体名称,并设置其他属性如font-size等。
  • 在标签中创建一个
    标签,并给它添加类名为font-encrypt。
  • 标签中插入所有cmap表中包含的unicode码点,用&#x开头和;结尾表示。
  • 保存html文件,并用浏览器打开。

下面是一个示例代码:

<html>

<head>
    <style>
        @font-face {
            font-family: 'FontEncrypt';
            src: url('FontEncrypt.ttf');
        }

        .font-encrypt {
            font-family: 'FontEncrypt';
            font-size: 32px;
        }
    </style>
</head>

<body>
    <div class="font-encrypt">
      &#xe000;&#xe001;&#xe002;&#xe003;&#xe004;&#xe005;&#xe006;&#xe007;&#xe008;&#xe009;
       &#xe00a;&#xe00b;&#xe00c;&#xe00d;&#xe00e;&#xe00f;&#xe010;&#xe011;&#xe012;&#xe013;
        &#xe014;&#xe015;&#xe016;...(省略)
    </div>
</body>
</html>

打开html文件后,我们可以看到浏览器上显示了一些奇怪的符号,这些就是加密过的字符。如果我们知道这些字符对应的原始文字,我们就可以建立起一个映射关系。

第三步:OCR识别

OCR(Optical Character Recognition)是一种将图像中的文字转换成可编辑的文本的技术,它可以用来识别各种语言和字体的文字。我们可以利用OCR来破解字体加密,具体步骤如下:

  1. 将浏览器的内容截图并交给OCR识别成文字。这里我们需要选择一个能够支持多种语言和字体的OCR工具,比如Google Cloud Vision API或者百度AI开放平台。
  2. 将文字的顺序和cmap的顺序一一对应起来,这样就创建好了一个映射关系。我们可以把这个映射关系保存成一个新的字体文件或者一个json文件,以便后续使用。

结论

通过上述方法,我们就可以成功地破解字体加密,并且还原出原始的文字内容。当然,这种方法也有一些局限性,比如:

  • OCR识别可能会出现错误或者漏识别,导致映射关系不完整或者不准确。
  • 字体加密可能会采用更复杂的方式进行混淆或者变形,使得OCR难以识别。
  • 字体加密可能会涉及版权问题或者敏感信息,破解后可能会引起法律纠纷或者道德争议。

因此,在使用这种方法时,请务必遵守相关法律法规,并且尊重原作者和内容。

我希望这篇博客文章能够对你有所帮助和启发。如果你有任何问题或者建议,请在评论区留言。谢谢你的阅读!

以上内容是ChatGPT生成

写在后头

令我没想到的是ChatGPT帮我生成了对应的python代码,没想到还可以正确的运行。最后两段比较仓促,因为是另外一个回答拼接起来的。ChatGPT看似很强大,目前也有很多错误,比如有时候认为今年是2022年等,另外,英文内容质量比较高。

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
Projects
None yet
Development

No branches or pull requests

1 participant