本文使用人工智能辅助创作
以本站用户 @戈培尔博士 的小说
书名《苏美尔亡魂》
作者:姬刘姫苟慎
为例
很显然网站不支持鼠标框选,选中后右键复制,所以打开F12查看。
正文内容被混淆,使用的字体是自定义字体文件
字体族名字: DNMrHsV173Pd4pgy
搜索后得到文件地址
https://lf6-awef.bytetos.com/obj/awesome-font/c/dc027189e0ba4cd.woff2
下载后查看字体文件的内容
可见全部是常用字编码置换
请求里面的内容也是如此
好笑的是,在这三百多个番茄的常用字里面,如果猜测是按词频排列的话,无可争议“的一是了我”排在第一位。但是,女字在儿字的前面并且在男字的前面,母在父字的前面,有妈字没有爸字。
现在破解字符编码到真实汉字的映射
可以用ocr(光学字符识别)图形到文本识别转换提取汉字。再根据码表对应,如下节选:
Glyph: gid58679
Unicode: E537
Glyph: gid58432
Unicode: E440
Glyph: gid58682
Unicode: E53A
“Glyph”后面的“gid”号是该字符在字体文件中的唯一标识符,“Unicode”后面的值表示该字符在Unicode字符集中的位置。
Unicode值(E537, E440, E53A)并不属于标准Unicode编码范围。他使用的是私有使用区(Private Use Area, PUA)编码,那是Unicode中预留的一段范围,供厂商或个人定义自己的符号,这部分范围不会与标准Unicode字符冲突。
因此可以有汉字和代码的联系字典
code = ["E52E","E42D","E536","E403","E3F1", …… ,"E53A"]
words = "0123456789abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ的一是了我不人在他……"
# 创建一个字典,将编码表和字表关联起来
code_dict = dict(zip(code, words))
然后写转换表
def decode_text(code_dict, text):
# 处理待处理的文段
result = []
for char in text:
# 获取字符的Unicode编码,并将其转换为16进制形式
unicode_hex = char.encode('unicode_escape').decode().lstrip('\\u').upper()
# 检查该编码是否存在于编码表中
if unicode_hex in code_dict:
# 如果存在,则替换为字表中的对应汉字
result.append(code_dict[unicode_hex])
else:
# 如果不存在,则保留原字符
result.append(char)
# 将结果列表转换为字符串
return ''.join(result)
得到字表对应内容后就是写请求了
py程序段
response = requests.get(url, headers=headers)
# 检查请求是否成功
if response.status_code == 200:
# 解析 JSON 响应
data = json.loads(response.text)
if data["code"] == 0:
content = data["data"]["chapterData"]["content"]
print("内容:", content)
# 转换为原文内容
original_text = decode_text(code_dict,content)
# 新建文件名
filename = data["data"]["chapterData"]["bookName"]+data["data"]["chapterData"]["title"]+".html"
with open(filename, 'w', encoding='utf-8') as file:
# 写入文本内容
file.write(original_text)
else:
print(f'请求失败,状态码: {response.status_code}')
运行测试
替换了错误字符后写入到文件,查看效果,很好!
本次简单逆向到此结束,爬虫抓网站部分不教,自己绕过机器检测。