TA的每日心情 | 开心 2023-3-10 21:15 |
---|
签到天数: 1329 天 [LV.10]以坛为家III
|
本帖最后由 enjoy了哦 于 2019-5-4 10:45 编辑
: ^/ }2 o# t( p/ i( q' u4 X3 u7 Z) p3 ]$ L, V$ U; `4 P" Q
这是apk文件(来源:360手机助手):4 g4 h- G' w% R/ }, n* I0 R* L
http://zhushou.360.cn/detail/index/soft_id/431302) h4 S; c- }. B( C. D
* I! i8 ?6 C2 s
此应用排版精美,为官方出品,但它的词库做了一定的加密措施,不太好提取。
" `: E' D( F _下面是提取过程。) l/ C* s# ?" D
4 p. E. B5 @ ?* m/ H' c
首先以zip格式解压此apk文件,在解压目录的assets文件夹下,可看到该词典的核心内容:css样式表文件,字体文件,图片文件等。
$ p2 a, ~! _- R& R, Z* ^
( u# g6 L; S- `7 l$ ~) V$ e' e) l
- A) z4 V1 C$ Y) C; |02/07/2019 12:27 PM <DIR> css
* q! _; r& r5 g$ u0 e$ w02/07/2019 12:27 PM <DIR> fonts5 F# d6 G! V/ O0 z
02/07/2019 12:27 PM <DIR> html
7 l2 H- m$ s* b/ W+ |5 `6 E# w02/07/2019 12:27 PM <DIR> images; s6 z' y$ [5 p; m; e- O
11/17/2011 12:27 PM 1,024,000 pearson5.aa: p# k! H: b9 \* u/ e' v
11/17/2011 12:27 PM 1,024,000 pearson5.ab- I0 ]1 C6 l$ v+ i7 M
11/17/2011 12:27 PM 1,024,000 pearson5.ac: W9 N8 v# i+ v$ S/ n+ O
11/17/2011 12:27 PM 1,024,000 pearson5.ad
2 ]+ n3 u% ~1 A6 | w/ O11/17/2011 12:27 PM 1,024,000 pearson5.ae- q) `0 t$ q( q1 G" j
11/17/2011 12:27 PM 1,024,000 pearson5.af
' W& O9 u6 S% q& v11/17/2011 12:27 PM 1,024,000 pearson5.ag
( R+ j0 F, [4 j" S' o: G X$ p11/17/2011 12:27 PM 1,024,000 pearson5.ah
g6 D+ M, w4 m8 W2 f" a3 @9 ~11/17/2011 12:27 PM 1,024,000 pearson5.ai
- ?' B9 _8 _2 H! s8 J11/17/2011 12:27 PM 1,024,000 pearson5.aj
, \4 {$ W3 H# z7 f5 b; k11/17/2011 12:27 PM 1,024,000 pearson5.ak
8 A8 {- T4 C; Q$ X* r11/17/2011 12:27 PM 1,024,000 pearson5.al
9 d. c7 [8 t$ O$ U) [11/17/2011 12:27 PM 1,024,000 pearson5.am
5 ]7 f/ d' }8 m8 E6 }6 T: L11/17/2011 12:27 PM 1,024,000 pearson5.an7 {/ k7 F' W# q) U: S6 Y b
11/17/2011 12:27 PM 1,024,000 pearson5.ao0 J- w+ M) `9 S; k) m, @4 |
11/17/2011 12:27 PM 1,024,000 pearson5.ap2 i, ?7 \- p# I# q+ O/ g
11/17/2011 12:27 PM 1,024,000 pearson5.aq/ B2 F% e' O/ e8 N |0 Z& h* o
11/17/2011 12:27 PM 1,024,000 pearson5.ar
4 B. A; Z: N# n) x1 P, F11/17/2011 12:27 PM 1,024,000 pearson5.as
6 M N% D# E5 k$ m; X4 f11/17/2011 12:27 PM 1,024,000 pearson5.at: o4 N7 G- ?5 ^$ N
11/17/2011 12:27 PM 1,024,000 pearson5.au
# j; U# D9 {9 U0 a: J11/17/2011 12:27 PM 1,024,000 pearson5.av
: h% Y5 T; e6 N9 n11/17/2011 12:27 PM 1,024,000 pearson5.aw% X3 ?- v2 E; F( ~; o9 a+ m
11/17/2011 12:27 PM 1,024,000 pearson5.ax
3 p* I) G0 Y1 t11/17/2011 12:27 PM 1,024,000 pearson5.ay
; F5 U5 o$ ]' F4 j$ N11/17/2011 12:27 PM 1,024,000 pearson5.az+ D1 D. t# k/ S. m6 ]
11/17/2011 12:27 PM 1,024,000 pearson5.ba
; f% { }. o& L8 b# z. L7 K D11/17/2011 12:27 PM 1,024,000 pearson5.bb
9 Z/ A; v2 F, H8 }1 O" s0 P0 O+ v11/17/2011 12:27 PM 1,024,000 pearson5.bc
$ U. j$ D; G. N+ y11/17/2011 12:27 PM 1,024,000 pearson5.bd
6 y0 d9 H9 u. u: o9 w- G11/17/2011 12:27 PM 1,024,000 pearson5.be
/ A, M. y r, y3 m7 X11/17/2011 12:27 PM 1,024,000 pearson5.bf
/ B. l, H A1 v( u: n( W11/17/2011 12:27 PM 974,848 pearson5.bg: Q" f& K! H3 c" e8 m
! a2 s* E! z. B2 v: q
其中pearson5.aa至pearson5.bg等33个文件总共加起来有30多兆,占据了apk文件的大部分内容,是词库文件。每一个文件都只有1000KB大小,是对词库文件做的处理,让它不容易被提取。
& o( H* `- o7 c i) W2 X4 t4 b, ?- E% p3 |
但是这个做法其实形同虚设。通过以十六进制观察pearson5.aa的文件头:5 _- w- |! b" |- Y; ]8 `
$ e! D0 A: c" W* B9 ]SQLite format 3...$ p( T7 D t$ I
' R1 j, R* S' A) l可知是一个SQLite数据库文件。接着同样以十六进制观察其它的文件名为pearson5的文件,发现格式都非常工整,应该是将原数据库文件按1000KB一块一块地截取而成。) c; g( G6 K7 U& |7 e$ {
: x6 e# G& b* ^9 F6 X. H打开Windows的命令提示符,使用copy命令将这33个文件连缀起来,保存为dict.sqlite文件。
% J: k% G' a3 \2 T$ d/ e
# ^' O: ?% j3 \6 F* f7 c5 v将dict.sqlite文件用SQLite程序打开,呈现出清晰的数据库结构,主要内容为entry_a, entry_b, entry_c, ..., entry_z这26张数据表。每张数据表存储了单词释义(pdata数据项)、发音文件名(usa和uk数据项)、词条(word数据项)、词性(pos数据项)等。
4 u/ |0 k, x1 F5 f. p
8 {0 I* H% Y! h' U但是在这26张数据表中,单词释义(pdata数据项)不是明文存储的。以这个单词fabulous为例,其pdata数据项里面的内容为:
' p; J6 }. k e
, c8 @5 B3 A. w: U4 R& d2 U. KH4sIAAAAAAAAAK1UzW7aQBC+8xRTzg0YG1onopZQcJtIBBBBajmu7QEc1l5rfyD0xKnqK+QFkgfpqepb5AH6DN1dEwdUqUqrHizNzvd9M7Pf2O4WZ2Eu+TaodYuzCyRJGXzsB3MSKcqU6DbLs83PxhfhsDe9HA0N/rh7UPqpWAeoYY85y89ZgqI8TXT6x9f5t/vo5ufuC/1+Z0U2XbPRMX10HZDkxgI6tIxqvmvMBUKavKsrdx47p377tEXarus4pPEG3ajd0UGr1XG8txi3Ir9xQhKvbqX98H2At5JjhnQLC8YSYBzSrOAoRLpG08dwbJvZMNiwPEE+V9QAJmGA8FPvajwI7QSF4/gnjtNynbbnuo0NWdeDGVNAGVvBk4mvjHqv+nMFr6xAKilkSOhL5L7r+c5+gOkSgTOWwZKI50rrFDcCSMyZECA1hZIVNo5rN/fu/qvPcVz6/GHSuwpYrj2OcM44Qs5Ubqpb4GkTa+RbPQVf6C45kExzpNmHSD//tomlWuCLluCXHpgL9tUKH3d3AjT/fDQYjC6HWla927DR3sqlqXqA1v6zI52/caQaLeZIpNJv5WsoKIlRAMoYiNZlmMuU5ZgYzyQnSWqOhIKQjKdGECkJCdMNJOgqVLfE21TIQ0cn4aA3Dfvlh06tsc+po0s3q1/ELx84cjotBAAA
1 b- D: x' L( d9 W8 Y) @" u
5 A0 W( p1 P4 d通过观察其他的pdata数据,这应该是通过Base64转换而来的,真是多此一举。将此数据通过Base64解密后,是一堆乱码:/ K5 [: u" |0 t1 P+ M# ^
" G4 m& K8 h% x! B q. d2 [1 A/ M. L6 Q5 L
��T�n�@��S�0 v: m% ?/ \* ]& I- K
Z'��Pp�HAj9���^k �ĩ�+����[�� �]T�J�,���}3����ga.�6�u��$I|�s)ʔ�6˳����7�! V5 b5 v$ F/ j* ]1 i+ v
' D* I. K+ s* `2 c% g" ?��{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��纍
5 O7 C1 I; E. b# r% n* r. s- _Y׃S@[�����z��s��@*)dH�K����~���3�����J�7H̙ 5��6�k7�����q\��aһ
7 u! z% G' B+ U* S) Q. mX�=�p�8B�Tn�[�ik�[=_�.9�Ls�هH?����Z������. A" w/ v! k+ y, h
ww4�|4�.�ZV�۰��ʥ�z����#��q�-�H��o�k((�Q���e�˔��$'Ij������F) �2 E5 [2 V% p$ s2 X' Q; A$ `
$�*T���T�CG'�7
0 G. m! A1 J/ J% X9 L7 G��N��ϩ�K7�_�/8r:-
& K- p( z* s2 t* ?2 F6 B( E" n
# I# g$ x2 z5 S# q% R) h
这加密措施貌似做得不错。但是如果细心一点的话,也是能看出端倪的。! A+ D- G3 n, y+ L2 B6 A. O
& t+ z$ J: C3 Y+ M! _4 F
可以观察到,每个pdata数据都是以 H4sIAAAAAAAAA 这13个字符开头的。考虑到每个单词释义都是一个HTML文件,有统一的格式(所以所有单词释义的HTML文件的前几个字符一定是相同的),这就是一个突破口。这种情况说明了唯二的两种可能:& r( J- w& x$ P6 ^9 L9 X
1. 这串数据根本就没有用什么加密方式,顶多是转换编码而已。所以每个pdata数据项的数据头都相同。
% W3 K( E2 C6 f1 Z2. 如果使用了现代密码学中的私钥加密(流密码、块密码),明文与密文之间虽然是面目全非,但如果每次加密文件时都用同一个密钥初始化,则每个pdata数据项(也就是密文之间)的数据头也会相同。5 D. {, K; M/ M: E5 u! `
, D# S [) t% f4 w8 U通过反编译该APP的 smali 代码得到大部分 Java 源码(该应用没有进行代码混淆),没有发现 Cipher 以及 doFinal 等字样(这些是 Java 提供的用于加密解密的类或函数),初步可以确定是上述的第 1 种情况。9 Q* O( D- ~: i! Q/ L
' K1 Z* e) m" s5 h3 f7 V( I
根据Base64的规则,取这13个字符中的前12个。但因为这前12个字符中后面8个都是A,代表6个二进制的0,没什么意义,因此真正有用的信息就是 H4sI 这4个字符。" x! [. k8 {( s- x
0 |2 }0 {8 u% J/ ^; }/ S6 O% i1 ]
将其进行Base64解密,所得十六进制表示为1F8B08。通过在 filesignatures.net 查找该文件头,可知它是一个gzip压缩文件,文件扩展名为*.gz。# n, ~7 p$ F. e6 o
6 ~7 c$ p! K' u
通过Python的 Base64 模块将上述pdata数据转换成二进制gzip文件,最后可读取压缩包内的文件,该文件采用UTF-8编码,为HTML文件,但未标注扩展名。( J8 ^2 l0 r$ L4 \% J K* ?7 c! ]
文件内容为:
3 W9 H% L" G9 U$ O
7 `% H/ d) m" ]& {<p:Entry>
' s# D; E7 S$ w<p:Head>( Z! w' Y4 T9 |/ m
<p:HWD>fabulous</p:HWD>( U* o/ j0 K& a d: _6 R& K K8 A
<p:HYPHENATION>fab‧u‧lous</p:HYPHENATION>) o: k9 t& n3 M9 P: R: Z6 @9 |
<p:PronCodes>- J3 |* {8 W! n0 s. }
<p:PRON>ˈfæbjləs</p:PRON> l, Y; j x2 z& h
</p:PronCodes>0 i, M$ @. _- K, }1 }4 }7 f; M9 _
<p:POS>adj</p:POS>$ R* I8 |6 `6 }, z
</p:Head>- i* O" `& } S; I& t5 p
<p:Sense id="u2fc098491a42200a.6e2b450a.115037ec1b8.-ad3">2 T1 o5 w8 d9 F1 ~0 h! E
<p:DEF>extremely good or impressive</p:DEF>
( v2 S. H5 y5 m4 y3 W% t' d& ^<p:SYN>wonderful</p:SYN>
l# F) r0 T2 \. G<p:EXAMPLE id="p008-001204322.wav">You look fabulous!</p:EXAMPLE>4 d) Y# X- H! ?( ~4 i, D: `' x
<p:EXAMPLE id="p008-001204323.wav">a fabulous meal</p:EXAMPLE>
7 Q& y. T) {$ p3 O& n7 `" |: }& T6 b* ^<p:EXAMPLE id="p008-001823802.wav">The room has fabulous views across the lake.</p:EXAMPLE>1 S p$ g/ X) Z
</p:Sense>% U) F- Z, R ^) c! c' ~* B- j
<p:Sense id="u2fc098491a42200a.6e2b450a.115037ec1b8.-acc">
8 L9 m) D9 p _: g- l' ~<p:GRAM>only before noun</p:GRAM>
& d: d% l) d6 {+ i6 g$ O<p:DEF>very large in amount or size</p:DEF> K; @! o# _3 a# f4 \' C2 H
<p:SYN>huge</p:SYN>4 w6 w7 v& V7 s! _2 Q. @$ J8 n
<p:EXAMPLE id="p008-001204328.wav">the Duke’s <p:COLLOINEXA>fabulous wealth</p:COLLOINEXA>' I( X: L3 A5 o* T
</p:EXAMPLE>1 l, L ^; q3 G# @ I" C
</p:Sense>
$ ]/ L: j0 M! l+ M2 R<p:Sense id="u2fc098491a42200a.6e2b450a.115037ec1b8.-ac5">
7 j7 k8 F2 T z5 q2 p<p:GRAM>only before noun</p:GRAM>2 I6 H. R# v* l+ | Y1 U6 J
<p:DEF>fabulous creatures, places etc are mentioned in traditional stories, but do not really exist</p:DEF>
; `! O, `8 `4 H3 B% f* F, b2 d<p:RELATEDWD>fable</p:RELATEDWD>9 n- B! z; J- o1 l0 P$ ]3 T K2 O
</p:Sense>
4 V0 D3 N6 c, \+ l* B</p:Entry>9 I' H8 l) V2 Y3 O
0 p; V% Z: W$ H0 @, X5 V
与 ldoceonline.com 的内容似乎相差不多,但却是原汁原味的第五版内容,格式非常清晰。诸位若有兴趣,也可以拿来练练手。
7 u+ S) s- v) \1 n) B
- C5 S7 L' `/ V P" ?; v2 v2 {; c0 m! ` n, P# B* F N }+ \+ e' j
. e& U+ A, |; ^; i$ K1 [, f |
评分
-
7
查看全部评分
-
本帖被以下淘专辑推荐:
- · 词典制作|主题: 217, 订阅: 40
- · 词典制作|主题: 111, 订阅: 24
- · MDX制作|主题: 46, 订阅: 17
|