查看: 38288|回复: 33
打印 上一主题 下一主题

[讨论] 朗文当代高级词典第五版(英英版)词库提取

[复制链接]
  • TA的每日心情
    开心
    2023-3-10 21:15
  • 签到天数: 1329 天

    [LV.10]以坛为家III

    4

    主题

    1342

    回帖

    2万

    积分

    状元

    Rank: 9Rank: 9Rank: 9

    积分
    22253
    跳转到指定楼层
    1
    发表于 2019-2-7 17:20:50 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
    本帖最后由 enjoy了哦 于 2019-5-4 10:45 编辑

    这是apk文件(来源:360手机助手):
    http://zhushou.360.cn/detail/index/soft_id/431302

    此应用排版精美,为官方出品,但它的词库做了一定的加密措施,不太好提取。
    下面是提取过程。

    首先以zip格式解压此apk文件,在解压目录的assets文件夹下,可看到该词典的核心内容:css样式表文件,字体文件,图片文件等。


    02/07/2019  12:27 PM    <DIR>          css
    02/07/2019  12:27 PM    <DIR>          fonts
    02/07/2019  12:27 PM    <DIR>          html
    02/07/2019  12:27 PM    <DIR>          images
    11/17/2011  12:27 PM         1,024,000 pearson5.aa
    11/17/2011  12:27 PM         1,024,000 pearson5.ab
    11/17/2011  12:27 PM         1,024,000 pearson5.ac
    11/17/2011  12:27 PM         1,024,000 pearson5.ad
    11/17/2011  12:27 PM         1,024,000 pearson5.ae
    11/17/2011  12:27 PM         1,024,000 pearson5.af
    11/17/2011  12:27 PM         1,024,000 pearson5.ag
    11/17/2011  12:27 PM         1,024,000 pearson5.ah
    11/17/2011  12:27 PM         1,024,000 pearson5.ai
    11/17/2011  12:27 PM         1,024,000 pearson5.aj
    11/17/2011  12:27 PM         1,024,000 pearson5.ak
    11/17/2011  12:27 PM         1,024,000 pearson5.al
    11/17/2011  12:27 PM         1,024,000 pearson5.am
    11/17/2011  12:27 PM         1,024,000 pearson5.an
    11/17/2011  12:27 PM         1,024,000 pearson5.ao
    11/17/2011  12:27 PM         1,024,000 pearson5.ap
    11/17/2011  12:27 PM         1,024,000 pearson5.aq
    11/17/2011  12:27 PM         1,024,000 pearson5.ar
    11/17/2011  12:27 PM         1,024,000 pearson5.as
    11/17/2011  12:27 PM         1,024,000 pearson5.at
    11/17/2011  12:27 PM         1,024,000 pearson5.au
    11/17/2011  12:27 PM         1,024,000 pearson5.av
    11/17/2011  12:27 PM         1,024,000 pearson5.aw
    11/17/2011  12:27 PM         1,024,000 pearson5.ax
    11/17/2011  12:27 PM         1,024,000 pearson5.ay
    11/17/2011  12:27 PM         1,024,000 pearson5.az
    11/17/2011  12:27 PM         1,024,000 pearson5.ba
    11/17/2011  12:27 PM         1,024,000 pearson5.bb
    11/17/2011  12:27 PM         1,024,000 pearson5.bc
    11/17/2011  12:27 PM         1,024,000 pearson5.bd
    11/17/2011  12:27 PM         1,024,000 pearson5.be
    11/17/2011  12:27 PM         1,024,000 pearson5.bf
    11/17/2011  12:27 PM           974,848 pearson5.bg

    其中pearson5.aa至pearson5.bg等33个文件总共加起来有30多兆,占据了apk文件的大部分内容,是词库文件。每一个文件都只有1000KB大小,是对词库文件做的处理,让它不容易被提取。

    但是这个做法其实形同虚设。通过以十六进制观察pearson5.aa的文件头:

    SQLite format 3...

    可知是一个SQLite数据库文件。接着同样以十六进制观察其它的文件名为pearson5的文件,发现格式都非常工整,应该是将原数据库文件按1000KB一块一块地截取而成。

    打开Windows的命令提示符,使用copy命令将这33个文件连缀起来,保存为dict.sqlite文件。

    将dict.sqlite文件用SQLite程序打开,呈现出清晰的数据库结构,主要内容为entry_a, entry_b, entry_c, ..., entry_z这26张数据表。每张数据表存储了单词释义(pdata数据项)、发音文件名(usa和uk数据项)、词条(word数据项)、词性(pos数据项)等。

    但是在这26张数据表中,单词释义(pdata数据项)不是明文存储的。以这个单词fabulous为例,其pdata数据项里面的内容为:

    H4sIAAAAAAAAAK1UzW7aQBC+8xRTzg0YG1onopZQcJtIBBBBajmu7QEc1l5rfyD0xKnqK+QFkgfpqepb5AH6DN1dEwdUqUqrHizNzvd9M7Pf2O4WZ2Eu+TaodYuzCyRJGXzsB3MSKcqU6DbLs83PxhfhsDe9HA0N/rh7UPqpWAeoYY85y89ZgqI8TXT6x9f5t/vo5ufuC/1+Z0U2XbPRMX10HZDkxgI6tIxqvmvMBUKavKsrdx47p377tEXarus4pPEG3ajd0UGr1XG8txi3Ir9xQhKvbqX98H2At5JjhnQLC8YSYBzSrOAoRLpG08dwbJvZMNiwPEE+V9QAJmGA8FPvajwI7QSF4/gnjtNynbbnuo0NWdeDGVNAGVvBk4mvjHqv+nMFr6xAKilkSOhL5L7r+c5+gOkSgTOWwZKI50rrFDcCSMyZECA1hZIVNo5rN/fu/qvPcVz6/GHSuwpYrj2OcM44Qs5Ubqpb4GkTa+RbPQVf6C45kExzpNmHSD//tomlWuCLluCXHpgL9tUKH3d3AjT/fDQYjC6HWla927DR3sqlqXqA1v6zI52/caQaLeZIpNJv5WsoKIlRAMoYiNZlmMuU5ZgYzyQnSWqOhIKQjKdGECkJCdMNJOgqVLfE21TIQ0cn4aA3Dfvlh06tsc+po0s3q1/ELx84cjotBAAA

    通过观察其他的pdata数据,这应该是通过Base64转换而来的,真是多此一举。将此数据通过Base64解密后,是一堆乱码:


    ��T�n�@��S�
    Z'��Pp�HAj9���^k �ĩ�+����[���]T�J�,���}3����ga.�6�u��$I|�s)ʔ�6˳����7�

    ��{P��X�a�9��Y��<Mt�����������~gE6]��1}t���:��j�k�B���+w;�~��Eڮ�8��ݨ��A��q���"�qB�n���}���c�t�`Ҭ�(D�F��pl��0ذ<A>W�&a��S�j<����'��r��纍
    Y׃S@[�����z��s��@*)dH�K����~���3�����J�7H̙ 5��6�k7�����q\��aһ
    X�=�p�8B�Tn�[�ik�[=_�.9�Ls�هH?����Z������
    ww4�|4�.�ZV�۰��ʥ�z����#��q�-�H��o�k((�Q���e�˔��$'Ij������F)                �
    $�*T���T�CG'�7
    ��N��ϩ�K7�_�/8r:-


    这加密措施貌似做得不错。但是如果细心一点的话,也是能看出端倪的。

    可以观察到,每个pdata数据都是以 H4sIAAAAAAAAA 这13个字符开头的。考虑到每个单词释义都是一个HTML文件,有统一的格式(所以所有单词释义的HTML文件的前几个字符一定是相同的),这就是一个突破口。这种情况说明了唯二的两种可能:
    1. 这串数据根本就没有用什么加密方式,顶多是转换编码而已。所以每个pdata数据项的数据头都相同。
    2. 如果使用了现代密码学中的私钥加密(流密码、块密码),明文与密文之间虽然是面目全非,但如果每次加密文件时都用同一个密钥初始化,则每个pdata数据项(也就是密文之间)的数据头也会相同。

    通过反编译该APP的 smali 代码得到大部分 Java 源码(该应用没有进行代码混淆),没有发现 Cipher 以及 doFinal 等字样(这些是 Java 提供的用于加密解密的类或函数),初步可以确定是上述的第 1 种情况。

    根据Base64的规则,取这13个字符中的前12个。但因为这前12个字符中后面8个都是A,代表6个二进制的0,没什么意义,因此真正有用的信息就是 H4sI 这4个字符。

    将其进行Base64解密,所得十六进制表示为1F8B08。通过在 filesignatures.net 查找该文件头,可知它是一个gzip压缩文件,文件扩展名为*.gz。

    通过Python的 Base64 模块将上述pdata数据转换成二进制gzip文件,最后可读取压缩包内的文件,该文件采用UTF-8编码,为HTML文件,但未标注扩展名。
    文件内容为:

    <p:Entry>
    <p:Head>
    <p:HWD>fabulous</p:HWD>
    <p:HYPHENATION>fab‧u‧lous</p:HYPHENATION>
    <p:PronCodes>
    <p:PRON>ˈfæbjləs</p:PRON>
    </p:PronCodes>
    <p:POS>adj</p:POS>
    </p:Head>
    <p:Sense id="u2fc098491a42200a.6e2b450a.115037ec1b8.-ad3">
    <p:DEF>extremely good or impressive</p:DEF>
    <p:SYN>wonderful</p:SYN>
    <p:EXAMPLE id="p008-001204322.wav">You look fabulous!</p:EXAMPLE>
    <p:EXAMPLE id="p008-001204323.wav">a fabulous meal</p:EXAMPLE>
    <p:EXAMPLE id="p008-001823802.wav">The room has fabulous views across the lake.</p:EXAMPLE>
    </p:Sense>
    <p:Sense id="u2fc098491a42200a.6e2b450a.115037ec1b8.-acc">
    <p:GRAM>only before noun</p:GRAM>
    <p:DEF>very large in amount or size</p:DEF>
    <p:SYN>huge</p:SYN>
    <p:EXAMPLE id="p008-001204328.wav">the Duke’s <p:COLLOINEXA>fabulous wealth</p:COLLOINEXA>
    </p:EXAMPLE>
    </p:Sense>
    <p:Sense id="u2fc098491a42200a.6e2b450a.115037ec1b8.-ac5">
    <p:GRAM>only before noun</p:GRAM>
    <p:DEF>fabulous creatures, places etc are mentioned in traditional stories, but do not really exist</p:DEF>
    <p:RELATEDWD>fable</p:RELATEDWD>
    </p:Sense>
    </p:Entry>

    与 ldoceonline.com 的内容似乎相差不多,但却是原汁原味的第五版内容,格式非常清晰。诸位若有兴趣,也可以拿来练练手。



    评分

    7

    查看全部评分

    本帖被以下淘专辑推荐:

  • TA的每日心情
    开心
    2023-3-10 21:15
  • 签到天数: 1329 天

    [LV.10]以坛为家III

    4

    主题

    1342

    回帖

    2万

    积分

    状元

    Rank: 9Rank: 9Rank: 9

    积分
    22253
    推荐
     楼主| 发表于 2019-3-21 09:14:04 | 只看该作者
    本帖最后由 enjoy了哦 于 2019-3-21 09:53 编辑
    haoduodianying 发表于 2019-3-20 14:11
    楼主大神 膜拜中。

    楼主所言 : 通过Python的 Base64 模块将上述pdata数据转换成二进制gzip文件

    思路:
    1. 首先将pdata数据写入一个字符串str中,
    2. (载入base64模块后)调用base64.b64decode(str),将结果赋值给另一个变量binary_data。
    3. 以二进制写入模式创建一个文件,例如data.gz。
    4. 将binary_data写入data.gz中。
    5. 关闭该文件data.gz。

    上Python代码:
    1. import base64

    2. str = '此处填入pdata数据'
    3. binary_data = base64.b64decode(str)
    4. f = open('data.gz','wb')
    5. f.write(binary_data)
    6. f.close()
    复制代码


    然后就可以打开data.gz观察解码出的数据。


    如果是Python 3.2 及以上,还可以更方便一些:
    1. import base64
    2. import gzip

    3. str = '此处填入pdata数据'
    4. binary_data = base64.b64decode(str)
    5. dict_content = gzip.decompress(binary_data)
    复制代码

    这里的dict_content就是最终的结果,也就是词典的数据。
  • TA的每日心情
    开心
    2023-3-10 21:15
  • 签到天数: 1329 天

    [LV.10]以坛为家III

    4

    主题

    1342

    回帖

    2万

    积分

    状元

    Rank: 9Rank: 9Rank: 9

    积分
    22253
    推荐
     楼主| 发表于 2019-2-7 21:42:18 | 只看该作者
    jonah_w 发表于 2019-2-7 20:59
    放佛打开了加密技术的一小扇门,好像蛮有意思的,想深入研究下。不知能否推荐一些流加密、块加密的资料,如 ...

    老实讲,词典软件一般不会用到什么真正的加密技术,除非特别缺心眼的那种。如果想要了解密码学的话,我看的是Introduction to Modern Cryptography 第二版,作者是Jonathan Katz和Yehuda Lindell。这本书最大的特点就是严谨,一个结论的推导能整整有四五页,环环相扣,就像看小说一样,很过瘾!中文教材我就不清楚了,但也有很多资料。

    该用户从未签到

    123

    主题

    1719

    回帖

    3万

    积分

    翰林院编修

    Rank: 11Rank: 11Rank: 11Rank: 11

    积分
    30382

    灌水大神章小蜜蜂章笑傲江湖章翰林院专用章管理组专用章

    2
    发表于 2019-2-7 18:05:03 | 只看该作者
    提供了非常好的经验,加分点赞!

    该用户从未签到

    37

    主题

    861

    回帖

    1万

    积分

    状元

    Rank: 9Rank: 9Rank: 9

    积分
    18406
    3
    发表于 2019-2-7 18:12:57 | 只看该作者
    这个牛逼,非常佩服楼主。下次我也来破解一版。谢谢。
  • TA的每日心情
    开心
    2023-3-15 17:20
  • 签到天数: 1223 天

    [LV.10]以坛为家III

    4

    主题

    1483

    回帖

    1万

    积分

    状元

    Rank: 9Rank: 9Rank: 9

    积分
    15555
    4
    发表于 2019-2-7 18:47:57 | 只看该作者
    高手,非常佩服
  • TA的每日心情
    奋斗
    2019-4-14 02:12
  • 签到天数: 93 天

    [LV.6]常住居民II

    250

    主题

    2966

    回帖

    53万

    积分

    状元

    吃水不忘挖井人

    Rank: 9Rank: 9Rank: 9

    积分
    531111

    灌水大神章笑傲江湖章推广专家QQ 章

    5
    发表于 2019-2-7 20:44:47 | 只看该作者
    果真技术达人,学到不少,感谢分享宝贵经验
  • TA的每日心情
    奋斗
    2019-4-14 02:12
  • 签到天数: 93 天

    [LV.6]常住居民II

    250

    主题

    2966

    回帖

    53万

    积分

    状元

    吃水不忘挖井人

    Rank: 9Rank: 9Rank: 9

    积分
    531111

    灌水大神章笑傲江湖章推广专家QQ 章

    6
    发表于 2019-2-7 20:59:50 | 只看该作者
    放佛打开了加密技术的一小扇门,好像蛮有意思的,想深入研究下。不知能否推荐一些流加密、块加密的资料,如果能介绍下移动软件中一些常用加密技术就简直太好了,不过这篇文章提到一些技术点也足够研究一会儿了,哈哈。再次感谢。
  • TA的每日心情
    郁闷
    2021-7-16 22:15
  • 签到天数: 90 天

    [LV.6]常住居民II

    14

    主题

    740

    回帖

    9824

    积分

    进士

    Rank: 8Rank: 8

    积分
    9824

    QQ 章

    8
    发表于 2019-2-7 21:45:39 | 只看该作者
    牛。受教了。感谢分享
  • TA的每日心情
    奋斗
    2019-4-14 02:12
  • 签到天数: 93 天

    [LV.6]常住居民II

    250

    主题

    2966

    回帖

    53万

    积分

    状元

    吃水不忘挖井人

    Rank: 9Rank: 9Rank: 9

    积分
    531111

    灌水大神章笑傲江湖章推广专家QQ 章

    9
    发表于 2019-2-7 21:47:12 | 只看该作者
    enjoy了哦 发表于 2019-2-7 21:42
    老实讲,词典软件一般不会用到什么真正的加密技术,除非特别缺心眼的那种。如果想要了解密码学的话,我看 ...

    好的,我先记下了。感谢推荐

    该用户从未签到

    1

    主题

    475

    回帖

    3830

    积分

    贡士

    Rank: 6Rank: 6

    积分
    3830
    10
    发表于 2019-2-13 21:22:16 | 只看该作者

    Thanks for sharing

    该用户从未签到

    0

    主题

    2

    回帖

    33

    积分

    白身

    Rank: 1

    积分
    33
    11
    发表于 2019-2-15 18:13:50 | 只看该作者
    XIEXIEFENXIANG
  • TA的每日心情
    开心
    2021-12-9 19:52
  • 签到天数: 262 天

    [LV.8]以坛为家I

    2

    主题

    366

    回帖

    7706

    积分

    会元

    Rank: 7Rank: 7Rank: 7

    积分
    7706

    QQ 章

    12
    发表于 2019-2-18 13:44:48 | 只看该作者
    楼主破译高手
  • TA的每日心情

    2021-1-21 10:54
  • 签到天数: 242 天

    [LV.8]以坛为家I

    13

    主题

    785

    回帖

    1万

    积分

    状元

    Rank: 9Rank: 9Rank: 9

    积分
    17906
    13
    发表于 2019-2-18 15:02:41 | 只看该作者
    本帖最后由 wht1979 于 2019-2-18 15:04 编辑

    楼主,钱伯斯21世纪安装版的数据文件用文本打开就是有规律的那些问好,你说可以想你这样给弄出来么?


    安的就是这个
    https://www.pdawiki.com/forum/thread-13997-1-1.html

    @O版的帖子里给的安装盘。
  • TA的每日心情
    开心
    2023-3-10 21:15
  • 签到天数: 1329 天

    [LV.10]以坛为家III

    4

    主题

    1342

    回帖

    2万

    积分

    状元

    Rank: 9Rank: 9Rank: 9

    积分
    22253
    14
     楼主| 发表于 2019-2-19 00:56:16 | 只看该作者
    wht1979 发表于 2019-2-18 15:02
    楼主,钱伯斯21世纪安装版的数据文件用文本打开就是有规律的那些问好,你说可以想你这样给弄出来么?


    ...

    我看了一下,这个是被加密了的 SQLite 2.1 版本的数据文件,需要输入密码才能查看 SQLite 数据库的存储内容,一般这种就很难破解了。
  • TA的每日心情

    2021-1-21 10:54
  • 签到天数: 242 天

    [LV.8]以坛为家I

    13

    主题

    785

    回帖

    1万

    积分

    状元

    Rank: 9Rank: 9Rank: 9

    积分
    17906
    15
    发表于 2019-2-19 08:41:46 | 只看该作者
    enjoy了哦 发表于 2019-2-19 00:56
    我看了一下,这个是被加密了的 SQLite 2.1 版本的数据文件,需要输入密码才能查看 SQLite 数据库的存储内 ...

    朗文简明活用,还有这个钱伯斯都是有光盘没有字典,可能就是加了密的文件(不懂,猜的)原因。
  • TA的每日心情
    开心
    2022-3-24 01:33
  • 签到天数: 44 天

    [LV.5]常住居民I

    5

    主题

    83

    回帖

    2377

    积分

    解元

    Rank: 5Rank: 5

    积分
    2377

    QQ 章

    16
    发表于 2019-2-20 23:53:55 | 只看该作者
    厉害了,钻研精神可嘉!
  • TA的每日心情
    开心
    2018-7-14 15:08
  • 签到天数: 11 天

    [LV.3]偶尔看看II

    34

    主题

    875

    回帖

    4729

    积分

    贡士

    Rank: 6Rank: 6

    积分
    4729

    笑傲江湖章灌水大神章

    17
    发表于 2019-2-22 18:51:02 | 只看该作者
    指明了方向 ,开了眼界,赞!

    该用户从未签到

    0

    主题

    3

    回帖

    31

    积分

    白身

    Rank: 1

    积分
    31
    18
    发表于 2019-2-23 13:18:43 | 只看该作者
    厉害了 楼主
  • TA的每日心情
    奋斗
    2021-9-28 10:33
  • 签到天数: 314 天

    [LV.8]以坛为家I

    4

    主题

    568

    回帖

    5563

    积分

    会元

    Rank: 7Rank: 7Rank: 7

    积分
    5563
    19
    发表于 2019-2-26 09:06:28 | 只看该作者
    jonah_w 发表于 2019-2-7 21:47
    好的,我先记下了。感谢推荐

    默默的上传一个附件,最大只能上传5MB的附件,一个变俩

    (Chapman &amp; Hall_CRC cryptography and network security) Katz, Jonathan_ Lindell, .rar

    4 MB, 下载次数: 11, 下载积分: 米 -5 粒

    (Chapman &amp; Hall_CRC cryptography and network security) Katz, Jonathan_ Lindell, .rar

    1.67 MB, 下载次数: 8, 下载积分: 米 -5 粒

    评分

    1

    查看全部评分

  • TA的每日心情
    奋斗
    2019-4-14 02:12
  • 签到天数: 93 天

    [LV.6]常住居民II

    250

    主题

    2966

    回帖

    53万

    积分

    状元

    吃水不忘挖井人

    Rank: 9Rank: 9Rank: 9

    积分
    531111

    灌水大神章笑傲江湖章推广专家QQ 章

    20
    发表于 2019-2-26 09:54:25 | 只看该作者
    alredstone 发表于 2019-2-26 09:06
    默默的上传一个附件,最大只能上传5MB的附件,一个变俩

    非常感谢
  • TA的每日心情
    奋斗
    2019-4-14 02:12
  • 签到天数: 93 天

    [LV.6]常住居民II

    250

    主题

    2966

    回帖

    53万

    积分

    状元

    吃水不忘挖井人

    Rank: 9Rank: 9Rank: 9

    积分
    531111

    灌水大神章笑傲江湖章推广专家QQ 章

    21
    发表于 2019-2-26 09:55:44 | 只看该作者
    不知楼主是否可以看下这个:
    牛津现代英汉双解词典第9版(COD9)(名人电子词典模拟器)
    https://www.pdawiki.com/forum/thread-33264-1-1.html?x=294297

    能否解密
  • TA的每日心情
    擦汗
    2023-3-20 00:00
  • 签到天数: 1380 天

    [LV.10]以坛为家III

    1

    主题

    1422

    回帖

    5万

    积分

    状元

    Rank: 9Rank: 9Rank: 9

    积分
    57805
    22
    发表于 2019-2-26 19:38:13 | 只看该作者
    学习了,好像开始有点门道了
  • TA的每日心情
    开心
    2021-5-6 02:30
  • 签到天数: 154 天

    [LV.7]常住居民III

    0

    主题

    234

    回帖

    5492

    积分

    会元

    Rank: 7Rank: 7Rank: 7

    积分
    5492
    23
    发表于 2019-3-5 09:18:27 | 只看该作者
    厉害了,学习一下
  • TA的每日心情
    开心
    2021-1-16 03:45
  • 签到天数: 249 天

    [LV.8]以坛为家I

    1

    主题

    405

    回帖

    4064

    积分

    贡士

    Rank: 6Rank: 6

    积分
    4064
    24
    发表于 2019-3-6 02:27:59 | 只看该作者
    天啊!楼主您简直是神人!
  • TA的每日心情

    2020-8-15 10:40
  • 签到天数: 146 天

    [LV.7]常住居民III

    23

    主题

    363

    回帖

    3万

    积分

    状元

    Rank: 9Rank: 9Rank: 9

    积分
    39693
    25
    发表于 2019-3-19 16:29:24 | 只看该作者

    学习了,特别是文件格式的猜测