V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
V2EX 提问指南
rationa1cuzz
V2EX  ›  问与答

关于爬虫字体加密解密思路,新手

  •  
  •   rationa1cuzz · 2021-08-24 17:19:29 +08:00 · 1546 次点击
    这是一个创建于 1220 天前的主题,其中的信息可能已经有所发展或是发生改变。
    目标网站 https://www.xuanzhi.com/zhixiashi-bj/zhaopaigua/od6
    这个地方的数字为加密中文,
    <span class="xn-cf">景.学电亩</span>
    通过搜索
    <style type="text/css">
    @font-face {
    font-family: "xn-font";
    src: url('https://img2.xuanzhi.com/static/new/fonts/273c3c6cb56c9a9a/font.eot?2021081301'); /* IE9*/
    src: url('https://img2.xuanzhi.com/static/new/fonts/273c3c6cb56c9a9a/font.eot?2021081301') format('embedded-opentype'), /* IE6-IE8 */
    url('https://img2.xuanzhi.com/static/new/fonts/273c3c6cb56c9a9a/font.woff?2021081301') format('woff'), /* chrome, firefox */
    url('https://img2.xuanzhi.com/static/new/fonts/273c3c6cb56c9a9a/font.ttf?2021081301') format('truetype'), /* chrome, firefox, opera, Safari, Android, iOS 4.2+*/
    url('https://img2.xuanzhi.com/static/new/fonts/273c3c6cb56c9a9a/font.svg?2021081301') format('svg'); /* iOS 4.1- */
    }
    .xn-cf {
    font-family: "xn-font" !important;
    font-style: normal;
    -webkit-font-smoothing: antialiased;
    -moz-osx-font-smoothing: grayscale;
    }
    </style>
    找到了字体文件,地址为: https://img2.xuanzhi.com/static/new/fonts/273c3c6cb56c9a9a/font.woff?2021081301
    ,通过 FontCreator 软件打开了该字体文件,后续怎么版?菜狗求思路
    15 条回复    2021-08-25 16:35:01 +08:00
    fgwmlhdkkkw
        1
    fgwmlhdkkkw  
       2021-08-24 17:25:41 +08:00
    用无头浏览器截图之后 orc……
    lneoi
        2
    lneoi  
       2021-08-24 17:27:29 +08:00
    python 的话网上也有教程,有相关的库可以处理字体文件提取相应的数据
    xiangyuecn
        3
    xiangyuecn  
       2021-08-24 17:29:41 +08:00
    ocr 简单省事

    如果他们字体文件只有一个,那就简单手动建一个映射,几行代码的事。要是有很多个字体文件 是随机取的一个字体文件来显示,那就稍微复杂点,要多点人工配合
    rationa1cuzz
        4
    rationa1cuzz  
    OP
       2021-08-24 17:35:01 +08:00
    @fgwmlhdkkkw 这。。。有其他的方法吗?
    @lneoi 没找到啊,找不到映射关系
    @xiangyuecn 应该是有多个,每次请求都是不同的中文,只能手动创建映射吗?感觉工作量很大
    主要找不到映射关系
    ZAXON
        5
    ZAXON  
       2021-08-24 17:35:23 +08:00
    主要看是动态的还是静态的吧, 要是那种刷新一次换一个字体文件的可以梭哈 OCR, 静态的写匹配规则效率更高一点
    ZAXON
        6
    ZAXON  
       2021-08-24 17:41:40 +08:00
    https://github.com/zxjlm/Poirot 也许可以看看这个, 我以前写的一个小玩具, 虽然很久没维护了不过应该还能用.
    ClericPy
        7
    ClericPy  
       2021-08-24 18:37:38 +08:00
    刚下班就看到这么好玩的帖子

    随手打开看了下, 字体文件每次请求都换, 然后数字位置实际上是汉字的 unicode 做 key 去字体文件里读就行了, 没太大难度

    比如某一次请求, 社 => \u793e 然后在字体文件里取 $793e 位置那个, 也就是 1. 然后考虑 woff 转个 xml 通过索引确认数字是什么, 因为索引 1 到 10 貌似就是数字 0 到 9

    纯理论太具体的没实操, 就看了下编解码后的 unicode 和 woff 文件猜的
    huai
        8
    huai  
       2021-08-24 18:45:34 +08:00
    7 楼 貌似可以,之前试过 ocr,不过鉴别的准确度有点低。可能需要校准,这个不会了
    songjiaxin2008
        9
    songjiaxin2008  
       2021-08-24 18:52:03 +08:00
    crab
        10
    crab  
       2021-08-24 20:33:36 +08:00
    https://cjting.me/2020/07/01/douyu-crawler-and-font-anti-crawling/
    直接看尾部的内容。大概就是下载字体渲染 OCR 。
    rationa1cuzz
        11
    rationa1cuzz  
    OP
       2021-08-25 11:07:01 +08:00
    @ZAXON 待会看一下
    @ClericPy 我的思路也是这样,第一次做,汉字 unicode 后,取后面几位,就可以在 woff 里面找到对应的真实数据
    @songjiaxin2008 感谢,我看看
    @crab 是的,下载字体后渲染
    后面还发现汉字里带数字的,吐了。。。再找找规律
    cpstar
        12
    cpstar  
       2021-08-25 14:51:11 +08:00
    我怎么感觉就是一个凯撒加密呢?
    1 也 2 苏 3 局 4 界 5 二 6 生 7 湖 8 乐 9 和 0 打
    但是页面刷新之后就变了。但是仍然是个凯撒加密。

    那么考虑字体如何对应的,每个字都一个编码,而字体库就是某个编码如何渲染成可展示的东西。那这就好办了,0-9 是个数字,把字体库逆向一下,这样就是一堆 key-value,key 是编码,value 是 0-9 。
    如果其中能够发现一些规律当然是好的,key 就可以少很多了;如果找不到规律,那就只能枚举了。

    同 @ClericPy 7#
    cpstar
        13
    cpstar  
       2021-08-25 15:02:51 +08:00
    好吧,每次的字体文件好像都不一样,那也就是说服务器动态生成的字体文件,所以,继续逆向吧。加勒个油。

    但是思路没问题,肯定是通过 unicode 的一定编码机制,生成密文和密码本,然后恺撒加密
    rationa1cuzz
        14
    rationa1cuzz  
    OP
       2021-08-25 15:59:18 +08:00
    @cpstar 搞出来了,每次都拿最新的字体文件,然后解析出 map,中文-》 unicode 16 后,去 map 中找就好,特意搜一下凯撒加密,应该是没有偏移,直接可以在字体文件中找到对应结果
    cpstar
        15
    cpstar  
       2021-08-25 16:35:01 +08:00
    恺撒密码,如果把原文的字符和密文的字符理解为两种字符,那就不是偏移了。只不过当时他们没有第二种字符来表示。
    关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   实用小工具   ·   3541 人在线   最高记录 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 29ms · UTC 04:41 · PVG 12:41 · LAX 20:41 · JFK 23:41
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.