TA的每日心情 | 开心 2023-3-10 21:15 |
---|
签到天数: 1329 天 [LV.10]以坛为家III
|
本帖最后由 enjoy了哦 于 2019-5-4 10:45 编辑 6 h1 I8 W: x K- s5 g9 ]$ }; d- `5 J
3 G. v' W8 B. b/ k
这是apk文件(来源:360手机助手):$ z3 [& `) U# L; h
http://zhushou.360.cn/detail/index/soft_id/431302
N8 H9 }+ h2 l+ K( l: q# v
) t# H2 t* Z+ ?0 j3 G此应用排版精美,为官方出品,但它的词库做了一定的加密措施,不太好提取。. w; q6 J3 Q9 Z
下面是提取过程。8 j2 P" n# D/ [3 ?; ]4 E
. _ Y, g' h- ^/ T首先以zip格式解压此apk文件,在解压目录的assets文件夹下,可看到该词典的核心内容:css样式表文件,字体文件,图片文件等。. O- V3 X* v8 j- U& w3 H. E* N
# O# c. B/ ^5 g0 x' X4 X
9 V# d7 `2 I M# m' e# t. `; Q. w
02/07/2019 12:27 PM <DIR> css% N2 ~$ P; ?% B
02/07/2019 12:27 PM <DIR> fonts/ `) r! `; ~0 Q1 v# M
02/07/2019 12:27 PM <DIR> html( a% w3 i: _1 v# g' j
02/07/2019 12:27 PM <DIR> images
9 e6 c. u# Y: X) O5 [( F8 L11/17/2011 12:27 PM 1,024,000 pearson5.aa7 r2 ^$ }( H g
11/17/2011 12:27 PM 1,024,000 pearson5.ab
$ X. s+ H- w, j- h' T11/17/2011 12:27 PM 1,024,000 pearson5.ac8 U* |* p7 V; u& {6 `) T7 Q
11/17/2011 12:27 PM 1,024,000 pearson5.ad0 i; g2 V& U# b7 p2 p) t
11/17/2011 12:27 PM 1,024,000 pearson5.ae
9 R# e9 y' l5 f8 O3 R2 e2 ^9 ?) ?6 H11/17/2011 12:27 PM 1,024,000 pearson5.af( I" d2 F5 P, k
11/17/2011 12:27 PM 1,024,000 pearson5.ag7 r4 H' e: N9 I4 }" K( ~& S, z
11/17/2011 12:27 PM 1,024,000 pearson5.ah9 h- |2 O' v/ ?
11/17/2011 12:27 PM 1,024,000 pearson5.ai
2 l& l& S+ `! Z( o11/17/2011 12:27 PM 1,024,000 pearson5.aj+ k+ q6 M0 L2 U! p$ }$ o
11/17/2011 12:27 PM 1,024,000 pearson5.ak& A( Z# t/ F$ U! V3 k T
11/17/2011 12:27 PM 1,024,000 pearson5.al4 X7 H/ Q$ c) Y9 \4 z
11/17/2011 12:27 PM 1,024,000 pearson5.am
; F4 `7 D G( q1 X11/17/2011 12:27 PM 1,024,000 pearson5.an5 L, B0 t0 k/ J d* L/ W
11/17/2011 12:27 PM 1,024,000 pearson5.ao+ s9 C/ A; {) q) I) m; h8 m. r& n5 q
11/17/2011 12:27 PM 1,024,000 pearson5.ap
7 c- ]* p: L1 N% i; c11/17/2011 12:27 PM 1,024,000 pearson5.aq; h' p+ _. o1 i9 ]# z: M2 `
11/17/2011 12:27 PM 1,024,000 pearson5.ar) y( U; W, r7 S% f$ W
11/17/2011 12:27 PM 1,024,000 pearson5.as1 N. ~1 u& J0 U( k
11/17/2011 12:27 PM 1,024,000 pearson5.at
! I1 U! ~# |+ p2 t2 s8 W11/17/2011 12:27 PM 1,024,000 pearson5.au
7 O H! n* b! ^/ V9 T# P8 {/ J11/17/2011 12:27 PM 1,024,000 pearson5.av$ [$ ~- j% I! r2 y! Z N9 ^
11/17/2011 12:27 PM 1,024,000 pearson5.aw
- F4 g# f4 B& L0 V: H9 y% X, R11/17/2011 12:27 PM 1,024,000 pearson5.ax
$ b( ~+ [6 i5 \/ B3 @$ O11/17/2011 12:27 PM 1,024,000 pearson5.ay5 k* e2 y5 E9 I- D5 f' T9 ~3 L
11/17/2011 12:27 PM 1,024,000 pearson5.az
) u# `( z8 E" Q9 \+ @$ J2 s' P11/17/2011 12:27 PM 1,024,000 pearson5.ba/ p9 M4 I' g, ]; Q }- l' a7 v) y
11/17/2011 12:27 PM 1,024,000 pearson5.bb7 G+ j4 c3 f! e; A
11/17/2011 12:27 PM 1,024,000 pearson5.bc
a1 M6 y0 T: p9 m2 _6 S0 }% f11/17/2011 12:27 PM 1,024,000 pearson5.bd
5 E: A, ~3 j: T, i. U/ Q) @11/17/2011 12:27 PM 1,024,000 pearson5.be$ O5 X- A& V( V; s" R# E
11/17/2011 12:27 PM 1,024,000 pearson5.bf
9 J0 z/ M3 v. k# n( \% d2 U11/17/2011 12:27 PM 974,848 pearson5.bg
" R4 b& r0 H/ J; V6 L6 w* w: `4 z0 ]4 n1 U
其中pearson5.aa至pearson5.bg等33个文件总共加起来有30多兆,占据了apk文件的大部分内容,是词库文件。每一个文件都只有1000KB大小,是对词库文件做的处理,让它不容易被提取。
, [" v$ K8 ?& L* n( S' u0 P4 `6 P4 x0 [) N: r1 D2 a3 \# r
但是这个做法其实形同虚设。通过以十六进制观察pearson5.aa的文件头:: b+ g4 ?+ j5 p
" N; R- r/ O4 z* a2 E9 V. }SQLite format 3..., }% B. ]- v6 _4 w3 C, Z: g
, \# j% h3 L/ v+ s% \! b
可知是一个SQLite数据库文件。接着同样以十六进制观察其它的文件名为pearson5的文件,发现格式都非常工整,应该是将原数据库文件按1000KB一块一块地截取而成。
( c1 v, S/ V0 G+ V
' v5 o% [2 u' p1 }3 N2 O. E打开Windows的命令提示符,使用copy命令将这33个文件连缀起来,保存为dict.sqlite文件。
9 h! {2 i2 v/ F: w6 |7 }
8 c7 J D, e; U, W% a% c) E0 p将dict.sqlite文件用SQLite程序打开,呈现出清晰的数据库结构,主要内容为entry_a, entry_b, entry_c, ..., entry_z这26张数据表。每张数据表存储了单词释义(pdata数据项)、发音文件名(usa和uk数据项)、词条(word数据项)、词性(pos数据项)等。. ?- I- q4 B9 }$ ~
- E. B1 m7 n! P1 c
但是在这26张数据表中,单词释义(pdata数据项)不是明文存储的。以这个单词fabulous为例,其pdata数据项里面的内容为:
& \6 S, c9 _+ |; p& G2 q1 |2 P+ d9 ~
H4sIAAAAAAAAAK1UzW7aQBC+8xRTzg0YG1onopZQcJtIBBBBajmu7QEc1l5rfyD0xKnqK+QFkgfpqepb5AH6DN1dEwdUqUqrHizNzvd9M7Pf2O4WZ2Eu+TaodYuzCyRJGXzsB3MSKcqU6DbLs83PxhfhsDe9HA0N/rh7UPqpWAeoYY85y89ZgqI8TXT6x9f5t/vo5ufuC/1+Z0U2XbPRMX10HZDkxgI6tIxqvmvMBUKavKsrdx47p377tEXarus4pPEG3ajd0UGr1XG8txi3Ir9xQhKvbqX98H2At5JjhnQLC8YSYBzSrOAoRLpG08dwbJvZMNiwPEE+V9QAJmGA8FPvajwI7QSF4/gnjtNynbbnuo0NWdeDGVNAGVvBk4mvjHqv+nMFr6xAKilkSOhL5L7r+c5+gOkSgTOWwZKI50rrFDcCSMyZECA1hZIVNo5rN/fu/qvPcVz6/GHSuwpYrj2OcM44Qs5Ubqpb4GkTa+RbPQVf6C45kExzpNmHSD//tomlWuCLluCXHpgL9tUKH3d3AjT/fDQYjC6HWla927DR3sqlqXqA1v6zI52/caQaLeZIpNJv5WsoKIlRAMoYiNZlmMuU5ZgYzyQnSWqOhIKQjKdGECkJCdMNJOgqVLfE21TIQ0cn4aA3Dfvlh06tsc+po0s3q1/ELx84cjotBAAA% ^! S( D5 X" q' t. @ J! ~
1 d0 d% [) v/ x# A9 d6 D通过观察其他的pdata数据,这应该是通过Base64转换而来的,真是多此一举。将此数据通过Base64解密后,是一堆乱码:3 h' w* {* E I
& [$ N" }& x8 o0 n) o, F1 b
5 N( U: L9 a" O# X+ ?0 {" C" o. Q
��T�n�@��S�3 H& ^" w, t( K/ g
Z'��Pp�HAj9���^k �ĩ�+����[�� �]T�J�,���}3����ga.�6�u��$I|�s)ʔ�6˳����7�
# U# U! w P* P) z4 m& _4 @. ]* N; s% [* G! L# b
��{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��纍
3 e8 C* K7 L( N$ d. M2 I2 nY׃S@[�����z��s��@*)dH�K����~���3�����J�7H̙ 5��6�k7�����q\��aһ' Z. G5 S5 @7 h; [* s' p$ ?
X�=�p�8B�Tn�[�ik�[=_�.9�Ls�هH?����Z������
) p4 N4 T9 U% u; z/ J( G2 U% l, a1 \7 cww4�|4�.�ZV�۰��ʥ�z����#��q�-�H��o�k((�Q���e�˔��$'Ij������F) �6 c' L# Z+ a1 w' `
$�*T���T�CG'�78 ^$ G1 z1 ]$ o$ \# ~8 R
��N��ϩ�K7�_�/8r:-$ W" |2 Y9 U1 d$ t
8 e7 m) f5 H% |1 @( O" t. x
1 P6 d2 C9 t X) P
这加密措施貌似做得不错。但是如果细心一点的话,也是能看出端倪的。
" m3 b ^, T, \" ~9 _, ]2 u9 ?+ h' L S8 L: [, h7 K$ j$ a
可以观察到,每个pdata数据都是以 H4sIAAAAAAAAA 这13个字符开头的。考虑到每个单词释义都是一个HTML文件,有统一的格式(所以所有单词释义的HTML文件的前几个字符一定是相同的),这就是一个突破口。这种情况说明了唯二的两种可能:* c+ i. `7 O0 _# k* n0 B# D
1. 这串数据根本就没有用什么加密方式,顶多是转换编码而已。所以每个pdata数据项的数据头都相同。
6 Z& N C5 T/ I3 t2. 如果使用了现代密码学中的私钥加密(流密码、块密码),明文与密文之间虽然是面目全非,但如果每次加密文件时都用同一个密钥初始化,则每个pdata数据项(也就是密文之间)的数据头也会相同。
" O' Z7 G2 J: _( ~; C1 X7 y `' o, J) y3 y4 ]
通过反编译该APP的 smali 代码得到大部分 Java 源码(该应用没有进行代码混淆),没有发现 Cipher 以及 doFinal 等字样(这些是 Java 提供的用于加密解密的类或函数),初步可以确定是上述的第 1 种情况。
5 ~0 R5 y$ r' k& n4 W# S
4 O& x. J: B i. y9 u根据Base64的规则,取这13个字符中的前12个。但因为这前12个字符中后面8个都是A,代表6个二进制的0,没什么意义,因此真正有用的信息就是 H4sI 这4个字符。
/ B5 @; c. D7 u" H/ N) t2 t8 z, n3 O4 Z* @
将其进行Base64解密,所得十六进制表示为1F8B08。通过在 filesignatures.net 查找该文件头,可知它是一个gzip压缩文件,文件扩展名为*.gz。' T7 t ~. m& a1 \
) n. t& p; X6 y) E& z通过Python的 Base64 模块将上述pdata数据转换成二进制gzip文件,最后可读取压缩包内的文件,该文件采用UTF-8编码,为HTML文件,但未标注扩展名。
8 _% b) C! y; J% r. e文件内容为:+ v( R) M# j8 i; n0 y
/ T. a; w$ ]' d5 U
<p:Entry>8 g% G- O }5 V" @+ H
<p:Head>6 U0 p" D: h! o* ]0 g! i
<p:HWD>fabulous</p:HWD>; H) v2 I: n. u; s
<p:HYPHENATION>fab‧u‧lous</p:HYPHENATION>
2 s2 q& k* x8 |4 o% a( P<p:PronCodes>% v5 D. @% _! d. G" k: I
<p:PRON>ˈfæbjləs</p:PRON>* ~2 }4 f" Y9 I: ]! t/ Q u
</p:PronCodes> ~- V! U" Z! ~7 Y
<p:POS>adj</p:POS>
0 r" P9 q# x6 I# Q! G* k) o. [: T</p:Head>
1 ^+ v0 {9 g" t Y$ v& j* V<p:Sense id="u2fc098491a42200a.6e2b450a.115037ec1b8.-ad3">4 z; A8 X( l1 }, g5 ?/ X
<p:DEF>extremely good or impressive</p:DEF>1 d; Z9 S! {4 \8 I1 V3 @
<p:SYN>wonderful</p:SYN>
* k" ]( _/ w/ a0 E/ W5 W' ` B<p:EXAMPLE id="p008-001204322.wav">You look fabulous!</p:EXAMPLE>& R' r6 n& z3 l
<p:EXAMPLE id="p008-001204323.wav">a fabulous meal</p:EXAMPLE>
3 }+ ^3 s* ^# |$ w L, K4 p<p:EXAMPLE id="p008-001823802.wav">The room has fabulous views across the lake.</p:EXAMPLE>
, [ G- O" r. z3 T</p:Sense>
# T7 `# i" q% x2 M( O<p:Sense id="u2fc098491a42200a.6e2b450a.115037ec1b8.-acc">
5 e) Q" o5 e# i2 D( ?; w<p:GRAM>only before noun</p:GRAM>
: M! |! w6 Q- n& w( L<p:DEF>very large in amount or size</p:DEF>' k9 Z: K# X# I
<p:SYN>huge</p:SYN>, E! n) y& Y# d. U& \. Q8 D
<p:EXAMPLE id="p008-001204328.wav">the Duke’s <p:COLLOINEXA>fabulous wealth</p:COLLOINEXA>( t* j7 T8 W( t6 Q, H3 t
</p:EXAMPLE>
9 c* I0 O0 r' w</p:Sense>
Z. I4 U5 _# g8 z* o6 h& X<p:Sense id="u2fc098491a42200a.6e2b450a.115037ec1b8.-ac5">
- _( n' y2 I# j' F( P. t5 y3 n<p:GRAM>only before noun</p:GRAM>
- M, o9 i+ ~, |7 y( N- S4 g<p:DEF>fabulous creatures, places etc are mentioned in traditional stories, but do not really exist</p:DEF>3 H' z; q7 ?6 }$ n7 _
<p:RELATEDWD>fable</p:RELATEDWD>) I" u- y8 s, f+ R$ T; `
</p:Sense>
# h5 V5 Y+ S2 K. y; E' C</p:Entry>
+ U( Q" o' M: i
: X9 Y. _: \$ q0 p与 ldoceonline.com 的内容似乎相差不多,但却是原汁原味的第五版内容,格式非常清晰。诸位若有兴趣,也可以拿来练练手。2 G7 U8 j2 g% N" K! R# o" y+ D
( @" I: [3 L) C: J' l, }3 g' r- } u, w
# A5 }4 e3 [5 K1 L |
评分
-
7
查看全部评分
-
本帖被以下淘专辑推荐:
- · 词典制作|主题: 217, 订阅: 40
- · 词典制作|主题: 111, 订阅: 24
- · MDX制作|主题: 46, 订阅: 17
|