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

news2024/10/7 6:48:07

文章目录

  • 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 TTFont

url = '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 = 1024
        img = 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.coloradmin.cn/o/1479678.html

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

相关文章

The Era of 1-bit LLMs: All Large Language Models are in 1.58 Bits

The Era of 1-bit LLMs: All Large Language Models Are in 1.58 Bits 相关链接:arxiv、github 关键字:1-bit LLMs、BitNet、模型压缩、能耗效率、模型性能 摘要 近期的研究,例如BitNet,正在为1-bit大型语言模型(LLMs…

网站文章被百度快速收录的工具

百度是中国最主要的搜索引擎之一,对于网站管理员来说,网站文章被百度快速收录是至关重要的,因为这直接影响着文章的曝光和网站的流量。然而,许多网站管理员都会问一个常见的问题:文章百度收录需要几天?在这…

ISP代理是什么?怎么用?

在跨境出海业务中,代理IP对于您的在线任务至关重要,尤其是对于那些运行多个帐户的人来说。为您的帐户选择正确类型的代理对于确保帐户安全非常重要,劣质的IP容易使账号遭受封号风险。IPFoxy的多种代理IP类型应用范围各有侧重,其中…

项目实现json字段

有些很复杂的信息,我们一般会用扩展字段传一个json串,字段一般用text类型存在数据库。mysql5.7以后支持json类型的字段,还可以进行sql查询与修改json内的某个字段的能力。 1.json字段定义 ip_info json DEFAULT NULL COMMENT ip信息, 2.按…

C语言学习笔记(二)

C语言学习 学习笔记(一) 学习笔记(二) 文章目录 C语言学习一、C语言中的数据类型进制二进制八进制十六进制进制转换表 单位换算寻址 数据类型基本类型整数类型整数的有符号和无符号实数类型字符型 构造类型指针类型空类型总结 常量直接常量符号常量转义符 符号常量…

Java配置49-nginx 反向代理 sftp 服务器

1. 背景 后端服务需要通过部署在跳板机上的 nginx 访问一个外网的 SFTP 服务器。 2. 方法 nginx从 1.9.0 开始,新增加了一个stream模块,用来实现四层协议的转发、代理或者负载均衡等。 首先检查 nginx 版本信息及是否安装了 stream 模块。 进入 ngi…

java程序员面试笔试宝典答案,java面试框架问题

目录 由于文档内容过多,共计有500页,因此为了避免影响到大家的阅读体验,在此只以截图展示部分内容,详细完整版的可以在文末获取! 部分内容展示 深入浅出索引(上) 索引的常见模型InnoDB 的索引…

回溯 Leetcode 332 重新安排行程

重新安排行程 Leetcode 332 学习记录自代码随想录 给你一份航线列表 tickets ,其中 tickets[i] [fromi, toi] 表示飞机出发和降落的机场地点。请你对该行程进行重新规划排序。 所有这些机票都属于一个从 JFK(肯尼迪国际机场)出发的先生&a…

使用R语言进行主成分和因子分析

一、数据描述 数据来源2013年各地区水泥制造业规模以上企业的各主要经济指标,原始数据来源于2014年(《中国水泥统计年鉴》),试对用主成分和因子进行经济效益评价。 地区,企业个数(亿元),流动资产合计&…

亚信安慧AntDB之国密算法介绍

近年来,为摆脱对国外技术和产品的过度依赖,建设行业网络安全环境,增强我国行业信息系统安全、可靠的能力,国家有关机关和监管机构站在国家安全和长远战略的高度提出了“推动国密算法应用实施、加强行业安全可控”的要求。 密码算…

感谢信∣企企通再获肯定,中国煤科【天玛智控】SRM项目成功上线,推动煤矿供应链智能化高效协同发展

近日,煤矿智能无人化开采技术引领者【北京天玛智控科技股份有限公司】(以下简称“天玛智控”)携手企企通打造的SRM数字化采购平台成功上线。系统上线后,实现了天玛智控与供应商之间的信息共享和业务协作,提升采购业务效…

解决android studio build Output中文乱码

1.效果如下所示: 代码运行报错的时候,Build Output报的错误日志中中文部分出现乱码,导致看不到到底报的什么错。 2.解决办法如下: 点击Android studio开发工具栏的Help-Edit Custom VM Options....,Android studio会…

Node.js中的并发和多线程处理

在Node.js中,处理并发和多线程是一个非常重要的话题。由于Node.js是单线程的,这意味着它在任何给定时间内只能执行一个任务。然而,Node.js的事件驱动和非阻塞I/O模型使得处理并发和多线程变得更加高效和简单。在本文中,我们将探讨…

继承-学习2

this关键字:指向调用该方法的对象,一般我们是在当前类中使用this关键字,所以我们常说代表本类对象的引用 super关键字:代表父类存储空间的标识(可看作父类对象的引用) 父类: package ven;public class Fu {//父类成员…

Jenkins笔记(一)

个人学习笔记(整理不易,有帮助点个赞) 笔记目录:学习笔记目录_pytest和unittest、airtest_weixin_42717928的博客-CSDN博客 目录 一:简单了解 二:什么是DevOps 三:安装Jenkins 四&#xff1…

uniapp实现-审批流程效果

一、实现思路 需要要定义一个变量, 记录当前激活的步骤。通过数组的长度来循环数据,如果有就采用3元一次进行选择。 把循环里面的变量【name、status、time】, 全部替换为取出的那一项的值。然后继续下一次循环。 虚拟的数据都是请求来的, 组装为好渲染的格式。 二…

Diffusion Models/Score-based Generative Models背后的深度学习原理(5):伪似然和蒙特卡洛近似配分函数

Diffusion Models专栏文章汇总:入门与实战 前言:有不少订阅我专栏的读者问diffusion models很深奥读不懂,需要先看一些什么知识打下基础?虽然diffusion models是一个非常前沿的工作,但肯定不是凭空产生的,背…

FaceBook获取广告数据

1、访问 广告管理工具 确认自己登陆的账号下面能看到户。 ​ 2、使用 图谱Api探索工具 生成用户短期口令 ​ 3、get请求(或者浏览器直接打开)访问: https://graph.facebook.com/v19.0/me?fieldsid,name, email&access_token{上一步生成的口令} ​ 4、短期…

ChatGPT4.0 的优势、升级 4.0 为什么这么难以及如何进行升级?

前言 “ChatGPT4.0一个月多少人民币?” ”chatgpt4账号“ ”chatgpt4 价格“ “chatgpt4多少钱” 最近发现很多小伙伴很想知道关于ChatGPT4.0的事情,于是写了这篇帖子,帮大家分析一下。 一、ChatGPT4.0 的优势 (PS:…

Tiktok矩阵系统搭建的逻辑和源代码!

很多和我一样从事外贸工具开发的朋友都清楚,TikTok矩阵系统不仅确保了平台的高效运行,还为用户提供了个性化的内容推荐,从而大大提升了用户黏性,因此很多人都乐意去开发类似的工具,下面我们就来说说Tiktok矩阵系统搭建…