V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
爱意满满的作品展示区。
h4x3rotab
V2EX  ›  分享创造

搜狗用户词库解密工具

  •  
  •   h4x3rotab · 2018-10-07 21:12:06 +08:00 · 9657 次点击
    这是一个创建于 1999 天前的主题,其中的信息可能已经有所发展或是发生改变。

    https://github.com/h4x3rotab/Sogou-User-Dict-Converter

    搜狗从某个版本开始导出的用户词库全部被加密,给迁移到其他输入法造成很大障碍。于是我做了这个工具,可以把导出的 bin 文件转换为词频 TSV 文件,然后就随便怎么玩了。

    用法:

    python3 parse.py <输入 bin 文件> <输出 tsv 文件>
    

    代码发布在 GPLv3 协议之下。

    第 1 条附言  ·  2019-02-01 02:38:07 +08:00
    解密逻辑已经被整合到了一个对用户更有好的 GUI 工具下:
    https://github.com/studyzy/imewlconverter
    22 条回复    2019-02-01 02:37:23 +08:00
    littleMaple
        1
    littleMaple  
       2018-10-07 21:22:59 +08:00
    好奇解密原理是什么?搜狗公布了加密算法?
    a1058021348
        2
    a1058021348  
       2018-10-07 22:17:53 +08:00 via iPhone   ❤️ 1
    幸亏我一直留着那个词库文件😂
    ax521
        3
    ax521  
       2018-10-07 22:36:02 +08:00 via Android
    明天试试。用法能不能说清楚点,看不懂
    h4x3rotab
        4
    h4x3rotab  
    OP
       2018-10-07 23:13:47 +08:00 via iPhone   ❤️ 1
    逆向分析
    easylee
        5
    easylee  
       2018-10-07 23:16:35 +08:00 via Android
    @h4x3rotab 👍。
    h4x3rotab
        6
    h4x3rotab  
    OP
       2018-10-07 23:16:55 +08:00 via iPhone
    @ax521 先在搜狗设置里导出用户词库,导出成一个 bin 文件,然后作为命令行传入到 parse.py 里。

    第一个参数是输入文件,第二个参数是输出文件。运行之后如果顺利,可以得到一个词频 tsv 文件,可以导入到其他输入法用了。
    ax521
        7
    ax521  
       2018-10-07 23:29:12 +08:00 via Android
    @h4x3rotab tsv 文件还能不能转成 txt 文件?
    h4x3rotab
        8
    h4x3rotab  
    OP
       2018-10-07 23:56:36 +08:00
    @ax521 可以直接用文本编辑器打开
    gaupen1186
        9
    gaupen1186  
       2018-10-08 00:20:06 +08:00 via Android
    灰常感谢哈,正需要呢
    mztql
        10
    mztql  
       2018-10-08 00:26:08 +08:00
    好用感谢,8M 转换完是 1.3M ,有一部分输出日志显示'GetData overflow',是没解完全吗
    nicoljiang
        11
    nicoljiang  
       2018-10-08 12:50:16 +08:00
    好东西,支持一下。
    ax521
        12
    ax521  
       2018-10-08 16:19:54 +08:00
    我 15 兆的词库,转化出来才 26k。打开看显示只转化了近期的一部分词,楼主转化出来全部转化了吗?
    ax521
        13
    ax521  
       2018-10-08 16:29:34 +08:00
    ![报错.jpg]( https://i.loli.net/2018/10/08/5bbb14815a486.jpg)
    报错这个,你看看怎么了?
    h4x3rotab
        14
    h4x3rotab  
    OP
       2018-10-08 18:44:05 +08:00 via iPhone
    @ax521 terminal 编码的问题?
    ax521
        15
    ax521  
       2018-10-09 07:12:58 +08:00 via Android
    @h4x3rotab 那该怎么办?
    ax521
        16
    ax521  
       2018-10-09 08:28:01 +08:00 via Android
    @h4x3rotab 那个编码对应韩文。但我没输入过韩文
    NotNil1
        17
    NotNil1  
       2018-10-10 14:56:37 +08:00
    搜狗会保存我输入的数据吗?
    GuryYu
        18
    GuryYu  
       2018-10-10 17:17:31 +08:00
    @h4x3rotab 执行过程中报错了, 解密出来的文件只有原始文件的十分之一大小, 这个正常吗
    h4x3rotab
        19
    h4x3rotab  
    OP
       2018-10-12 10:41:16 +08:00 via iPhone
    @GuryYu 这个警告是正常的,那个原始文件里面还有很多其他乱七八糟的东西没解出来
    AuroraN
        20
    AuroraN  
       2018-10-16 15:23:37 +08:00
    报错,报销信息如下:
    hashstore [ offset: 2554880, count: 0 ]
    Traceback (most recent call last):
    File "/Users/Aurora/Source/Python/Algorithm/sougoUserDictConvert.py", line 432, in <module>
    word = DecryptWordsEx(word_base, word_info.p1, usr_header.p2, usr_header.p3)
    File "/Users/Aurora/Source/Python/Algorithm/sougoUserDictConvert.py", line 262, in DecryptWordsEx
    dec_lstr.string = decwords.decode('utf-16')
    UnicodeDecodeError: 'utf-16-le' codec can't decode bytes in position 4-5: unexpected end of data
    motivation
        21
    motivation  
       2018-11-07 15:02:40 +08:00
    可以告知一下如何使用嘛,我是纯小白,现在已经装好了 python3 和下载好了 GITHUB 上的文件,搜狗的.bin 文件也导出完成了,那么接下来需要做什么呢。

    谢谢!
    h4x3rotab
        22
    h4x3rotab  
    OP
       2019-02-01 02:37:23 +08:00
    @motivation 算法已经被整合到了一个对新手更有好的工具里: https://github.com/studyzy/imewlconverter
    关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   我们的愿景   ·   实用小工具   ·   1446 人在线   最高记录 6543   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 26ms · UTC 17:25 · PVG 01:25 · LAX 10:25 · JFK 13:25
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.