字体反爬破解

news2024/11/26 12:36:50

    • 1、通过 f12 查看网页相关信息
      • ① 搜索“python”相关岗位,想爬取下来作为分析,但是看到html源码为特殊字符,而不是页面上直观能看到的文字信息
      • ②点击对应的css样式查看css源码,通过源码解析字体加密过程
    • 2、通过 Domain+URI 获取到该字体文件
      • ① 这里没有后缀,我们只能去试是那一种格式的
      • ② 直至试出来文件格式为woff
    • 3、检验字体文件对应关系是否正确
    • 4、使用 python 进行字体映射
      • ① 将woff转换为xml查看逻辑
      • ② 主要观察\<cmap>里的对应关系
      • ③ 使用字典完成映射关系
    • 5、根据映射对网页源码进行对应替换

这里以实习僧为具体案例

1、通过 f12 查看网页相关信息

① 搜索“python”相关岗位,想爬取下来作为分析,但是看到html源码为特殊字符,而不是页面上直观能看到的文字信息

在这里插入图片描述

关闭对应的css样式可以看到,确实是做了字体反爬
在这里插入图片描述

②点击对应的css样式查看css源码,通过源码解析字体加密过程

在这里插入图片描述
在这里插入图片描述

查看 font-family 是由 myFont 传值生成,继续找 myFont 变量

2、通过 Domain+URI 获取到该字体文件

https://www.shixiseng.com/interns/iconfonts/file?rand=0.5135261623696619
在这里插入图片描述

① 这里没有后缀,我们只能去试是那一种格式的

一般常见的为:ttf、eot、otf、woff、svg,可以使用在线工具去检验
在这里插入图片描述
在这里插入图片描述

② 直至试出来文件格式为woff

在这里插入图片描述

在这里插入图片描述

3、检验字体文件对应关系是否正确

在这里插入图片描述
在这里插入图片描述
这里判断正确无误,底层通过css转换就是这个文件的文字

4、使用 python 进行字体映射

pip3 install fontTools

① 将woff转换为xml查看逻辑

from fontTools.ttLib import TTFont

font = TTFont('./font-file.woff')
font.saveXML('sxsfont.xml')

在这里插入图片描述

② 主要观察<cmap>里的对应关系

在这里插入图片描述
例如 这里python工程师
在这里插入图片描述
在这里插入图片描述

网页显示:&#xed53 &#xea63 &#xe4e5
xml中的code值:0xed53 0xea63 0xe4e5
xml中的name值:uni5DE5 uni7A0B uni5E08
通过观察可以得出:网页显示后四位与xml中的code值后四位一样,对应的name值看起来也是unicode编码,也是拿后四位去验证
在这里插入图片描述

③ 使用字典完成映射关系

from fontTools.ttLib import TTFont

font = TTFont('./font-file.woff')
cmap = font.get('cmap').getBestCmap()
print(cmap)

finish_font = {}
for k,v in cmap.items():
    if v[3:]:
        values = '\\u00' + v[3:] if len(v[3:]) ==2 else '\\u' + v[3:]
        real_values = values.encode().decode('unicode-escape')
        real_keys = hex(k).replace('0x','&#x')
        print(real_keys ,real_values)
        finish_font[real_keys]= real_values
print(finish_font)

在这里插入图片描述

5、根据映射对网页源码进行对应替换

for k, v in finish_font.items():
	html_text = html_text.replace(k, v)

在这里插入图片描述

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

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

相关文章

npm如何发包、测试以及删除发布包?

发包&#xff1a; 先在 npm 官网创个号 https://www.npmjs.com/ 2.创好了之后就先创建自己的文件夹&#xff0c;我用的vscode&#xff0c;也可以自己在命令行里面敲&#xff0c;比如我在F:// 前端学习-VUE项目 创建 my_firs_npm npm init -y创建之后&#xff0c;你能得到一个…

使用nginx部署前后端分离项目,处理跨域问题(共享cookie)

1.唠嗑 踩坑了&#xff0c;花费一天时间&#xff0c;开始对nginx配置不懂&#xff0c;老是弄错了配置文件&#xff0c;之前装的nginx ,cofnig有两个&#xff0c;nginx.config和nginx.config.def &#xff0c;开始配置我在nginx.config中配置的&#xff0c;后面一直在改def&…

scala学习手册

1. case class学习 样例类模式匹配 1.1 样例类&#xff08;case class&#xff09;适合用于不可变的数据。它是一种特殊的类&#xff0c;能够被优化以用于模式匹配。 case class MetaData(userId: String)case class Book(name: String) {def printBookName(): Unit {printl…

修改conda默认的环境安装位置

修改conda默认的环境安装位置

go语言终端交叉编译的事项windows编译其它平台软件包

交叉编译的终极版本[以此为准]&#xff1a; windows编译窗口目前分为cmd窗口&#xff0c;powershell窗口&#xff0c;这两个里面运行的命令不一样。 1.cmd窗口编译&#xff1b; 在windows10之前的系统版本上使用cmd命令行可以使用命令 CMD命令行中 在CMD命令行中编译&#…

C++-string类的模拟实现

本博客基于C官方文档当中给出的string类当中的主要功能实现&#xff0c;来作为参照&#xff0c;简单模拟实现 My-string 。 对于C当中的string类的介绍&#xff0c;在之前的几篇博客当中有说明&#xff0c;如有问题&#xff0c;请参照一下两个博客文章进行参考&#xff1a; (2…

CTF 1和0

一、 对于此类型数据&#xff0c;将其复制到excel中&#xff0c;将0所在位置背景色设置为白色&#xff0c;将1所在的位置设置为黑色 如图所示 二、添加定位符 对于定位符来说&#xff0c;同样可以在excel表中添加1&#xff0c;且1所在单元格为黑色表示定位符&#xff0c;如下…

07 - 线性表的类型定义 - 循环单向链表

前两节我们已经学习了单链表和双链表的概念以及具体的实现过程,其中有一个问题,值得注意,这样的链表有一个共同特征,就是尾节点指向 null,可以说是一次性的,像是糖葫芦。想象一下,如果此时,糖葫芦变成了手串,也就意味着头尾相连,形成闭环,这就是单向链表的另外一种形…

提高工作效率的文件管理软件实践方法

在现代社会中&#xff0c;高效的工作效率是保持竞争力的关键。随着信息技术的不断发展&#xff0c;文件管理软件成为提高工作效率的重要工具之一。 一个好的文件管理软件需要具备直观友好的用户界面。用户界面的清晰易操作让用户更便捷地找到所需文件。在软件开发的初期&#…

KMP 算法推演总结

title: KMP 算法推演总结 date: 2023-07-17 16:07:13 tags: 算法 categories:数据结构与算法 cover: https://cover.png feature: false KMP 算法推演 可先见 Fan’s Web 字符串匹配的 BF 算法、RK 算法部分&#xff0c;后面的 BM 算法及 KMP 算法可以搭配一起看 KMP 算法的…

ADB初识

ADB是Android Debug Bridge&#xff0c;是一个命令行程序。abd可以从计算机上通过USB控制Android手机设备。可以使用ADB复制文件、安装和卸载应用程序&#xff0c;运行shell命令等。 ADB的下载配置 Windows版本&#xff1a;https://dl.google.com/android/repository/platform…

ICV报告:确保城市未来产业发展成功的策略

近日&#xff0c;专注于前沿科技领域的国际咨询机构ICV TAnK发布了《确保城市未来产业发展成功的策略》报告。报告的主要内容包括&#xff1a;未来产业的背景情况和发展趋势&#xff1b;在城市中发展未来产业的重要性&#xff1b;对未来产业发展面临的五大困难和城市在发展未来…

Spring Batch之读数据库——JdbcCursorItemReader之自定义PreparedStatementSetter(三十八)

一、自定义PreparedStatementSetter 详情参考我的另一篇博客&#xff1a; Spring Batch之读数据库——JdbcCursorItemReader&#xff08;三十五&#xff09;_人……杰的博客-CSDN博客 二、项目实例 1.项目实例 2.代码实现 BatchMain.java&#xff1a; package com.xj.dem…

如何使用 SSH 远程控制一台 Windows 服务器

如何使用 SSH 远程控制一台 Windows 服务器 查了一下&#xff0c;Windows 上其实也是有 SSH 服务器的&#xff0c;只不过默认是没有装的&#xff0c;这里只需要安装一个 OpenSSH 服务器就好了。 Win10 的话&#xff0c;就在设置里面可以安装&#xff0c;从开始菜单打开“设置…

MYSQL表操作(DML,DDL)

建表并插入数据&#xff1a; mysql> create table worker(-> dept_id int(11) not null,-> emp_id int (11) not null,-> work_time date not null,-> salary float(8,2) not null,-> poli_face varchar(10) not null default 群众,-> name varchar(20) …

IIC的再认识

IIC介绍 关于IIC的基本概念&#xff0c;其实在学习89C52的时候已经大致了解过了&#xff0c;且由于STM32支持了IIC协议&#xff0c;所以在STM32中使用IIC可以直接调用HAL库的库函数&#xff1a; HAL_StatusTypeDef HAL_I2C_Mem_Write(I2C_HandleTypeDef *hi2c,uint16_t DevAdd…

SAP ABAP 报表程序实现下载文件及上传 Excel 并解析

步骤1&#xff1a; 事务代码 SMW0 选择二进制数据选项点击上方按钮。 点击新建按钮输入名称和描述&#xff0c;上传模版文件。 案例传入 EXCEL 如下&#xff1a; 创建好资源库对象结果如下。 步骤2&#xff1a;报表效果展示 点击按钮选择上传的文件。 解析 Excel 文件结果…

酷开科技大屏营销,撬动营销新增量

5G、人工智能、元宇宙等技术的发展促使数字营销的内容、渠道、传播方式发生了一系列变化&#xff1b;存量竞争下&#xff0c;增长成为企业更加迫切、更具挑战的课题&#xff0c;品牌营销活动越来越围绕“生意增长”和“提效转化”的目标展开。 如今的市场环境下&#xff0c;产…

计算机毕业论文选题推荐|软件工程|信息管理|数据分析|系列一

文章目录 导文题目导文 计算机毕业论文选题推荐|软件工程|信息管理 (***语言)==使用其他任何编程语言 例如:基于(***语言)门窗账务管理系统的设计与实现 得到:基于JAVA门窗账务管理系统的设计与实现 基于vue门窗账务管理系统的设计与实现 等等 题目 基于requests多线程…

BERT系列算法解读:(RoBERTa/ALBERT/DistilBERT/Transformer/Hugging Face/NLP/预训练模型/模型蒸馏)

BERT&#xff08;Bidirectional Encoder Representations from Transformers&#xff0c;基于Transformers的双向编码器表示&#xff09;系列算法在自然语言处理任务中是必不可少的经典模型&#xff0c;当初第一代GPT模型发布的时候&#xff0c;坐了冷板凳&#xff0c;罪魁祸首…