TA的每日心情 | 开心 2023-3-10 21:15 |
---|
签到天数: 1329 天 [LV.10]以坛为家III
|
本帖最后由 enjoy了哦 于 2019-5-4 10:45 编辑 . g! e3 e% ~8 W% Y
R' ^/ H) N1 ?( ~9 w这是apk文件(来源:360手机助手):- C/ x6 X/ T2 F( o8 i: `
http://zhushou.360.cn/detail/index/soft_id/431302# w: V- S, Z- i9 @
: ?7 d- K' r6 o- p+ Q此应用排版精美,为官方出品,但它的词库做了一定的加密措施,不太好提取。
1 U- e5 `+ R2 z! U* U. A X- c下面是提取过程。0 ?) H, o' Y( v* p
1 P7 V/ I: z- q$ m首先以zip格式解压此apk文件,在解压目录的assets文件夹下,可看到该词典的核心内容:css样式表文件,字体文件,图片文件等。$ @7 @# r) S: I. A. y% x
. X$ r$ S+ B/ Z" ]3 I, b+ h6 H2 `
, L0 X1 W* o7 N c, d02/07/2019 12:27 PM <DIR> css
( i' Y: q5 o% S, X- p, L02/07/2019 12:27 PM <DIR> fonts0 T. U' o, E9 K" K8 M7 m
02/07/2019 12:27 PM <DIR> html" y8 w+ t9 P3 @* S [% r7 M% \
02/07/2019 12:27 PM <DIR> images
; Y- \$ C* [ R& ?7 g0 q11/17/2011 12:27 PM 1,024,000 pearson5.aa( x9 l1 y5 F: H' j
11/17/2011 12:27 PM 1,024,000 pearson5.ab
! q# `' p+ ~; n" K11/17/2011 12:27 PM 1,024,000 pearson5.ac, x0 c# n# Y8 ^/ c/ a N5 z3 b
11/17/2011 12:27 PM 1,024,000 pearson5.ad: [2 s9 f% Z6 G/ R! K6 K( p9 ^# p
11/17/2011 12:27 PM 1,024,000 pearson5.ae
1 L& R! D& y! x) B11/17/2011 12:27 PM 1,024,000 pearson5.af
2 _ _2 L5 ~! Y( g) n11/17/2011 12:27 PM 1,024,000 pearson5.ag
0 }0 i' o- g) b/ u" g; D3 l11/17/2011 12:27 PM 1,024,000 pearson5.ah) R( R9 Y, \6 w9 S9 @" H$ J
11/17/2011 12:27 PM 1,024,000 pearson5.ai
: k5 I" k- A0 p* h; P: ^9 v: b11/17/2011 12:27 PM 1,024,000 pearson5.aj
5 g y+ i; P: O; S) W! T11/17/2011 12:27 PM 1,024,000 pearson5.ak E# q: t# W+ B! N% a: \
11/17/2011 12:27 PM 1,024,000 pearson5.al3 ~) [) I' p$ _$ t% t1 Z8 f9 J
11/17/2011 12:27 PM 1,024,000 pearson5.am
/ {2 U+ v8 n8 ^11/17/2011 12:27 PM 1,024,000 pearson5.an. n& n# F- R! S# |( e- X. p; z5 e
11/17/2011 12:27 PM 1,024,000 pearson5.ao) N9 o3 y8 M, e4 t
11/17/2011 12:27 PM 1,024,000 pearson5.ap7 | |8 s4 `+ Q& H" O
11/17/2011 12:27 PM 1,024,000 pearson5.aq
% c) I4 p0 a( [6 p! F/ ^) c11/17/2011 12:27 PM 1,024,000 pearson5.ar
. L5 G+ W( u3 m) L& i$ v$ T+ |11/17/2011 12:27 PM 1,024,000 pearson5.as& l3 y2 m- `! b7 [- {: S$ ?7 c/ N
11/17/2011 12:27 PM 1,024,000 pearson5.at( X" r! R( S9 G4 M
11/17/2011 12:27 PM 1,024,000 pearson5.au6 \, f6 I/ a" [, T. O) N
11/17/2011 12:27 PM 1,024,000 pearson5.av( i4 K9 o- ^/ L# A% F+ A3 Z* L
11/17/2011 12:27 PM 1,024,000 pearson5.aw
# R* n% j, ~: @, N11/17/2011 12:27 PM 1,024,000 pearson5.ax6 i o# r" e" L, O( Z
11/17/2011 12:27 PM 1,024,000 pearson5.ay7 e1 Y/ r5 P8 p1 S
11/17/2011 12:27 PM 1,024,000 pearson5.az6 d% ~% j( X b
11/17/2011 12:27 PM 1,024,000 pearson5.ba
, n; P4 a# f" P3 g7 _11/17/2011 12:27 PM 1,024,000 pearson5.bb& E: R1 Y. d& K/ d* v/ g
11/17/2011 12:27 PM 1,024,000 pearson5.bc
7 P' n: w7 N2 u2 s' i3 s11/17/2011 12:27 PM 1,024,000 pearson5.bd
* v4 h S- L7 ?. e( j11/17/2011 12:27 PM 1,024,000 pearson5.be
( S s" \( p7 c! w$ f- [& g& }$ {11/17/2011 12:27 PM 1,024,000 pearson5.bf
% ?% |0 i6 b5 T8 l' R6 ^& f11/17/2011 12:27 PM 974,848 pearson5.bg
; U" i2 p4 M$ } v Q9 o U
9 b1 ~3 M* Q$ ]& O其中pearson5.aa至pearson5.bg等33个文件总共加起来有30多兆,占据了apk文件的大部分内容,是词库文件。每一个文件都只有1000KB大小,是对词库文件做的处理,让它不容易被提取。0 O8 n0 h& Y" I/ W$ x, f) W# x
: ~' Y# x' Y+ [& o5 G, d
但是这个做法其实形同虚设。通过以十六进制观察pearson5.aa的文件头:
6 P6 Z6 s: C, k) x8 I, k6 h8 f* K4 R M$ F- G$ q/ g
SQLite format 3...2 `: \9 P4 p, S6 ]
& p7 [' o$ P' v" Z/ j, [5 }
可知是一个SQLite数据库文件。接着同样以十六进制观察其它的文件名为pearson5的文件,发现格式都非常工整,应该是将原数据库文件按1000KB一块一块地截取而成。
! K3 @% O5 F- \$ i. ]7 r) w9 }1 x% f; C4 P" ^
打开Windows的命令提示符,使用copy命令将这33个文件连缀起来,保存为dict.sqlite文件。
+ c5 p `, M A+ U' ~- Y7 s( P6 N- l& ?6 h1 y! G" W% f
将dict.sqlite文件用SQLite程序打开,呈现出清晰的数据库结构,主要内容为entry_a, entry_b, entry_c, ..., entry_z这26张数据表。每张数据表存储了单词释义(pdata数据项)、发音文件名(usa和uk数据项)、词条(word数据项)、词性(pos数据项)等。3 `$ D" @( Q4 C7 @! l6 v6 e! _# y
' `# Y8 i" J9 b5 W* C7 {5 U, k/ h但是在这26张数据表中,单词释义(pdata数据项)不是明文存储的。以这个单词fabulous为例,其pdata数据项里面的内容为:
4 ]0 W7 l5 p- n7 l3 E* h# {) E2 |0 _8 T6 Q# D: |, X& r+ o
H4sIAAAAAAAAAK1UzW7aQBC+8xRTzg0YG1onopZQcJtIBBBBajmu7QEc1l5rfyD0xKnqK+QFkgfpqepb5AH6DN1dEwdUqUqrHizNzvd9M7Pf2O4WZ2Eu+TaodYuzCyRJGXzsB3MSKcqU6DbLs83PxhfhsDe9HA0N/rh7UPqpWAeoYY85y89ZgqI8TXT6x9f5t/vo5ufuC/1+Z0U2XbPRMX10HZDkxgI6tIxqvmvMBUKavKsrdx47p377tEXarus4pPEG3ajd0UGr1XG8txi3Ir9xQhKvbqX98H2At5JjhnQLC8YSYBzSrOAoRLpG08dwbJvZMNiwPEE+V9QAJmGA8FPvajwI7QSF4/gnjtNynbbnuo0NWdeDGVNAGVvBk4mvjHqv+nMFr6xAKilkSOhL5L7r+c5+gOkSgTOWwZKI50rrFDcCSMyZECA1hZIVNo5rN/fu/qvPcVz6/GHSuwpYrj2OcM44Qs5Ubqpb4GkTa+RbPQVf6C45kExzpNmHSD//tomlWuCLluCXHpgL9tUKH3d3AjT/fDQYjC6HWla927DR3sqlqXqA1v6zI52/caQaLeZIpNJv5WsoKIlRAMoYiNZlmMuU5ZgYzyQnSWqOhIKQjKdGECkJCdMNJOgqVLfE21TIQ0cn4aA3Dfvlh06tsc+po0s3q1/ELx84cjotBAAA' S; E8 F5 b! ~6 N* ]8 c( n
% G @2 z! Y& I1 h0 |通过观察其他的pdata数据,这应该是通过Base64转换而来的,真是多此一举。将此数据通过Base64解密后,是一堆乱码:' L0 z/ |3 I4 h1 Q- \+ |
9 M9 ]+ f) h1 _2 T* A
4 o: ?) R$ b: X2 s
��T�n�@��S�' l# L9 b9 _# o
Z'��Pp�HAj9���^k �ĩ�+����[�� �]T�J�,���}3����ga.�6�u��$I|�s)ʔ�6˳����7�
& ^; Y" C. b; |3 n7 X Q
5 C# ?6 t$ d$ O��{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��纍4 D7 n* o" E0 t" u& f
Y׃S@[�����z��s��@*)dH�K����~���3�����J�7H̙ 5��6�k7�����q\��aһ5 U9 f5 F `+ l+ o( b% A* n$ D h
X�=�p�8B�Tn�[�ik�[=_�.9�Ls�هH?����Z������6 V# T; h' ]7 K
ww4�|4�.�ZV�۰��ʥ�z����#��q�-�H��o�k((�Q���e�˔��$'Ij������F) �
/ P, E: B" N2 _ w: B: r+ q2 {$�*T���T�CG'�7
# O% _/ k! G# B0 g) r��N��ϩ�K7�_�/8r:-) y j" ~+ I0 ~4 G
8 O8 O! y( c7 ~' [& l
: b1 R# |' J' Z2 Z3 K
这加密措施貌似做得不错。但是如果细心一点的话,也是能看出端倪的。+ r' A! J: X& g; `: L+ b k
1 }+ H: D+ E$ A$ S& b4 B
可以观察到,每个pdata数据都是以 H4sIAAAAAAAAA 这13个字符开头的。考虑到每个单词释义都是一个HTML文件,有统一的格式(所以所有单词释义的HTML文件的前几个字符一定是相同的),这就是一个突破口。这种情况说明了唯二的两种可能:% _3 b% u) y/ C# o& c( Y
1. 这串数据根本就没有用什么加密方式,顶多是转换编码而已。所以每个pdata数据项的数据头都相同。! B, C5 P8 M6 ?, k
2. 如果使用了现代密码学中的私钥加密(流密码、块密码),明文与密文之间虽然是面目全非,但如果每次加密文件时都用同一个密钥初始化,则每个pdata数据项(也就是密文之间)的数据头也会相同。+ |0 X+ N# b) @1 K
% ]! C7 K8 z( r: u
通过反编译该APP的 smali 代码得到大部分 Java 源码(该应用没有进行代码混淆),没有发现 Cipher 以及 doFinal 等字样(这些是 Java 提供的用于加密解密的类或函数),初步可以确定是上述的第 1 种情况。
- a; Q7 R. z. E' U, m
5 R1 n+ ~4 T1 Y根据Base64的规则,取这13个字符中的前12个。但因为这前12个字符中后面8个都是A,代表6个二进制的0,没什么意义,因此真正有用的信息就是 H4sI 这4个字符。* w9 M: U: e: \8 N) H8 H
( m2 Z- B5 x$ l将其进行Base64解密,所得十六进制表示为1F8B08。通过在 filesignatures.net 查找该文件头,可知它是一个gzip压缩文件,文件扩展名为*.gz。
7 a/ x1 c1 z' V* G8 r) F( w/ S& i: B: W; b8 s6 S4 L5 n) D, V$ S; `
通过Python的 Base64 模块将上述pdata数据转换成二进制gzip文件,最后可读取压缩包内的文件,该文件采用UTF-8编码,为HTML文件,但未标注扩展名。
4 P" K/ l4 n7 V. @文件内容为:
% n B2 w7 g5 o
g- Z3 f$ \5 q* i" C \. y<p:Entry># c- T5 o0 l$ [# Y
<p:Head>
6 |: d8 R. ^0 I; ^- {4 U* O. |& F o) E<p:HWD>fabulous</p:HWD>
% f$ ]# _: ?0 o$ y0 D<p:HYPHENATION>fab‧u‧lous</p:HYPHENATION>1 A( N! D2 w# R y0 F
<p:PronCodes>* m5 q4 T/ G" c/ J' o/ ?
<p:PRON>ˈfæbjləs</p:PRON>- B8 m4 \. G6 M
</p:PronCodes>, u; R% V: r$ x( E
<p:POS>adj</p:POS>" o1 P2 y5 B% P0 D0 i/ V+ P3 u( N
</p:Head>
" R# b: t2 ^* W5 v) f<p:Sense id="u2fc098491a42200a.6e2b450a.115037ec1b8.-ad3">3 O' A* A9 |* f- c! `+ K: }$ P
<p:DEF>extremely good or impressive</p:DEF>
+ ^/ O! u/ x4 c( B<p:SYN>wonderful</p:SYN>
3 _! {9 ]! ~! d$ f. _3 f<p:EXAMPLE id="p008-001204322.wav">You look fabulous!</p:EXAMPLE>9 F( O$ @% B: W7 m/ \0 }
<p:EXAMPLE id="p008-001204323.wav">a fabulous meal</p:EXAMPLE>
. i( N9 K2 V- x7 ^: {1 q9 T<p:EXAMPLE id="p008-001823802.wav">The room has fabulous views across the lake.</p:EXAMPLE>
1 W* V- e& m3 o( \$ T; r! ?</p:Sense>3 y4 h) o. S' b2 u4 P
<p:Sense id="u2fc098491a42200a.6e2b450a.115037ec1b8.-acc"># p3 Q, C- G! s- {/ V/ }! |" o4 s
<p:GRAM>only before noun</p:GRAM>3 T3 R% S2 V7 \ E4 C" k6 C
<p:DEF>very large in amount or size</p:DEF>
5 W' g% f6 R. l5 o, e7 H% d( @4 A0 @<p:SYN>huge</p:SYN>
u+ B# { o! _+ c" C6 r1 s<p:EXAMPLE id="p008-001204328.wav">the Duke’s <p:COLLOINEXA>fabulous wealth</p:COLLOINEXA>/ S {4 s/ c' p+ Q5 h
</p:EXAMPLE>( j' h, u0 n& e; C. F
</p:Sense>4 s' J# b* c9 Y* d3 i
<p:Sense id="u2fc098491a42200a.6e2b450a.115037ec1b8.-ac5">
- O1 Y, y$ T$ d* l<p:GRAM>only before noun</p:GRAM>. B. m; i; x+ N6 B0 C) k
<p:DEF>fabulous creatures, places etc are mentioned in traditional stories, but do not really exist</p:DEF>8 r& [# |0 @, h
<p:RELATEDWD>fable</p:RELATEDWD>
2 E0 b2 l" {9 ^' R7 Z$ A</p:Sense>/ l- h1 j2 t! m% ^! F7 [
</p:Entry>" u4 |* b7 p" q" Q8 g) N
; D: t8 `' C9 ]* j7 q8 W# N- U与 ldoceonline.com 的内容似乎相差不多,但却是原汁原味的第五版内容,格式非常清晰。诸位若有兴趣,也可以拿来练练手。2 _' Z F* E& W9 B9 f
4 W7 T1 D( t7 t6 v
" J* h2 t! B$ m" |0 y, Y
+ u) z- o; J( @4 ^9 Z |
评分
-
7
查看全部评分
-
本帖被以下淘专辑推荐:
- · 词典制作|主题: 217, 订阅: 40
- · 词典制作|主题: 111, 订阅: 24
- · MDX制作|主题: 46, 订阅: 17
|