TA的每日心情 | 开心 2023-3-10 21:15 |
---|
签到天数: 1329 天 [LV.10]以坛为家III
|
本帖最后由 enjoy了哦 于 2019-5-4 10:45 编辑
" T3 l X8 g* }3 O9 v% v1 g9 F! }+ F" f6 u# I3 h! E. \
这是apk文件(来源:360手机助手):
6 c3 V, y( d& z" d9 ihttp://zhushou.360.cn/detail/index/soft_id/431302* ^& D( H* f, x' g, g( g* N4 K3 l
& w4 {/ i4 Y# n( G% F此应用排版精美,为官方出品,但它的词库做了一定的加密措施,不太好提取。! f7 M5 \" O: h& C3 S' W
下面是提取过程。
% h; h3 s9 z/ Z) H0 x# U
& t' s! k8 X! f6 r. E) D2 @! d首先以zip格式解压此apk文件,在解压目录的assets文件夹下,可看到该词典的核心内容:css样式表文件,字体文件,图片文件等。7 B5 l6 Q7 X2 ^" J
6 r/ I- A% x5 o4 [% N* n b: B
0 l! @0 S( s: l+ y1 e( E02/07/2019 12:27 PM <DIR> css* n8 P% Z$ ~. ~' \" }/ E
02/07/2019 12:27 PM <DIR> fonts) G7 ~3 ]1 V7 q* u
02/07/2019 12:27 PM <DIR> html1 M; T0 X4 C7 G0 H5 E
02/07/2019 12:27 PM <DIR> images+ h: |% [% n6 ]* l+ R& d. h
11/17/2011 12:27 PM 1,024,000 pearson5.aa
* a4 b; |4 _) a0 b; R11/17/2011 12:27 PM 1,024,000 pearson5.ab- l( c' L% K# c& w/ `
11/17/2011 12:27 PM 1,024,000 pearson5.ac
+ e" ~: {* ]: }" W- N" n# w11/17/2011 12:27 PM 1,024,000 pearson5.ad
/ Y4 X0 @4 m! K' Q4 ?2 ?. P11/17/2011 12:27 PM 1,024,000 pearson5.ae) N7 {$ g; }. c% c
11/17/2011 12:27 PM 1,024,000 pearson5.af
* U+ p: ^$ {) q$ I- y5 ~11/17/2011 12:27 PM 1,024,000 pearson5.ag
1 _- H3 s5 m' ?6 N# E11/17/2011 12:27 PM 1,024,000 pearson5.ah! o* H! H" e# i( Z/ w
11/17/2011 12:27 PM 1,024,000 pearson5.ai
1 \# }8 S6 C9 ?8 T* B11/17/2011 12:27 PM 1,024,000 pearson5.aj, ^& G% B/ q+ f' E4 X0 {$ `, l
11/17/2011 12:27 PM 1,024,000 pearson5.ak
$ W. v* d7 Z" n0 W+ S11/17/2011 12:27 PM 1,024,000 pearson5.al- g2 f8 ]5 D5 ^' V$ i
11/17/2011 12:27 PM 1,024,000 pearson5.am
i( d+ B7 `5 `/ `: F' J( a L11/17/2011 12:27 PM 1,024,000 pearson5.an
# z3 v" y" j" Q0 C+ t11/17/2011 12:27 PM 1,024,000 pearson5.ao. |+ v1 U$ H! x; u% W! p0 e
11/17/2011 12:27 PM 1,024,000 pearson5.ap/ J o7 N' B# M4 f2 l
11/17/2011 12:27 PM 1,024,000 pearson5.aq
- A" @/ q# |0 k D11/17/2011 12:27 PM 1,024,000 pearson5.ar+ j) e- t2 T( n4 X4 r
11/17/2011 12:27 PM 1,024,000 pearson5.as% q: ]3 X9 Y/ B3 F, m7 `* F
11/17/2011 12:27 PM 1,024,000 pearson5.at
: i K6 x( `4 h' m! C6 }# a11/17/2011 12:27 PM 1,024,000 pearson5.au; T5 M R9 o+ T! W7 ?
11/17/2011 12:27 PM 1,024,000 pearson5.av
, [: S% B( t. G; r1 D; w: m# |11/17/2011 12:27 PM 1,024,000 pearson5.aw: I$ `. \( [9 \; H# d. X" {
11/17/2011 12:27 PM 1,024,000 pearson5.ax2 z3 @" \. |* ?* H
11/17/2011 12:27 PM 1,024,000 pearson5.ay
5 }$ _5 c! u0 [1 U! A11/17/2011 12:27 PM 1,024,000 pearson5.az
' O: T f# [2 c* d E! n2 s% g- s11/17/2011 12:27 PM 1,024,000 pearson5.ba
7 r+ s) v( _) V* q" p- s/ C11/17/2011 12:27 PM 1,024,000 pearson5.bb. a4 L/ T8 M' t
11/17/2011 12:27 PM 1,024,000 pearson5.bc2 @6 ?% d6 H" @3 U0 I6 z( I/ e3 I0 _
11/17/2011 12:27 PM 1,024,000 pearson5.bd) W' z- W& t- ^/ G5 H
11/17/2011 12:27 PM 1,024,000 pearson5.be0 @) I+ X( O+ H& H% _3 ~% W
11/17/2011 12:27 PM 1,024,000 pearson5.bf
7 i. \9 f4 }0 v6 G8 m11/17/2011 12:27 PM 974,848 pearson5.bg0 Q$ ?: J' t4 r( l4 V5 J
- z$ ]9 L7 ?, F5 k* B; |
其中pearson5.aa至pearson5.bg等33个文件总共加起来有30多兆,占据了apk文件的大部分内容,是词库文件。每一个文件都只有1000KB大小,是对词库文件做的处理,让它不容易被提取。
! a1 M0 }9 k3 ^+ a% H: \
$ _$ Z* M5 L1 j. ]但是这个做法其实形同虚设。通过以十六进制观察pearson5.aa的文件头:
$ n4 v. K9 @7 V5 k
% Q. [6 X% s. G* V* m' PSQLite format 3...
) i: @' u- K! Z$ b& A& p& J! E( ]5 s0 X* V2 J! b- A* I8 S
可知是一个SQLite数据库文件。接着同样以十六进制观察其它的文件名为pearson5的文件,发现格式都非常工整,应该是将原数据库文件按1000KB一块一块地截取而成。) z# p/ P; E. a) y7 N& ~' p
0 N( j! u# q* s9 E打开Windows的命令提示符,使用copy命令将这33个文件连缀起来,保存为dict.sqlite文件。1 s" h: H4 \+ J7 ^4 @
/ a9 C2 t2 V; F! U2 Y
将dict.sqlite文件用SQLite程序打开,呈现出清晰的数据库结构,主要内容为entry_a, entry_b, entry_c, ..., entry_z这26张数据表。每张数据表存储了单词释义(pdata数据项)、发音文件名(usa和uk数据项)、词条(word数据项)、词性(pos数据项)等。
, q, ]6 w$ G; q. P6 V/ c. T3 Q$ Y$ r+ y$ m0 J4 v
但是在这26张数据表中,单词释义(pdata数据项)不是明文存储的。以这个单词fabulous为例,其pdata数据项里面的内容为:3 }* h% q! O+ N# a3 t- p$ K) E) L
* r4 Y+ `; p/ f5 K
H4sIAAAAAAAAAK1UzW7aQBC+8xRTzg0YG1onopZQcJtIBBBBajmu7QEc1l5rfyD0xKnqK+QFkgfpqepb5AH6DN1dEwdUqUqrHizNzvd9M7Pf2O4WZ2Eu+TaodYuzCyRJGXzsB3MSKcqU6DbLs83PxhfhsDe9HA0N/rh7UPqpWAeoYY85y89ZgqI8TXT6x9f5t/vo5ufuC/1+Z0U2XbPRMX10HZDkxgI6tIxqvmvMBUKavKsrdx47p377tEXarus4pPEG3ajd0UGr1XG8txi3Ir9xQhKvbqX98H2At5JjhnQLC8YSYBzSrOAoRLpG08dwbJvZMNiwPEE+V9QAJmGA8FPvajwI7QSF4/gnjtNynbbnuo0NWdeDGVNAGVvBk4mvjHqv+nMFr6xAKilkSOhL5L7r+c5+gOkSgTOWwZKI50rrFDcCSMyZECA1hZIVNo5rN/fu/qvPcVz6/GHSuwpYrj2OcM44Qs5Ubqpb4GkTa+RbPQVf6C45kExzpNmHSD//tomlWuCLluCXHpgL9tUKH3d3AjT/fDQYjC6HWla927DR3sqlqXqA1v6zI52/caQaLeZIpNJv5WsoKIlRAMoYiNZlmMuU5ZgYzyQnSWqOhIKQjKdGECkJCdMNJOgqVLfE21TIQ0cn4aA3Dfvlh06tsc+po0s3q1/ELx84cjotBAAA: ^! w# G5 C7 m: P
% F" A0 H8 U* s, @* m通过观察其他的pdata数据,这应该是通过Base64转换而来的,真是多此一举。将此数据通过Base64解密后,是一堆乱码:& J d- H; b4 Z& w' Z) l
; @" Z! l/ v2 n e- ?, o) U. X) E, ]+ c, T, f
��T�n�@��S�: t7 G. \) Y, }7 b9 r0 t
Z'��Pp�HAj9���^k �ĩ�+����[�� �]T�J�,���}3����ga.�6�u��$I|�s)ʔ�6˳����7�
; y8 q# |2 b4 J
6 r s! L" G8 `, g( ~2 }$ n��{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��纍% O$ ?" F- E! {, B& C7 T M' e
Y׃S@[�����z��s��@*)dH�K����~���3�����J�7H̙ 5��6�k7�����q\��aһ
. c6 K" P& B+ `1 h5 RX�=�p�8B�Tn�[�ik�[=_�.9�Ls�هH?����Z������
' R2 J( O% \( K7 sww4�|4�.�ZV�۰��ʥ�z����#��q�-�H��o�k((�Q���e�˔��$'Ij������F) �
. ^2 p1 \; o0 B* g" ?$�*T���T�CG'�79 Y% v7 G( p. e8 ?4 n
��N��ϩ�K7�_�/8r:-+ ]3 T! [3 h/ N0 Q9 r
" t2 m# Q& U% b9 q( \
; B+ c& G5 N# O$ w: G! e3 Y: d& `
这加密措施貌似做得不错。但是如果细心一点的话,也是能看出端倪的。
" {3 }+ Q9 _# E& O8 R3 Z1 Z L# ?5 ]. E( e
可以观察到,每个pdata数据都是以 H4sIAAAAAAAAA 这13个字符开头的。考虑到每个单词释义都是一个HTML文件,有统一的格式(所以所有单词释义的HTML文件的前几个字符一定是相同的),这就是一个突破口。这种情况说明了唯二的两种可能:+ _, s5 g+ A% d5 [
1. 这串数据根本就没有用什么加密方式,顶多是转换编码而已。所以每个pdata数据项的数据头都相同。
# i, s1 e4 x4 i$ E$ y9 f2. 如果使用了现代密码学中的私钥加密(流密码、块密码),明文与密文之间虽然是面目全非,但如果每次加密文件时都用同一个密钥初始化,则每个pdata数据项(也就是密文之间)的数据头也会相同。9 {9 u1 A) B: v) q- Z" W9 U
0 M! z+ M0 W3 j0 p8 l0 L
通过反编译该APP的 smali 代码得到大部分 Java 源码(该应用没有进行代码混淆),没有发现 Cipher 以及 doFinal 等字样(这些是 Java 提供的用于加密解密的类或函数),初步可以确定是上述的第 1 种情况。
# N. t: J6 h* K; [
! n* G, i7 }& |! D: s1 g" [" h+ J. Q/ v根据Base64的规则,取这13个字符中的前12个。但因为这前12个字符中后面8个都是A,代表6个二进制的0,没什么意义,因此真正有用的信息就是 H4sI 这4个字符。3 H* {+ J) g! b
: l% u, ?0 x. h8 \
将其进行Base64解密,所得十六进制表示为1F8B08。通过在 filesignatures.net 查找该文件头,可知它是一个gzip压缩文件,文件扩展名为*.gz。. @/ R/ P E- b( Y4 W
0 H! L" n, Z5 J7 J通过Python的 Base64 模块将上述pdata数据转换成二进制gzip文件,最后可读取压缩包内的文件,该文件采用UTF-8编码,为HTML文件,但未标注扩展名。' O# |3 H c# M0 q# [6 L
文件内容为:
% a1 t# l- s* q: B' j6 F6 k" t, Z- C; `$ u: |7 m) }# {
<p:Entry>
/ e% P; d, i9 K5 B; |<p:Head>
( s0 v3 _3 {% e8 O4 z9 O<p:HWD>fabulous</p:HWD>
& F9 t! X. X+ E B; m: @<p:HYPHENATION>fab‧u‧lous</p:HYPHENATION>. C D. s6 L: O- a7 m
<p:PronCodes>
- i' C9 _0 i- \! }; D) P<p:PRON>ˈfæbjləs</p:PRON>
O6 P# J6 ]7 H' L3 C# B9 J3 m, ?</p:PronCodes>- s- v1 V( m8 [6 I! Y% Q
<p:POS>adj</p:POS>
5 A9 g, Z1 f' ~+ D% b# k</p:Head>) R5 L" ]+ @4 V7 z1 L
<p:Sense id="u2fc098491a42200a.6e2b450a.115037ec1b8.-ad3">. }; v# Z, S, P* o: U9 o; o$ |6 X" v
<p:DEF>extremely good or impressive</p:DEF>
3 M- x; ^% a: [% j& }<p:SYN>wonderful</p:SYN>
5 M) i& J" G1 B# D4 ^2 L: K<p:EXAMPLE id="p008-001204322.wav">You look fabulous!</p:EXAMPLE>
) E+ G* S: n |: K<p:EXAMPLE id="p008-001204323.wav">a fabulous meal</p:EXAMPLE>- e1 y( _& F( D8 _
<p:EXAMPLE id="p008-001823802.wav">The room has fabulous views across the lake.</p:EXAMPLE>
* S4 }' S5 s2 H</p:Sense>
& Q! H Q9 I9 B( p1 l- Z8 f2 _<p:Sense id="u2fc098491a42200a.6e2b450a.115037ec1b8.-acc">
. Y- r ~8 F8 E7 m0 { I<p:GRAM>only before noun</p:GRAM>& \- D. L' J2 C( e5 a
<p:DEF>very large in amount or size</p:DEF>
Y8 ]# P) y. j0 a" V" v<p:SYN>huge</p:SYN>
- p( [3 ~% }6 i9 ]) |! R* a+ k<p:EXAMPLE id="p008-001204328.wav">the Duke’s <p:COLLOINEXA>fabulous wealth</p:COLLOINEXA>" C% }6 B; U! X; J7 l
</p:EXAMPLE>9 K) k8 U, a! m1 `
</p:Sense>8 E7 i( m' u, Y9 ]
<p:Sense id="u2fc098491a42200a.6e2b450a.115037ec1b8.-ac5"># i8 Y1 T: @) r1 x$ O9 e2 v
<p:GRAM>only before noun</p:GRAM>
7 O1 X# \. c1 I4 p5 X: x* [# U; S<p:DEF>fabulous creatures, places etc are mentioned in traditional stories, but do not really exist</p:DEF>, L7 m i& y6 Y" [2 s6 P
<p:RELATEDWD>fable</p:RELATEDWD>" e- w$ F' }. d. k; c
</p:Sense>$ v' w8 J2 P3 M" A
</p:Entry>) ^$ Q- g( c, L
0 v1 Y# Z3 q- ^$ n7 Z Z
与 ldoceonline.com 的内容似乎相差不多,但却是原汁原味的第五版内容,格式非常清晰。诸位若有兴趣,也可以拿来练练手。. J+ X K5 u @" n& @* {
" }- `8 p1 {4 O( {& ]
$ N2 t) t$ W5 _+ |$ E% |: n
' x- `( ?, |+ ?, a/ j
|
评分
-
7
查看全部评分
-
本帖被以下淘专辑推荐:
- · 词典制作|主题: 217, 订阅: 40
- · 词典制作|主题: 111, 订阅: 24
- · MDX制作|主题: 46, 订阅: 17
|