【OCR识别】使用OCR技术还原加密字体文字

文章目录

  • 1. 写在前面
  • 2. 页面分析
  • 3. 字符知识
  • 4. 加密分析

【作者主页】:吴秋霖
【作者介绍】:Python领域优质创作者、阿里云博客专家、华为云享专家。长期致力于Python与爬虫领域研究与开发工作!
【作者推荐】:对JS逆向感兴趣的朋友可以关注《爬虫JS逆向实战》,对分布式爬虫平台感兴趣的朋友可以关注《分布式爬虫平台搭建与开发实战》
还有未来会持续更新的验证码突防、APP逆向、Python领域等一系列文章

1. 写在前面

  目前市面上有不少的网站使用了字体加密技术,像一些重要的数字内容使用字体加密很常见!从早期的静态固定字体文件随着不断的对抗演进到目前的动态字体文件,从PC端的应用到目前APP页面的普及使用

本期文字将以红色小番茄为例,咱们使用OCR识别技术来攻克一下字体加密

2. 页面分析

我们打开首先网站分析一下,可以看到响应的HTML内容中网页显示的本文内容,均是看起来晦涩难懂的字符,这就是字体加密。如下所示:

在这里插入图片描述

对于Web端的字体加密,我们可能都知道会有相应的woff类型的文件,存储着自定义的字体,它的作用则是让网站能够使用这些自定义的字体来显示加密的文本内容,如下所示:

在这里插入图片描述

3. 字符知识

在真正的内容分析开始之前,我们需要了解的一些知识点。这里不知道的朋友认真学,所有的中文汉字它都自己对应的一串数字码,也叫做Unicode码点,这是一种国际化的字符编码标准!为世界上几乎所有的字符集提供了一个唯一的标识

它们是一个非负整数,如下作者随机打印了几个示例:

在这里插入图片描述

同理我们使用Python的内置函数ord可以查看字符的码点,chr函数则将码点转换为字符

4. 加密分析

接下来,这里将网页中加密的文本拿一小段下来简单的进行一个测试。使用ord打印一下所有字符的码点,可以看到一个特征!就是每一个被加密的字体对应的码点都是58…这样的,如下所示:

在这里插入图片描述

这个时候我们则需要将上面提到的woff文件下载下来,并使用fontTools库来加载字体并解析其结构,代码如下:

from fontTools.ttLib import TTFonturl = 'https://lf6-awef.bytetos.com/obj/awesome-font/c/dc027189e0ba4cd-700.woff2'response = requests.get(url).content
with TTFont(BytesIO(response)) as font_parse:u_d = font_parse.getBestCmap())

将会得到一个码点与字体编码对应的字典,如下所示:

{58344: 'gid58344', 58345: 'gid58345', 58346: 'gid58346', 58347: 'gid58347', 58348: 'gid58348', 58349: 'gid58349', 58350: 'gid58350', 58351: 'gid58351', 58352: 'gid58352'}

接下来,我们需要将gid编码对应的文字信息拿到,并建立字典。方便我们后续在对文本内容进行还原的时候调用,加密字体编码如何对应明文数据,代码实现如下:

unicode_reuslt = []
for key, _ in u_d.items():unicode_reuslt.append(key)
char_list = [chr(ch_unicode) for ch_unicode in unicode_reuslt]
normal_dict, error_dict = font_to_img(char_list, ttf_name)
new_dict = {ord(key): value for key, value in normal_dict.items()}
print(new_dict)

在这里将使用到OCR识别技术,去还原加密字体的文字,这也是当前比较主流的一种方案,代码实现如下所示:

def font_to_img(code_list, filename, score=0.95):normal_dict = {}ocr = CnOcr()for char_list in code_list:char_code = char_list.encode().decode()img_size = 1024img = Image.new('img', (img_size, img_size), 255)draw = ImageDraw.Draw(img)font = ImageFont.truetype(filename, int(img_size * 0.7))x, y = draw.textsize(char_code, font=font)draw.text(((img_size - x) // 2, (img_size - y) // 2), char_code, font=font, fill=0)img = img.convert("RGB")word = ocr.ocr_for_single_line(np.array(img))normal_dict[char_code] = word["text"]return normal_dict

如上代码,这里简单解读一下!score参数表示OCR对该文本的识别得分,上面代码中没有使用的原因是有较小概率的丢失率!这个问题可以找一些更精准的模型来识别

再说说识别文字的流程与原理,上面使用Image来创建了一个白色的背景图像,然后使用ImageDraw在图像上绘制出字符,字体大小为图像大小的70%

然后将图像转换为RGB格式,最后使用Ocr对图像进行单行识别,获取识别结果以及识别得分,结果如下所示:

在这里插入图片描述

接下来,我门需要做的就是对加密的文本内容进行遍历,对每一个字符进行编码转换,得到对对应的码点!提取码点为58特征的加密字体,然后从上面字典获取对应的文字,如下所示:

在这里插入图片描述

最终我们再通过上述的代码将加密打散还原出来的加密字体文字,拼接成完整的句子。这里的话我们将所有加密特征与非加密文字内容完成组装即可,最终内容还原如下所示:

在这里插入图片描述

以上是加密字体文字内容还原的全部流程,如需要完整的Python代码进行测试或学习,可联系作者获取!

  好了,到这里又到了跟大家说再见的时候了。创作不易,帮忙点个赞再走吧。你的支持是我创作的动力,希望能带给大家更多优质的文章

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/711018.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

减少页面加载时间:提升用户体验的关键

✨✨ 祝屏幕前的您天天开心,每天都有好运相伴。我们一起加油!✨✨ 🎈🎈作者主页: 喔的嘛呀🎈🎈 目录 引言 一、为什么页面加载时间重要? 二、如何减少页面加载时间? …

华润置地品牌虚拟代言人IP“吉吉”,开启地产数字化营销新场景

在数字化营销时代,房地产品牌通过虚拟人技术,可以有效链接购房者,占领客户心智,优化购房体验,塑造年轻化、数字化的品牌形象。 华润置地积极拥抱数字变革,通过广州虚拟动力「现场虚拟主持技术服务」与「虚…

【Unity】使用Unity实现双屏显示

引言 在使用Unity的时候,有时候会需要使用双屏显示 简单来说就是需要在两个显示器中显示游戏画面 双屏显示注意点: ①双屏显示需要电脑有两个显示 ②双屏显示只能用于PC端 ③不仅仅可以双屏,Unity最大支持8屏显示 1.相机设置 ①我们打开Un…

Untiy webgl iis服务器加载ab包报404.3,需要为AB包添加MIMI映射

首选确定一下文件在不在 这里是缺少对于AB包文件类型的映射,因为AB包没有后缀名,我们为服务器添加通用的映射 1 开始菜单搜索iis管理器,先选中我们的服务器,然后双击进入MIME类型 2 右侧点击添加按钮 3 添加如下内容 文件扩展名为. 类型为…

性能测试-并发测试心得

一些关键名词 吞吐量 指的是在一定时间内系统处理请求或传输数据的能力,具体到性能测试中的话,就是指单位时间内系统处理并完成的请求数量或者是系统传输的数据量。 例如,吞吐量可以表示为系统每秒处理HTTP请求次数,或者是系统…

服务器git安装python包失败,如何手动下载github项目包并安装到虚拟环境中(简单易懂)

背景: 想要复现一个项目,建立好虚拟环境后,准备安装项目需要的包,故输入命令pip install -r requirements.txt requirements.txt如下图 其他包我都安装成功了,只有最后一个包失败了,是需要服务器git链接…

【学习心得】解决无限debugger的常用方法

一、什么是无限debugger 有些网站为了防止爬虫或其他恶意行为,会故意设置无限debugger作为一种简单的反爬机制,它会在开发者工具打开的情况下不断暂停执行。这对于想要分析其他代码逻辑、排查问题或进行正常开发调试工作的开发者来说极为不便。 二、解决…

Sora学习笔记

Sora - 探索AI视频模型的无限可能 随着人工智能技术的飞速发展,AI视频模型已成为科技领域的新热点。而在这个浪潮中,OpenAI推出的首个AI视频模型Sora,以其卓越的性能和前瞻性的技术,引领着AI视频领域的创新发展。让我们将一起探讨…

ios 使用window.location.href 不能跳转微信短链处理过程以及解决方法

需求背景: 由h5提供页面,通过后台请求微信api生成对应的schemal短链,该h5页面嵌入到原生的ios以及安卓app上,当用户点击后通过短连接跳转到其他小程序中 以下为生成微信scheme代码示例,生成后短链为:weixi…

Azure[Sky] Dynamic Skybox

Azure[Sky] Dynamic Skybox是一个完整而稳健的天空系统,它可将你的项目提升大到其他层次。 Azure[Sky] 不仅适合使用现实图片的项目,事实上,该系统用在风格化图片的项目也很不粗,甚至效果更好。使用 Azure,每种风格都能实现最佳效果。 性能: 在开发此资源的过程中,性能是…

【Android】属性动画

在属性动画出现之前,Android 系统提供的动画只有帧动画和 View 动画。View 动画我们都了解,它提供了 AlphaAnimation、RotateAnimation、TranslateAnimation、ScaleAnimation 这4种动画方式,并提供了 AnimationSet 动画集合来混合使用多种动画…

35. 【Linux教程】Linux 修改用户组

前面小节介绍了如何添加用户组,本小节介绍如何给已经添加的新用户组修改信息,从 /etc/group 文件信息可以看到,用户组的信息比用户信息项少,和 usermod 命令类似,用户组的信息可以使用 groupmod 命令修改。 1. groupmo…

为了董宇辉,老婆跟我打起来了!写下一份深刻检讨

两个月前,因为讨论董宇辉小作文事件,跟老婆吵起来了。起因就为了两句话,写了这份检讨!给大家分享一下。 老婆在网上刷了两晚关于董宇辉小作文的视频,一直为董宇辉喊冤、打抱不平。起初,我跟老婆的想法&…

怎样消除视频上的字幕和文字?3个方法值得推荐

怎样消除视频上的字幕和文字?消除视频上的字幕和文字不仅是一个常见的需求,更是一个对视频内容质量提升的关键步骤。特别是在处理从网络下载的带有水印或标识的视频时,这些额外的文字和信息往往会干扰观众的观看体验,甚至可能影响…

【数据结构】顺序表和链表的对比,在各种情况下如何选择

顺序表详细内容: 【数据结构】线性表 顺序表(动态、静态分配,插入删除查找基本操作)解析完整代码 单链表详细内容: 【数据结构】单链表解析完整代码(插入、删除、尾插法、头插法、按值和按位查找、前插和后…

IDEA开发环境的安装与编写第一个程序

1.下载 IDEA(全称IntelliJ IDEA)是用于Java程序开发的集成环境(也可用于其他语言),它在业界被公认是最好的Java开发工具之一,尤其在智能代码助手、代码自动提示、重构、J2EE支持、Ant、JUnit、CVS整合、代…

Mamba与MoE架构强强联合,Mamba-MoE高效提升LLM计算效率和可扩展性

论文题目: MoE-Mamba: Efficient Selective State Space Models with Mixture of Experts 论文链接: https://arxiv.org/abs/2401.04081 代码仓库: GitHub - llm-random/llm-random 作为大型语言模型(LLM)基础架构的后…

新一代科学计算与系统建模仿真平台MWORKS 2024a震撼发布:产品强势进化,更新亮点速览!

2月25日,同元软控成功举办MWORKS 2024产品发布会,会上公布了新版MWORKS的设计理念、关键技术、版本亮点、产品特性以及重大改进。当前,科学计算与系统建模仿真平台MWORKS 2024a已正式上线,开放下载。 MWORKS已成为全球第4个完整的…

C# 高阶语法 —— Winfrom链接SQL数据库的存储过程

存储过程在应用程序端的使用的优点 1 如果sql语句直接写在客户端,以一个字符串的形式体现的,提示不友好,会导致效率降低 2 sql语句写在客户端,可以利用sql注入进行攻击,为了安全性,可以把sql封装在…

嘉立创专业版导入SW模型的板框

1、SW新建一个需要的模型,例如下图, 2、点击另存为.dxf 文件(是.dxf文件) 3、选择要保存模型的视图,如上视图,确定后出现上视图板框形状,然后保存即可。 4、打开嘉立创,点击文件——…