掌上百科 - PDAWIKI

 找回密码
 免费注册

QQ登录

只需一步,快速开始

查看: 1216|回复: 16

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

[复制链接]
  • TA的每日心情
    开心
    昨天 17:58
  • 签到天数: 61 天

    [LV.6]常住居民II

    发表于 2019-2-7 17:20:50 | 显示全部楼层 |阅读模式
    本帖最后由 enjoy了哦 于 2019-2-7 23:13 编辑 2 @2 b% N- b+ D/ D  B  ^

    ! Y4 Y6 z; q* }3 h7 Z6 H" ^; M这是apk文件(来源:360手机助手):
    1 M+ s7 v* S- v: whttp://zhushou.360.cn/detail/index/soft_id/4313023 c! m' m: Y, j
    ; o2 T* W8 H, j! Q/ h: A* H
    此应用排版精美,为官方出品,但它的词库做了一定的加密措施,不太好提取。$ @6 H7 x& j) G4 b. B; y. U# Q
    下面是提取过程。: _8 x. J% m- [) p, ~' A. j
    ( h- s" t: e- Y
    首先以zip格式解压此apk文件,在解压目录的assets文件夹下,可看到该词典的核心内容:css样式表文件,字体文件,图片文件等。3 D5 a* E2 E/ `* [. L( J

    , q) K$ L4 h% o7 C2 k
    ! a5 C) T4 k$ B4 Y/ a. [  S; u2 p, l02/07/2019  12:27 PM    <DIR>          css
    ! ^1 s4 q! e- O6 d1 g' Y02/07/2019  12:27 PM    <DIR>          fonts
    : `3 e1 N; L: R% |" ^& T% {02/07/2019  12:27 PM    <DIR>          html3 D5 f+ h- ]/ K+ \
    02/07/2019  12:27 PM    <DIR>          images) d8 h  [; g' F6 C
    11/17/2011  12:27 PM         1,024,000 pearson5.aa  a6 C1 C: q. C& K# D$ L
    11/17/2011  12:27 PM         1,024,000 pearson5.ab+ S6 `) f2 W5 j
    11/17/2011  12:27 PM         1,024,000 pearson5.ac
    / {5 y! d8 K8 S, B) c4 O1 q4 z11/17/2011  12:27 PM         1,024,000 pearson5.ad
    4 J3 C7 ~; b/ |6 K7 |/ Y11/17/2011  12:27 PM         1,024,000 pearson5.ae
    9 `$ X- G: a) ?- X11/17/2011  12:27 PM         1,024,000 pearson5.af9 A4 w6 r* q' F' @3 X9 D) i; q  c
    11/17/2011  12:27 PM         1,024,000 pearson5.ag4 A( `/ F' V) q; [- H" Y
    11/17/2011  12:27 PM         1,024,000 pearson5.ah
    1 [1 l$ q% O' P11/17/2011  12:27 PM         1,024,000 pearson5.ai5 _( g, E6 r7 i$ D, r
    11/17/2011  12:27 PM         1,024,000 pearson5.aj
    2 `( }4 B: I  q4 Y7 q; S/ j  f/ l11/17/2011  12:27 PM         1,024,000 pearson5.ak7 a+ k  D$ H$ {& C6 }
    11/17/2011  12:27 PM         1,024,000 pearson5.al6 U2 m- W- V3 ~5 f) C4 v+ _; s
    11/17/2011  12:27 PM         1,024,000 pearson5.am6 C3 v& A% t% N9 Q0 R, _* z9 y
    11/17/2011  12:27 PM         1,024,000 pearson5.an
    ' @6 l  T! Y7 x9 K11/17/2011  12:27 PM         1,024,000 pearson5.ao
    ! c+ z* z' U2 [- B' |& h11/17/2011  12:27 PM         1,024,000 pearson5.ap
    9 i  x$ i+ z, z11/17/2011  12:27 PM         1,024,000 pearson5.aq& i$ }) w" G4 \6 P! o; `
    11/17/2011  12:27 PM         1,024,000 pearson5.ar% g, [( S  f3 I; ~5 r4 D' S
    11/17/2011  12:27 PM         1,024,000 pearson5.as" L: f7 Y5 K! Z; r+ M2 B$ a
    11/17/2011  12:27 PM         1,024,000 pearson5.at+ ^9 e+ `, d! Y. ^
    11/17/2011  12:27 PM         1,024,000 pearson5.au
    3 o/ z6 C; Y6 e) _& `8 f/ ?11/17/2011  12:27 PM         1,024,000 pearson5.av7 K- N6 |% {1 `( W. M# }! X# Q
    11/17/2011  12:27 PM         1,024,000 pearson5.aw/ U, h2 j5 H) T; U% N: E% c
    11/17/2011  12:27 PM         1,024,000 pearson5.ax
    " P) B0 b; E" o2 Z4 \# ?# C11/17/2011  12:27 PM         1,024,000 pearson5.ay
    ! f& I9 v8 a0 ^6 |; i11/17/2011  12:27 PM         1,024,000 pearson5.az: ]4 A$ u) N3 }# ]. t, }$ o( K1 @
    11/17/2011  12:27 PM         1,024,000 pearson5.ba
    + W: l% Z. \+ t' a9 W+ g) e7 N11/17/2011  12:27 PM         1,024,000 pearson5.bb
    ) u+ t/ W! P1 V/ n% x11/17/2011  12:27 PM         1,024,000 pearson5.bc
    & ?, c( g7 m  I+ ^8 c11/17/2011  12:27 PM         1,024,000 pearson5.bd% m) S) l: L0 g" D" Q- r
    11/17/2011  12:27 PM         1,024,000 pearson5.be+ N% |. g. B# K8 B: O0 D
    11/17/2011  12:27 PM         1,024,000 pearson5.bf- u& ]0 Z7 x# e
    11/17/2011  12:27 PM           974,848 pearson5.bg
    1 U" y1 k: W9 ], `6 R3 o
    : k- j  U, f5 W: v: w% |其中pearson5.aa至pearson5.bg等33个文件总共加起来有30多兆,占据了apk文件的大部分内容,是词库文件。每一个文件都只有1000KB大小,是对词库文件做的处理,让它不容易被提取。
    ) a7 O5 \: X& s; k1 D4 M2 \6 B: S4 z, `  \8 Y, v
    但是这个做法其实形同虚设。通过以十六进制观察pearson5.aa的文件头:3 }/ |/ B, d  T2 s, |/ Z1 Y

    ; s0 D1 g- _* w% s: ZSQLite format 3...
    3 s8 V) b; W: J- K  h2 _
    9 T, \$ p9 x3 m' _# d) _6 g/ A可知是一个SQLite数据库文件。接着同样以十六进制观察其它的文件名为pearson5的文件,发现格式都非常工整,应该是将原数据库文件按1000KB一块一块地截取而成。8 `  `; g2 C. ~+ V( m) Z3 R1 y/ [) t

    0 m6 }2 {  p+ n; S) L$ k4 [打开Windows的命令提示符,使用copy命令将这33个文件连缀起来,保存为dict.sqlite文件。
    ( a* G! n& O3 a& Y4 q! u0 b( K. r! u! J5 ?% |, C0 t
    将dict.sqlite文件用SQLite程序打开,呈现出清晰的数据库结构,主要内容为entry_a, entry_b, entry_c, ..., entry_z这26张数据表。每张数据表存储了单词释义(pdata数据项)、发音文件名(usa和uk数据项)、词条(word数据项)、词性(pos数据项)等。- T% k; H/ `/ e& y4 A/ z
    ! d: n" Y9 e1 m( E- l: L
    但是在这26张数据表中,单词释义(pdata数据项)不是明文存储的。以这个单词fabulous为例,其pdata数据项里面的内容为:
    1 P2 n% A7 X1 a/ @6 C- ~3 y% V) F- Y- n1 p
    H4sIAAAAAAAAAK1UzW7aQBC+8xRTzg0YG1onopZQcJtIBBBBajmu7QEc1l5rfyD0xKnqK+QFkgfpqepb5AH6DN1dEwdUqUqrHizNzvd9M7Pf2O4WZ2Eu+TaodYuzCyRJGXzsB3MSKcqU6DbLs83PxhfhsDe9HA0N/rh7UPqpWAeoYY85y89ZgqI8TXT6x9f5t/vo5ufuC/1+Z0U2XbPRMX10HZDkxgI6tIxqvmvMBUKavKsrdx47p377tEXarus4pPEG3ajd0UGr1XG8txi3Ir9xQhKvbqX98H2At5JjhnQLC8YSYBzSrOAoRLpG08dwbJvZMNiwPEE+V9QAJmGA8FPvajwI7QSF4/gnjtNynbbnuo0NWdeDGVNAGVvBk4mvjHqv+nMFr6xAKilkSOhL5L7r+c5+gOkSgTOWwZKI50rrFDcCSMyZECA1hZIVNo5rN/fu/qvPcVz6/GHSuwpYrj2OcM44Qs5Ubqpb4GkTa+RbPQVf6C45kExzpNmHSD//tomlWuCLluCXHpgL9tUKH3d3AjT/fDQYjC6HWla927DR3sqlqXqA1v6zI52/caQaLeZIpNJv5WsoKIlRAMoYiNZlmMuU5ZgYzyQnSWqOhIKQjKdGECkJCdMNJOgqVLfE21TIQ0cn4aA3Dfvlh06tsc+po0s3q1/ELx84cjotBAAA
    ! t1 P7 a9 G, J7 l" O
    : y+ \5 w4 z7 d( v通过观察其他的pdata数据,这应该是通过Base64转换而来的,真是多此一举。将此数据通过Base64解密后,是一堆乱码:; X* o/ n, {$ D) J4 e

    # M  t. z: c4 O7 ~8 P. }0 u  `8 a4 q- G/ [* u6 V
    ��T�n�@��S�
    8 e2 E' Z7 `. {$ l- NZ'��Pp�HAj9���^k �ĩ�+����[�� �]T�J�,���}3����ga.�6�u�� $I|�s)ʔ�6˳����7�9 d; B# I/ C9 `3 B- T

      P2 I* j* d' E9 g3 D��{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��纍; m3 I: U7 S: ]0 S2 w
    Y׃S@[�����z��s��@*)dH�K����~���3�����J�7H̙ 5��6�k7�����q\��aһ. v; J4 ?) R" J8 F2 W3 m# |! A
    X�=�p�8B�Tn�[�ik�[=_�.9�Ls�هH?����Z���� ��
    & _" L( m! c5 r' C  l& B( Iww4�|4�.�ZV�۰��ʥ�z����#��q�-�H��o�k((�Q���e�˔��$'Ij������F)                �
    # O4 L# I: A$ S% I1 s$�*T���T�CG'�7
    ) r' c2 f' X: j��N��ϩ�K7�_�/8r:-
    ! }. h7 a& V2 [7 S' R4 l7 d4 R0 t: u# s/ A; i
    & F5 s, w: H7 g$ u8 ^
    这加密措施貌似做得不错。但是如果细心一点的话,也是能看出端倪的。* f, l' _7 x% D5 ]0 Q; ?9 C6 @
    4 Y# ]+ Z! \$ }" x
    可以观察到,每个pdata数据都是以 H4sIAAAAAAAAA 这13个字符开头的。考虑到每个单词释义都是一个HTML文件,有统一的格式(所以所有单词释义的HTML文件的前几个字符一定是相同的),这就是一个巨大的突破口。它说明这串数据根本就没有用什么加密方式,顶多是转换编码而已。如果使用了现代密码学中的私钥加密(流密码、块密码),是绝无可能出现这样的情况的,明文与密文、密文与密文之间都是面目全非。
    9 U& S4 ]& O: w# R" y8 z/ }$ m: m
    6 F- a2 L9 O; j7 a9 n( F根据Base64的规则,取这13个字符中的前12个。但因为这前12个字符中后面8个都是A,代表6个二进制的0,没什么意义,因此真正有用的信息就是 H4sI 这4个字符。& `4 G9 F; u5 q1 M8 p. f* f5 k  s

    8 i( X# Q! B6 U# u# U! ]将其进行Base64解密,所得十六进制表示为1F8B08。通过在 filesignatures.net 查找该文件头,可知它是一个gzip压缩文件,文件扩展名为*.gz。/ G$ o# o' D" m! I! I  |& M

      G: B5 r0 K9 L6 `. p2 ^通过Python的 Base64 模块将上述pdata数据转换成二进制gzip文件,最后可读取压缩包内的文件,该文件采用UTF-8编码,为HTML文件,但未标注扩展名。1 Q8 _) }, f9 q1 b7 G1 ~: {
    文件内容为:
    $ S! r4 p  x7 X
    $ h( w+ q4 x% b4 j<p:Entry>% j! U2 k% C# N- I
    <p:Head>, w# N2 h3 J) U2 O4 E1 N
    <p:HWD>fabulous</p:HWD>4 L7 [/ w5 \6 b
    <p:HYPHENATION>fab‧u‧lous</p:HYPHENATION>/ W9 J+ M$ p9 b$ K$ r: N" ~$ U" N) p
    <p:PronCodes># o# ]0 s  x/ S( X* [% W( a
    <p:PRON>ˈfæbjləs</p:PRON>
    8 Q/ A5 M, ?3 x6 H; k</p:PronCodes>
    ! {% @. J* E: R6 j2 _& u, O, B# u3 P<p:POS>adj</p:POS>
    , I* u% b. M8 @8 v</p:Head>2 W0 d- P0 T/ r! f4 f2 a
    <p:Sense id="u2fc098491a42200a.6e2b450a.115037ec1b8.-ad3">+ t: [. p2 M2 M& V
    <p:DEF>extremely good or impressive</p:DEF>
    ' R1 e$ X/ x& h+ ]2 R5 @  m* ?<p:SYN>wonderful</p:SYN>* @; l6 T: L8 ]" C2 c' z
    <p:EXAMPLE id="p008-001204322.wav">You look fabulous!</p:EXAMPLE>
    4 c7 `* k1 h1 z8 Q9 V, t* n<p:EXAMPLE id="p008-001204323.wav">a fabulous meal</p:EXAMPLE>
    + l# ~0 X* [# O% n' W<p:EXAMPLE id="p008-001823802.wav">The room has fabulous views across the lake.</p:EXAMPLE>" c/ T' S) {9 z. x
    </p:Sense>
    " e% p' m6 K$ y0 s$ C<p:Sense id="u2fc098491a42200a.6e2b450a.115037ec1b8.-acc">
    . Y. q* M  L) Z+ y- {; ]. {% _<p:GRAM>only before noun</p:GRAM>* A  V1 K  O; D' Y/ W
    <p:DEF>very large in amount or size</p:DEF>% W9 x/ l/ E( a3 k* m8 V
    <p:SYN>huge</p:SYN>1 z) h( ^3 J, A0 f
    <p:EXAMPLE id="p008-001204328.wav">the Duke’s <p:COLLOINEXA>fabulous wealth</p:COLLOINEXA>
    7 [% b* P/ k. u</p:EXAMPLE>4 W9 W) j) Z& x0 r; D5 @" N6 Q
    </p:Sense>% W" r3 L0 I0 o9 p6 i" b6 n
    <p:Sense id="u2fc098491a42200a.6e2b450a.115037ec1b8.-ac5">( M8 }. ~9 Z6 P, {. y5 R
    <p:GRAM>only before noun</p:GRAM>- \) n* Y  S* {. ~+ [) L; ^
    <p:DEF>fabulous creatures, places etc are mentioned in traditional stories, but do not really exist</p:DEF>
    % k: I: Y) S0 {4 J# y/ ]0 N  v; ~<p:RELATEDWD>fable</p:RELATEDWD>6 R* B0 K$ J. R
    </p:Sense>4 p7 w5 n0 P9 N9 ]! g
    </p:Entry>3 s* w. I* w& a; G) Z2 L4 Z
    8 n) ~# Y& G: O5 t" [2 R% U5 H
    与 ldoceonline.com 的内容似乎相差不多,但却是原汁原味的第五版内容,格式非常清晰。诸位若有兴趣,也可以拿来练练手。
    1 q! M- R3 N3 E8 q2 T0 f+ d# v1 Y
    ' G( \2 g% q' A) N( f. a/ ^
    $ n$ y( n2 |1 i

    评分

    4

    查看全部评分

    本帖被以下淘专辑推荐:

    该用户从未签到

    发表于 2019-2-7 18:05:03 | 显示全部楼层
    提供了非常好的经验,加分点赞!

    该用户从未签到

    发表于 2019-2-7 18:12:57 | 显示全部楼层
    这个牛逼,非常佩服楼主。下次我也来破解一版。谢谢。
  • TA的每日心情
    开心
    昨天 00:42
  • 签到天数: 124 天

    [LV.7]常住居民III

    发表于 2019-2-7 18:47:57 | 显示全部楼层
    高手,非常佩服
  • TA的每日心情
    无聊
    3 天前
  • 签到天数: 88 天

    [LV.6]常住居民II

    发表于 2019-2-7 20:44:47 | 显示全部楼层
    果真技术达人,学到不少,感谢分享宝贵经验
  • TA的每日心情
    无聊
    3 天前
  • 签到天数: 88 天

    [LV.6]常住居民II

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

    [LV.6]常住居民II

     楼主| 发表于 2019-2-7 21:42:18 | 显示全部楼层
    jonah_w 发表于 2019-2-7 20:59
    , K/ w, `# O5 q( Y8 ?$ x. K放佛打开了加密技术的一小扇门,好像蛮有意思的,想深入研究下。不知能否推荐一些流加密、块加密的资料,如 ...

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

    [LV.6]常住居民II

    发表于 2019-2-7 21:45:39 | 显示全部楼层
    牛。受教了。感谢分享
  • TA的每日心情
    无聊
    3 天前
  • 签到天数: 88 天

    [LV.6]常住居民II

    发表于 2019-2-7 21:47:12 | 显示全部楼层
    enjoy了哦 发表于 2019-2-7 21:42
    7 w- O: d9 c' k# _老实讲,词典软件一般不会用到什么真正的加密技术,除非特别缺心眼的那种。如果想要了解密码学的话,我看 ...

    ; I, ]1 b: ~1 ]: G+ c% g- P好的,我先记下了。感谢推荐

    该用户从未签到

    发表于 2019-2-13 21:22:16 | 显示全部楼层
    ) b4 F) n; T2 p" k7 J
    Thanks for sharing

    该用户从未签到

    发表于 2019-2-15 18:13:50 | 显示全部楼层
    XIEXIEFENXIANG
  • TA的每日心情
    开心
    前天 00:03
  • 签到天数: 8 天

    [LV.3]偶尔看看II

    发表于 5 天前 | 显示全部楼层
    楼主破译高手
  • TA的每日心情
    开心
    2019-1-18 06:32
  • 签到天数: 229 天

    [LV.7]常住居民III

    发表于 5 天前 | 显示全部楼层
    本帖最后由 wht1979 于 2019-2-18 15:04 编辑
      |2 S7 Z# ?8 G/ i" D
    9 l" m- p6 S; |% L楼主,钱伯斯21世纪安装版的数据文件用文本打开就是有规律的那些问好,你说可以想你这样给弄出来么?
      P1 r% p- Q! C; Z' [1 D* C
    9 o3 u+ z& E( Q( o; p& \! Q0 }
    安的就是这个" C# X/ V0 ]2 u
    https://www.pdawiki.com/forum/thread-13997-1-1.html
    * ~+ W7 ~4 D# _
    5 b8 e- o, R. I; t, V; r@O版的帖子里给的安装盘。
    4 r( e" Z' p7 B7 t3 T( \
  • TA的每日心情
    开心
    昨天 17:58
  • 签到天数: 61 天

    [LV.6]常住居民II

     楼主| 发表于 4 天前 | 显示全部楼层
    wht1979 发表于 2019-2-18 15:026 U) E* i7 d4 l  d
    楼主,钱伯斯21世纪安装版的数据文件用文本打开就是有规律的那些问好,你说可以想你这样给弄出来么?6 M. J* g) H4 P; O) _! v. I

    ( v: ~! O1 Z$ z0 e" t) ^2 R
    ...
    ; D& v* b! r/ g: z) j$ w: u
    我看了一下,这个是被加密了的 SQLite 2.1 版本的数据文件,需要输入密码才能查看 SQLite 数据库的存储内容,一般这种就很难破解了。
  • TA的每日心情
    开心
    2019-1-18 06:32
  • 签到天数: 229 天

    [LV.7]常住居民III

    发表于 4 天前 | 显示全部楼层
    enjoy了哦 发表于 2019-2-19 00:567 ]4 o- ^9 ^) j! n
    我看了一下,这个是被加密了的 SQLite 2.1 版本的数据文件,需要输入密码才能查看 SQLite 数据库的存储内 ...

    2 P8 F! R% Z9 L6 [& k2 Z朗文简明活用,还有这个钱伯斯都是有光盘没有字典,可能就是加了密的文件(不懂,猜的)原因。
    0 ~$ W3 o- X1 S
  • TA的每日心情
    开心
    昨天 00:06
  • 签到天数: 6 天

    [LV.2]偶尔看看I

    发表于 3 天前 | 显示全部楼层
    厉害了,钻研精神可嘉!
  • TA的每日心情
    开心
    2018-7-14 15:08
  • 签到天数: 11 天

    [LV.3]偶尔看看II

    发表于 昨天 18:51 | 显示全部楼层
    指明了方向 ,开了眼界,赞!
    您需要登录后才可以回帖 登录 | 免费注册

    本版积分规则

    顶部qrcode底部
    关注公众号送论坛充值码
    关注微信公众平台
    关注微信公众号 pdawiki,获取邀请码,看文抢积分,抽奖得浮云! Follow our Wechat official account "pdawiki", get invitation codes, and play the lottery to earn points (积分)!

    小黑屋|手机版|Archiver|PDAWIKI |网站地图

    GMT+8, 2019-2-23 02:10 , Processed in 0.080110 second(s), 10 queries , MemCache On.

    Powered by Discuz! X3.4

    © 2001-2017 Comsenz Inc.

    快速回复 返回顶部 返回列表