找商业网字体加密(TTFont方法)

news2024/11/9 18:56:10

 网点地址:公司介绍-泰州名列新材料有限公司 (zhaosw.com)

问题如下:

        在网站中看到的电话号码在页面源码中无法查看

破解步骤:

1.找到woff文件

        查找字体的class属性,全文查找font-face-encrypted找到如下内容,可以看到css样式中存在一个url,且是base64加密的:

        使用base64解密后,下载woff文件。代码如下:

import base64

woff_str = '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'
contents = base64.b64decode(woff_str)
open('font.woff', 'wb').write(contents)

2.使用TTFont将woff转换成xml文件

        代码如下:

from fontTools.ttLib import TTFont,BytesIO

f = TTFont('font.woff')
f.saveXML('font.xml')

        运行结果如下:

 

3.拿到xml中的数据存放到字典中

        代码如下:

    # 获取xml文件根目录
    root_obj = ElementTree.parse('font.xml').getroot()
    # 定位到map节点
    base = root_obj.find('cmap').findall('cmap_format_4')[0].findall('map')
    # 这里主要是整个关系字典,将unicode方法和值对应起来
    dicts = {}

    for i in base:
        dicts[i.attrib['code'][2:]] = i.attrib['name']

        上面代码的意思就是在xml文件中找到下图部分的内容,然后创建一个字典用来保存对应关系,例如:400b对应1。

 

4.使用字典替换页面源码对应的部分

        由于woff文件是动态变化的,所以每次请求的时候都要重新下载并转换woff文件。

        全程源码如下:

import base64
import re

import requests
from fontTools.ttLib import TTFont,BytesIO
from xml.etree import ElementTree

def download():
    headers = {
        "authority": "mlxcl.zhaosw.com",
        "accept": "text/html,application/xhtml+xml,application/xml;q=0.9,image/webp,image/apng,*/*;q=0.8,application/signed-exchange;v=b3;q=0.7",
        "accept-language": "zh-CN,zh;q=0.9,en;q=0.8,en-GB;q=0.7,en-US;q=0.6",
        "cache-control": "no-cache",
        "pragma": "no-cache",
        "referer": "https://mlxcl.zhaosw.com/products",
        "sec-ch-ua": "\"Not_A Brand\";v=\"8\", \"Chromium\";v=\"120\", \"Microsoft Edge\";v=\"120\"",
        "sec-ch-ua-mobile": "?0",
        "sec-ch-ua-platform": "\"Windows\"",
        "sec-fetch-dest": "document",
        "sec-fetch-mode": "navigate",
        "sec-fetch-site": "same-origin",
        "sec-fetch-user": "?1",
        "upgrade-insecure-requests": "1",
        "user-agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/120.0.0.0 Safari/537.36 Edg/120.0.0.0"
    }
    # 请求网站
    url = "https://mlxcl.zhaosw.com/about"
    response = requests.get(url, headers=headers).text

    # 拿到字体的 base64 字符串
    woff_str = re.findall('url\(data:application/x-font-ttf;charset=utf-8;base64,(.*?)\)', response)[0]
    contents = base64.b64decode(woff_str)
    open('font.woff', 'wb').write(contents)

    return response

def transform():
    # 接着把字体文件转格式
    f = TTFont('font.woff')
    f.saveXML('font.xml')

    # 获取xml文件根目录
    root_obj = ElementTree.parse('font.xml').getroot()
    # 定位到map节点
    base = root_obj.find('cmap').findall('cmap_format_4')[0].findall('map')
    # 这里主要是整个关系字典,将unicode方法和值对应起来
    all_dict = {}

    for i in base:
        all_dict[i.attrib['code'][2:]] = i.attrib['name']

    return all_dict


def replace_text(text, all_dict):
    for key in all_dict:
        text = text.replace('&#x' + key + ';', all_dict[key])

    print(text)

if __name__ == '__main__':
    # 下载woff文件
    html = download()

    # 转换为xml并得到字典
    dicts = transform()

    # 文本替换
    replace_text(html, dicts)

        破解前:

        破解后:

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

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

相关文章

在 Linux 上部署javaWeb项目+图文详解_java web项目部署到linux服务器

-f : force强制的意思,如果目标文件已经存在,不会询问直接覆盖 -i : 若目标已经存在,就会询问是否覆盖 -u : 若目标文件已经存在,且比目标文件新,才会更新 # 该命令可以把多个文件一次移动到一个文件夹中,但…

github删除自己创建的仓库

1.进入仓库,点击Settings 2.下拉至Danger Zone区域,点击Delete this repository 3.点击 I want to delete this repository 4.点击i have read ... 5.按提示输入,点击Delete this repository 总结 1.进入仓库,点击Settings 2.下…

推荐9个不同风格的音频频谱波形 听音乐怎么能少了它

9个不同风格的音频频谱波形 听音乐怎么能少了它。在我们沉静在听音乐的过程中,桌面上的频谱跳动,会让音乐更有动感,视觉化把音频表现出来。在桌面上跳动的音乐,更有氛围。小小编给大家带来了9种非常有特殊的音频频谱,看…

做一个最简单的CPU -- 计算机组成原理(六)

在上一个章节中,我们已经了解了一个存储是如何制作出来的,利用这个存储我们就可以做一个最简单的CPU 指令 我们知道CPU负责执行计算机的程序,而程序其实是一个个的操作指令 比如可能是计算指令,cpu会指示ALU进行加减运算 也可…

【web网页制作】html+css旅游家乡河南主题网页制作(5页面)【附源码】

一、👨‍🎓网站题目 旅游,当地特色,历史文化,特色小吃等网站的设计与制作。 二、✍️网站描述 👨‍🎓静态网站的编写主要是用HTML DIVCSS 等来完成页面的排版设计👩‍🎓…

Leetcode面试经典-115.不同的子序列

解法都在代码里&#xff0c;不懂就留言或者私信 理论上提交这个就是最优解 class Solution {public int numDistinct(String s, String t) {if(s.length() < t.length()) {return 0;}if(s.length() t.length()) {return s.equals(t)? 1 : 0;}char[] sArr s.toCharArray…

【大模型基础】P2 Bag-of-Words 词袋模型

目录 词袋模型 概述词袋模型 实例第1步 构建语料库第2步 对句子进行分词第3步 创建词汇表第4步 转换词袋表示第5步 计算余弦相似度 词袋模型的局限性 词袋模型 概述 词袋模型&#xff0c;Bag-of-Words&#xff0c;是一种简单的文本表示方法&#xff0c;也是 NLP 中的一个经典模…

(计算机论文)基于C#、Unity的先行者技能熟练度游戏系统的设计与实现

毕业设计&#xff08;论文&#xff09; ​​​​​ ​博主可接毕设论文&#xff01;&#xff01;&#xff01; 论文题目&#xff1a;基于C#、Unity的先行者技能熟练度游戏系统的设计与实现 摘 要 随着数字娱乐产业的蓬勃发展&#xff0c;独立游戏因其创新性和独特…

5.【Java开发手册】| 异常日志

这里我就列出一些我认为应当遵守的&#xff0c;并且添加一些我自己在工作中的一些感受&#xff0c;如果照着文档抄&#xff0c;那完全变成练习打字了&#xff0c;浪费读者时间&#xff0c;如果你也认同我的看法&#xff0c;或者和我有类似感受&#xff0c;可以点个关注&#xf…

【Java 优选算法】双指针(上)

欢迎关注个人主页&#xff1a;逸狼 创造不易&#xff0c;可以点点赞吗~ 如有错误&#xff0c;欢迎指出~ 目录 移动零 分析 代码 复写零 分析 代码 快乐数 分析 代码 盛最多水的容器 分析 代码 移动零 题目链接 分析 双指针算法,利用两个指针cur和dest将数组划分为三个区间…

Java题集综合实践——简易计算器制作

此系列文章收录大量Java经典代码题&#xff08;也可以算是leetcode刷题指南&#xff09;&#xff0c;剩余文章指路Java题集。希望可以与大家一起探索Java的神秘。3、2、1&#xff0c;请看&#xff01; 本篇文章将带大家编写一个简易算术计算器。 功能&#xff1a;将几个算术功…

VBA经典应用69例应用6:格式化代码中的双引号(””)和井号(#)

《VBA经典应用69例》&#xff08;版权10178981&#xff09;&#xff0c;是我推出的第九套教程&#xff0c;教程是专门针对初级、中级学员在学习VBA过程中可能遇到的案例展开&#xff0c;这套教程案例众多&#xff0c;紧贴“实战”&#xff0c;并做“战术总结”&#xff0c;以便…

使用java做一个微信机器人

如何使用Java开发微信机器人 在当今社交网络盛行的时代&#xff0c;微信已成为人们生活中不可或缺的工具。为了更好地服务用户&#xff0c;许多企业和个人开始利用微信机器人来自动化回复消息、发布信息等操作。本文将介绍如何使用Java开发一个简单的微信机器人&#xff0c;并…

html基础语法 看这一篇就够了!

HTML 一 概念 html:html 文件根标签 head:编写页面相关的属性 title:页面标题 body:页面内容展示信息 二 DOM 树&#xff1a; 所有的标签都是 html 的子标签 head 和 body 是兄弟标签&#xff0c;同一级别 head 和 title 为父子标签 1.第一个程序 <html><head>…

音视频入门基础:WAV专题(9)——FFmpeg源码中计算WAV音频文件每个packet的duration和duration_time的实现

一、引言 从文章《音视频入门基础&#xff1a;WAV专题&#xff08;6&#xff09;——通过FFprobe显示WAV音频文件每个数据包的信息》中我们可以知道&#xff0c;通过FFprobe命令可以显示WAV音频文件每个packet&#xff08;也称为数据包或多媒体包&#xff09;的信息&#xff0…

苹果电脑可以玩《原神》吗?原神可以在Mac上玩吗?苹果电脑玩原神怎么样

《原神》是一款由米哈游开发的开放世界冒险游戏&#xff0c;自从2020年正式上线以来&#xff0c;就受到了全球玩家的热烈欢迎。《原神》的画面精美&#xff0c;音乐动听&#xff0c;剧情丰富&#xff0c;角色多样&#xff0c;玩法多变&#xff0c;让人沉浸在一个充满奇幻和魅力…

【Python 学习】Pandas基础与应用(1)

题目 1 Pandas 简介1.1 主要特征1.2 Pandas 安装 2 Pandas中的数据结构2.1 Series 数据结构和操作2.1.1 Series的数据结构2.1.2 Seres的操作 2.2 DataFrame 数据结构和操作2.2.1 DataFrame 数据结构2.2.2 Dataframe 操作2.2.3 DateFrame 的特殊操作 2.3 Series 和 DataFrame 的…

LRU go cache的实现

目录 LRU算法LRU原理LRU实现Redis LRU算法实现1. 内存淘汰策略2. LRU算法的实现3. LRU vs LFURedis中的LRU使用场景 基于LRU的缓存库go-cache安装使用代码解析 hashicorp/golang-lru安装使用代码解析 groupcache安装使用代码解析缓存淘汰算法并发缓存组一致性哈希防止缓存击穿—…

从电商行业的变化引出未来技术趋势

时间&#xff1a;2024年09月08日 作者&#xff1a;小蒋聊技术 邮箱&#xff1a;wei_wei10163.com 微信&#xff1a;wei_wei10 音频地址&#xff1a;喜马拉雅 希望大家帮个忙&#xff01;如果大家有工作机会&#xff0c;希望帮小蒋推荐一下&#xff0c;小蒋希望遇到一个认真…

无人机人工增雨技术详解

无人机&#xff0c;全称为无人驾驶飞行器&#xff08;Unmanned Aerial Vehicle, UAV&#xff09;&#xff0c;是一种不需要人员直接操控&#xff0c;而是利用先进的遥控技术、自主飞行控制系统和传感器技术来实现空中飞行和完成特定任务的飞行器。 一、技术原理 无人机人工增雨…