从0认识一下字体混淆 怎么破

从一个西红柿小说的网站说起

有一天你想看小说 然后你找到了 一个web网站 某茄小说 你点进去发现看的不过瘾,你想使用魔法把他下载成一个完整txt继续看。于是你默默点开了审查元素 发现 发现你看到的字体怎么和web展示的字体不一样

于是你复制了一段话 像下面这样 然后你将这个序列在python打印序列

阴沉沉,易冷坐江办室,冰冷,脸模糊,漂浮九霄云。

在这里插入图片描述

执行这段文本的队列

在这里插入图片描述
打印结果
在这里插入图片描述

注意:编辑器可以渲染这些字体 但是浏览器无法渲染 所以就会打印成方块

charsets = '阴沉沉,易冷坐江办室,冰冷,脸模糊,漂浮九霄云。'

index = 0
for char in charsets:
    index += 1
    print(char, ord(char), end='\t')
    if index%10==0:
        print()

对字体进行重新编码

找字体文件的链接地址

woff2是给浏览器渲染字体用的
在这里插入图片描述

使用fontforge 打开woff2的字体 然后建立一个数字序列和字体图像的映射表
在这里插入图片描述

然后对字体进行一个新的序列映射 这种字体混淆的套路一般都是 将常用的一些字序列进行重新编码 然后渲染图像写入一个新的字体文件混淆 让我们抓不到正确数据。
比如映射表‘任’的正常unicode 16进制序列是4efb 十进制 20307
而在映射表中 任的编码序列被映射到了 58716,至于具体是什么字就不研究了。

最重要的就是还原字体的映射表 还原小说内容就好了
在这里插入图片描述在这里插入图片描述

运行下面代码就可以得到被混淆小说的正确内容了

# -*- coding: utf-8 -*-
encrpted_tables = '''D在主特家军然表场4要只v和_6别还g现儿岁__此象月3出战工相o
男直失世F都平文什VO将真T那当_会立些u是十张学气大爱两命全后东
性通被1它乐接而感车山公了常以何可话先pi叫轻M士w着变尔快l个说
少色里安花远7难师放t报认面道S_克地度I好机U民写把万同水新没书
电吃像斯5为y白几日教看但第加候作上拉住有法r事应位利你声身国问马
女他Y比父xAHNsX边美对所金活回意到z从j知又内因点Q三定8R
b正或夫向德听更_得告并本q过记L让打f人就者去原满体做经K走如孩
cG给使物_最笑部_员等受k行一条果动光门头见往自解成处天能于名其
发总母的死手入路进心来h时力多开已许d至由很界n小与Z想代么分生口
再妈望次西风种带J_实情才这_E我神格长觉间年眼无不亲关结0友信下
却重己老2音字m呢明之前高PB目太e9起稜她也W用方子英每理便四数
期中C外样a海们任------------------------'''

start = 58344

id_to_char = dict()
for v in encrpted_tables.split('\n'):
    for character in v:
        print(character, start)
        id_to_char[start] = character
        start += 1
print(id_to_char)
import json

v = '阴沉沉,易冷坐江办室,冰冷,脸模糊,漂浮九霄云'
characters = []
for i in v:
    if ord(i) in id_to_char:
        decode_character = id_to_char[ord(i)]
    else:
        decode_character = i

    characters.append(decode_character)

novel_content = ''.join(characters)

print(novel_content)

运行结果如下
在这里插入图片描述
最后小说内容就被还原啦 关于请求小说的一些例子 还有加密参数 以后另外写一篇博客进行分析 这次就到这里
在这里插入图片描述

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值