TA的每日心情 | 开心 2023-3-10 21:15 |
---|
签到天数: 1329 天 [LV.10]以坛为家III
|
本帖最后由 enjoy了哦 于 2019-5-4 10:45 编辑
7 o5 Y! p( k# N8 B! s9 ]8 j
y. w/ i, k6 {# B. x这是apk文件(来源:360手机助手):
" A, Q3 Q3 ^9 t3 O3 R9 ohttp://zhushou.360.cn/detail/index/soft_id/431302
% r% Q" `/ J( I/ Z+ F8 \4 S( ?) {* m! y
此应用排版精美,为官方出品,但它的词库做了一定的加密措施,不太好提取。1 K( u! O& G# j! O
下面是提取过程。4 ?- @# r1 ]( J0 c
3 }$ O2 j/ m3 L' u( t
首先以zip格式解压此apk文件,在解压目录的assets文件夹下,可看到该词典的核心内容:css样式表文件,字体文件,图片文件等。
0 ~; [1 j- s. ]$ ^% E) x) X& L8 Q" P& F+ P# t
5 }8 n" i* D: \2 d* E- {0 j9 b02/07/2019 12:27 PM <DIR> css
# _, R# ]: k D3 _: }/ ]; z02/07/2019 12:27 PM <DIR> fonts
w% ^5 g& J8 m( W02/07/2019 12:27 PM <DIR> html; N) u0 |) K. }4 H& H# n
02/07/2019 12:27 PM <DIR> images
, M0 e" u% q! m/ c$ w' G11/17/2011 12:27 PM 1,024,000 pearson5.aa
, U6 l" m2 `. n; Z) S; k0 S5 `11/17/2011 12:27 PM 1,024,000 pearson5.ab
|3 _7 [+ `8 V3 k11/17/2011 12:27 PM 1,024,000 pearson5.ac
3 s; S8 z( M5 {6 p11/17/2011 12:27 PM 1,024,000 pearson5.ad
; M- J, [8 |& c4 G+ ]+ e11/17/2011 12:27 PM 1,024,000 pearson5.ae
' l1 P* a/ T' J8 A4 j* X4 Y& K* c11/17/2011 12:27 PM 1,024,000 pearson5.af
% c8 B4 t& _3 u6 d11/17/2011 12:27 PM 1,024,000 pearson5.ag# c1 l' Z, |* q( ~
11/17/2011 12:27 PM 1,024,000 pearson5.ah
4 [7 R* s2 `/ } k; u( v- \11/17/2011 12:27 PM 1,024,000 pearson5.ai3 c. w; W. l, A7 P
11/17/2011 12:27 PM 1,024,000 pearson5.aj6 ~0 b6 F/ x0 [" o
11/17/2011 12:27 PM 1,024,000 pearson5.ak Y( f$ h+ U0 K
11/17/2011 12:27 PM 1,024,000 pearson5.al3 y( ]4 Y) s* Q9 x
11/17/2011 12:27 PM 1,024,000 pearson5.am5 k! k. A# o$ a
11/17/2011 12:27 PM 1,024,000 pearson5.an7 E+ v) m7 S5 d) g( y5 O
11/17/2011 12:27 PM 1,024,000 pearson5.ao
4 r/ Q/ N! \' y {% u1 {/ Z11/17/2011 12:27 PM 1,024,000 pearson5.ap$ O5 C/ q8 Y, j- O
11/17/2011 12:27 PM 1,024,000 pearson5.aq2 f+ L9 P' ~$ \$ D3 \, `
11/17/2011 12:27 PM 1,024,000 pearson5.ar
L4 i. d+ F+ l, U11/17/2011 12:27 PM 1,024,000 pearson5.as \' t( [7 p I6 E
11/17/2011 12:27 PM 1,024,000 pearson5.at
: N/ e4 w+ Y* b11/17/2011 12:27 PM 1,024,000 pearson5.au
, J! }7 L+ @+ d! N8 ~11/17/2011 12:27 PM 1,024,000 pearson5.av
# J* I6 U! j7 ?- Z( ?5 F- w11/17/2011 12:27 PM 1,024,000 pearson5.aw
! i! }' _& V7 v6 g6 j11/17/2011 12:27 PM 1,024,000 pearson5.ax
1 R- b7 W; l! i: L( h11/17/2011 12:27 PM 1,024,000 pearson5.ay
; I- D2 Z# w X: ]" q. z( [11/17/2011 12:27 PM 1,024,000 pearson5.az& G* R6 |. n# x) o3 |
11/17/2011 12:27 PM 1,024,000 pearson5.ba
8 \. V0 Z( H5 T( [, C11/17/2011 12:27 PM 1,024,000 pearson5.bb
" ^" l X9 r2 k11/17/2011 12:27 PM 1,024,000 pearson5.bc
3 C3 I' _( b% F1 ]11/17/2011 12:27 PM 1,024,000 pearson5.bd1 J9 ~! G% Y: [8 X
11/17/2011 12:27 PM 1,024,000 pearson5.be Z$ n& o( U M7 V
11/17/2011 12:27 PM 1,024,000 pearson5.bf
* S1 e8 N. q3 Z9 g$ [$ ~11/17/2011 12:27 PM 974,848 pearson5.bg9 B' P8 r, X9 P. G: e1 O: i) G
* N: A! y& k, u" J( I/ e其中pearson5.aa至pearson5.bg等33个文件总共加起来有30多兆,占据了apk文件的大部分内容,是词库文件。每一个文件都只有1000KB大小,是对词库文件做的处理,让它不容易被提取。
& Y' y0 d+ S! o8 b$ Z5 a9 s5 Z0 @9 [4 [% x( F- p
但是这个做法其实形同虚设。通过以十六进制观察pearson5.aa的文件头:
! c7 t- y/ E+ b* o# b" `7 }2 X; ^7 q" `' P3 O
SQLite format 3...
! ?( R: t0 u9 \( E7 T/ O9 [
- X/ W/ m' }1 `9 L可知是一个SQLite数据库文件。接着同样以十六进制观察其它的文件名为pearson5的文件,发现格式都非常工整,应该是将原数据库文件按1000KB一块一块地截取而成。
* d/ Y0 f/ r2 J: H! x0 v* F0 [% D- L; A0 G) Q/ g a6 L
打开Windows的命令提示符,使用copy命令将这33个文件连缀起来,保存为dict.sqlite文件。
9 N2 F% E3 {9 _! w1 V ]0 s. a+ ?/ E d3 X0 U% P$ f* K; l
将dict.sqlite文件用SQLite程序打开,呈现出清晰的数据库结构,主要内容为entry_a, entry_b, entry_c, ..., entry_z这26张数据表。每张数据表存储了单词释义(pdata数据项)、发音文件名(usa和uk数据项)、词条(word数据项)、词性(pos数据项)等。
9 _( E" k7 R% I# {
# Q- y+ U8 K: `# @) T( S' Z但是在这26张数据表中,单词释义(pdata数据项)不是明文存储的。以这个单词fabulous为例,其pdata数据项里面的内容为:4 p0 T1 Q/ V; y" J0 v
4 ~( `; l5 S8 E: _! }% m% p& R
H4sIAAAAAAAAAK1UzW7aQBC+8xRTzg0YG1onopZQcJtIBBBBajmu7QEc1l5rfyD0xKnqK+QFkgfpqepb5AH6DN1dEwdUqUqrHizNzvd9M7Pf2O4WZ2Eu+TaodYuzCyRJGXzsB3MSKcqU6DbLs83PxhfhsDe9HA0N/rh7UPqpWAeoYY85y89ZgqI8TXT6x9f5t/vo5ufuC/1+Z0U2XbPRMX10HZDkxgI6tIxqvmvMBUKavKsrdx47p377tEXarus4pPEG3ajd0UGr1XG8txi3Ir9xQhKvbqX98H2At5JjhnQLC8YSYBzSrOAoRLpG08dwbJvZMNiwPEE+V9QAJmGA8FPvajwI7QSF4/gnjtNynbbnuo0NWdeDGVNAGVvBk4mvjHqv+nMFr6xAKilkSOhL5L7r+c5+gOkSgTOWwZKI50rrFDcCSMyZECA1hZIVNo5rN/fu/qvPcVz6/GHSuwpYrj2OcM44Qs5Ubqpb4GkTa+RbPQVf6C45kExzpNmHSD//tomlWuCLluCXHpgL9tUKH3d3AjT/fDQYjC6HWla927DR3sqlqXqA1v6zI52/caQaLeZIpNJv5WsoKIlRAMoYiNZlmMuU5ZgYzyQnSWqOhIKQjKdGECkJCdMNJOgqVLfE21TIQ0cn4aA3Dfvlh06tsc+po0s3q1/ELx84cjotBAAA* F* [- h0 n8 J, u5 f* ~
7 q* H" t) R9 r$ H# t5 q通过观察其他的pdata数据,这应该是通过Base64转换而来的,真是多此一举。将此数据通过Base64解密后,是一堆乱码:5 f* I( [6 s" j5 A
3 w& Q, I, i" W- s) ]! m
, e. P6 l( i; i/ a/ ]) J��T�n�@��S�' E( t: }! `: R. U
Z'��Pp�HAj9���^k �ĩ�+����[�� �]T�J�,���}3����ga.�6�u��$I|�s)ʔ�6˳����7�
6 K# ^6 [ q1 ~# \5 I1 @& f8 _" \, f/ Z% p, C9 n% Z! 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��纍
; B9 J- V4 H( i) {: j$ G1 P$ {1 hY׃S@[�����z��s��@*)dH�K����~���3�����J�7H̙ 5��6�k7�����q\��aһ. t( P0 V. `! d/ f3 f9 L# |. K
X�=�p�8B�Tn�[�ik�[=_�.9�Ls�هH?����Z������* X3 p' p+ Q/ C# X* m
ww4�|4�.�ZV�۰��ʥ�z����#��q�-�H��o�k((�Q���e�˔��$'Ij������F) �
& e3 P; y+ Q5 E! U1 ?$�*T���T�CG'�7& X7 }/ [) W4 k
��N��ϩ�K7�_�/8r:-
6 V5 Y6 ]) h# x+ ^ G% e' B" W J! l% V) x* t
# \1 [! ~8 I' U$ Q9 ?* g A
这加密措施貌似做得不错。但是如果细心一点的话,也是能看出端倪的。
; m0 }4 }% k5 R- @, _; D5 s' v3 }$ `$ D( g- L& q' w
可以观察到,每个pdata数据都是以 H4sIAAAAAAAAA 这13个字符开头的。考虑到每个单词释义都是一个HTML文件,有统一的格式(所以所有单词释义的HTML文件的前几个字符一定是相同的),这就是一个突破口。这种情况说明了唯二的两种可能:
2 K0 H' j. p4 \! M0 V1. 这串数据根本就没有用什么加密方式,顶多是转换编码而已。所以每个pdata数据项的数据头都相同。
* ?* @# N: @2 X6 Y) {7 V2. 如果使用了现代密码学中的私钥加密(流密码、块密码),明文与密文之间虽然是面目全非,但如果每次加密文件时都用同一个密钥初始化,则每个pdata数据项(也就是密文之间)的数据头也会相同。
# [$ i3 u4 V) ^
. h$ v& f6 K6 j; X0 u通过反编译该APP的 smali 代码得到大部分 Java 源码(该应用没有进行代码混淆),没有发现 Cipher 以及 doFinal 等字样(这些是 Java 提供的用于加密解密的类或函数),初步可以确定是上述的第 1 种情况。
' Z% i& k$ b+ |; B8 e
) v% f# f1 o9 d0 Y5 F根据Base64的规则,取这13个字符中的前12个。但因为这前12个字符中后面8个都是A,代表6个二进制的0,没什么意义,因此真正有用的信息就是 H4sI 这4个字符。
1 F* q* y# }1 R' P$ d9 L! i7 U r$ y9 w* p& N. p/ z
将其进行Base64解密,所得十六进制表示为1F8B08。通过在 filesignatures.net 查找该文件头,可知它是一个gzip压缩文件,文件扩展名为*.gz。
$ y+ w$ l3 T/ r6 n8 p, Z2 u+ U* n% K" f9 X" s& ?
通过Python的 Base64 模块将上述pdata数据转换成二进制gzip文件,最后可读取压缩包内的文件,该文件采用UTF-8编码,为HTML文件,但未标注扩展名。& e, s/ x/ s' }! _" |- S% w
文件内容为:
9 w: L3 q1 V/ Q6 F" w1 O- T' T7 a& y# p" j% {
<p:Entry>
3 _$ u5 w8 }8 O* A5 ~/ g/ P<p:Head>
) {$ b! Q v }9 j/ f( M8 F<p:HWD>fabulous</p:HWD>
" }. R" W8 q% u8 @2 `1 t3 X<p:HYPHENATION>fab‧u‧lous</p:HYPHENATION>8 {. Z, k8 u8 d( H: U6 R
<p:PronCodes>/ }- o& D* I" f' s/ u) E- k
<p:PRON>ˈfæbjləs</p:PRON>: \! T* W" K) @2 }. Z5 d
</p:PronCodes>/ y6 @+ h/ ]" }+ o7 H
<p:POS>adj</p:POS>
3 J$ T# E% j/ j& A</p:Head>
6 |( k) g, C0 x2 J) g% x% @<p:Sense id="u2fc098491a42200a.6e2b450a.115037ec1b8.-ad3">& W7 Z% R% W; g X' U7 {
<p:DEF>extremely good or impressive</p:DEF>
/ p0 Q& v; ^2 H! [5 o& Y<p:SYN>wonderful</p:SYN>
: x0 n; e* p. N; R<p:EXAMPLE id="p008-001204322.wav">You look fabulous!</p:EXAMPLE>
, [- e0 L0 U# G- n6 T<p:EXAMPLE id="p008-001204323.wav">a fabulous meal</p:EXAMPLE>
1 S ^9 K% J1 J9 _$ K" @; |<p:EXAMPLE id="p008-001823802.wav">The room has fabulous views across the lake.</p:EXAMPLE>
: A3 o$ W5 w. i: f% q- p6 _3 X2 u, C2 p</p:Sense>3 H6 F3 ?+ |# [# ]5 x
<p:Sense id="u2fc098491a42200a.6e2b450a.115037ec1b8.-acc">. {% V( T" \# D4 F- M
<p:GRAM>only before noun</p:GRAM>
6 U! @: V7 z4 Z" o/ U+ A. O& \<p:DEF>very large in amount or size</p:DEF>
/ L, Z) j( y% B2 P& O<p:SYN>huge</p:SYN>
a- H7 ~) H& f% w1 D; N6 H<p:EXAMPLE id="p008-001204328.wav">the Duke’s <p:COLLOINEXA>fabulous wealth</p:COLLOINEXA>
+ X9 s: r* E: p9 W/ A, y1 }</p:EXAMPLE>' ]3 t: K1 w& _! P
</p:Sense>
- ~5 X h O( b( |+ G6 K2 ?& n2 }1 f<p:Sense id="u2fc098491a42200a.6e2b450a.115037ec1b8.-ac5">: W- q' g% t2 k1 j9 Y
<p:GRAM>only before noun</p:GRAM> G# ^/ A- G6 `' J; D
<p:DEF>fabulous creatures, places etc are mentioned in traditional stories, but do not really exist</p:DEF>/ U5 b( ]2 ~. R. h/ y6 F" h
<p:RELATEDWD>fable</p:RELATEDWD>6 w# ^7 N* U' m! K- q; v/ D1 K# c
</p:Sense>% W$ v n8 m/ y! J
</p:Entry>
, R9 C5 T) h- B `" B, z8 Q$ Z8 J
与 ldoceonline.com 的内容似乎相差不多,但却是原汁原味的第五版内容,格式非常清晰。诸位若有兴趣,也可以拿来练练手。" E1 p' g! i9 _/ A( v. W* I1 f
- L+ e* s# l1 r9 y8 b2 S
: _2 q$ f8 ]8 |7 Z/ M. s2 L; U
9 |8 T& S: q# P* M. W |
评分
-
7
查看全部评分
-
本帖被以下淘专辑推荐:
- · 词典制作|主题: 217, 订阅: 40
- · 词典制作|主题: 111, 订阅: 24
- · MDX制作|主题: 46, 订阅: 17
|