TA的每日心情 | 开心 2023-3-10 21:15 |
---|
签到天数: 1329 天 [LV.10]以坛为家III
|
本帖最后由 enjoy了哦 于 2019-5-4 10:45 编辑 1 x) z& s* M$ r" U( m4 Y
& `( |# B+ g- M; X1 I
这是apk文件(来源:360手机助手):# t3 X* b: L7 l$ o7 M1 e/ S1 |9 T6 [2 [/ g
http://zhushou.360.cn/detail/index/soft_id/431302
% J* n+ P v1 m* T
o8 N$ D9 v/ \4 t* c; l此应用排版精美,为官方出品,但它的词库做了一定的加密措施,不太好提取。$ O4 ?5 j b$ m1 E- Q
下面是提取过程。0 x0 X6 Q5 ~9 ^4 f
: { _" a" Y7 X首先以zip格式解压此apk文件,在解压目录的assets文件夹下,可看到该词典的核心内容:css样式表文件,字体文件,图片文件等。5 O" D$ } E0 b+ F% Q. d
1 ^, e, f" {8 g8 z
9 L. h# J2 m+ Z# B' G6 f9 J, y
02/07/2019 12:27 PM <DIR> css) q# @! l4 O. W. {8 B
02/07/2019 12:27 PM <DIR> fonts- k# ]& M. | Z! ~7 v& ?
02/07/2019 12:27 PM <DIR> html
+ r7 l/ L/ G2 f* F3 _02/07/2019 12:27 PM <DIR> images
% J' {, w J& O1 M: ?" V5 y: [11/17/2011 12:27 PM 1,024,000 pearson5.aa( q, U, `) {$ U
11/17/2011 12:27 PM 1,024,000 pearson5.ab" U. H) K! i, z" X2 D. d
11/17/2011 12:27 PM 1,024,000 pearson5.ac
+ [$ i4 F% h3 x7 t11/17/2011 12:27 PM 1,024,000 pearson5.ad; P1 {0 q A0 U) W, C
11/17/2011 12:27 PM 1,024,000 pearson5.ae
8 U' Z; U" K+ d% Y' @8 F11/17/2011 12:27 PM 1,024,000 pearson5.af4 ]5 c) X0 x) l% X) x5 F8 |
11/17/2011 12:27 PM 1,024,000 pearson5.ag# A s; K. Q+ m
11/17/2011 12:27 PM 1,024,000 pearson5.ah
U) B) T$ z. c( j11/17/2011 12:27 PM 1,024,000 pearson5.ai
* j8 [% v- e f11/17/2011 12:27 PM 1,024,000 pearson5.aj6 F Q: h9 W$ P# l& ~$ M
11/17/2011 12:27 PM 1,024,000 pearson5.ak
5 R1 j% k) S6 I5 l+ Y$ ]% @11/17/2011 12:27 PM 1,024,000 pearson5.al
! Z- Z1 d5 y b* B% }2 c$ x& Y11/17/2011 12:27 PM 1,024,000 pearson5.am
) E& B. s9 _7 n. J, h11/17/2011 12:27 PM 1,024,000 pearson5.an
! e1 t' C) D$ r& L11/17/2011 12:27 PM 1,024,000 pearson5.ao: S' ^) w C% W) [: K* t5 o) t
11/17/2011 12:27 PM 1,024,000 pearson5.ap
* K( D; V6 ], h s11/17/2011 12:27 PM 1,024,000 pearson5.aq
; n0 y$ V2 z( q11/17/2011 12:27 PM 1,024,000 pearson5.ar
" E! l% q: R5 q( N( {11/17/2011 12:27 PM 1,024,000 pearson5.as; H& M T0 q4 T' F
11/17/2011 12:27 PM 1,024,000 pearson5.at
n5 n% j: R o2 v! ^- [6 c0 @11/17/2011 12:27 PM 1,024,000 pearson5.au
- s R2 s7 m& E' m) c11/17/2011 12:27 PM 1,024,000 pearson5.av
# t. n) o% n, ~+ b3 a4 p11/17/2011 12:27 PM 1,024,000 pearson5.aw9 y" F0 @& w' b q1 H' h0 S
11/17/2011 12:27 PM 1,024,000 pearson5.ax
b. N/ v! W3 P% U( \& C9 K11/17/2011 12:27 PM 1,024,000 pearson5.ay
1 p9 x2 s" _6 W; }; ?! \11/17/2011 12:27 PM 1,024,000 pearson5.az
2 q- }2 }) K- k! {11/17/2011 12:27 PM 1,024,000 pearson5.ba. K4 a0 b! K7 G8 K: {/ b, w" ~
11/17/2011 12:27 PM 1,024,000 pearson5.bb5 g' U0 x: f' P/ r: I$ u3 U- s w
11/17/2011 12:27 PM 1,024,000 pearson5.bc* ]4 J2 i$ {) a4 y0 M3 P& Q
11/17/2011 12:27 PM 1,024,000 pearson5.bd
: s3 m4 {9 F* g4 V( k$ [1 {% L11/17/2011 12:27 PM 1,024,000 pearson5.be
5 W3 P3 k- I# J; x ^11/17/2011 12:27 PM 1,024,000 pearson5.bf' o7 A- I8 Z# @9 m. ?3 o6 H
11/17/2011 12:27 PM 974,848 pearson5.bg# l6 @( @. T4 z) }- u, X
1 e! O P M: j3 ?# m2 q
其中pearson5.aa至pearson5.bg等33个文件总共加起来有30多兆,占据了apk文件的大部分内容,是词库文件。每一个文件都只有1000KB大小,是对词库文件做的处理,让它不容易被提取。
- E+ V7 X% n, Y- N1 C
0 n& U: ? @ J9 _+ {5 V但是这个做法其实形同虚设。通过以十六进制观察pearson5.aa的文件头:% F* m) B4 q7 L* b& @
" E4 y* v6 P1 JSQLite format 3..., \' H% r: o4 e8 p6 Q: B
4 A- m1 s3 _% M可知是一个SQLite数据库文件。接着同样以十六进制观察其它的文件名为pearson5的文件,发现格式都非常工整,应该是将原数据库文件按1000KB一块一块地截取而成。: K/ h9 O* C& ^9 Q
5 U0 R/ ^0 r2 {3 ?$ G; E- _$ }打开Windows的命令提示符,使用copy命令将这33个文件连缀起来,保存为dict.sqlite文件。
; J0 |) Z i' W7 ^3 j, G6 h+ D3 }% n- J0 Y0 w5 u, L
将dict.sqlite文件用SQLite程序打开,呈现出清晰的数据库结构,主要内容为entry_a, entry_b, entry_c, ..., entry_z这26张数据表。每张数据表存储了单词释义(pdata数据项)、发音文件名(usa和uk数据项)、词条(word数据项)、词性(pos数据项)等。8 O: i; B( g) w4 {/ R, g1 [! b$ Q
4 v: F5 s: ~0 q. T0 u7 z
但是在这26张数据表中,单词释义(pdata数据项)不是明文存储的。以这个单词fabulous为例,其pdata数据项里面的内容为:2 K% ?3 i* Z# N) I( r0 D
" p+ @8 z: f4 \: `9 w; _* v, I# ZH4sIAAAAAAAAAK1UzW7aQBC+8xRTzg0YG1onopZQcJtIBBBBajmu7QEc1l5rfyD0xKnqK+QFkgfpqepb5AH6DN1dEwdUqUqrHizNzvd9M7Pf2O4WZ2Eu+TaodYuzCyRJGXzsB3MSKcqU6DbLs83PxhfhsDe9HA0N/rh7UPqpWAeoYY85y89ZgqI8TXT6x9f5t/vo5ufuC/1+Z0U2XbPRMX10HZDkxgI6tIxqvmvMBUKavKsrdx47p377tEXarus4pPEG3ajd0UGr1XG8txi3Ir9xQhKvbqX98H2At5JjhnQLC8YSYBzSrOAoRLpG08dwbJvZMNiwPEE+V9QAJmGA8FPvajwI7QSF4/gnjtNynbbnuo0NWdeDGVNAGVvBk4mvjHqv+nMFr6xAKilkSOhL5L7r+c5+gOkSgTOWwZKI50rrFDcCSMyZECA1hZIVNo5rN/fu/qvPcVz6/GHSuwpYrj2OcM44Qs5Ubqpb4GkTa+RbPQVf6C45kExzpNmHSD//tomlWuCLluCXHpgL9tUKH3d3AjT/fDQYjC6HWla927DR3sqlqXqA1v6zI52/caQaLeZIpNJv5WsoKIlRAMoYiNZlmMuU5ZgYzyQnSWqOhIKQjKdGECkJCdMNJOgqVLfE21TIQ0cn4aA3Dfvlh06tsc+po0s3q1/ELx84cjotBAAA! W/ R* X3 v, B; _- Z
* Z/ L) u& I% {# g# N/ p
通过观察其他的pdata数据,这应该是通过Base64转换而来的,真是多此一举。将此数据通过Base64解密后,是一堆乱码:
7 @9 L- u/ z) q4 n# u- B
( y+ t( U _; ?4 U h+ g4 v a7 M8 L/ i( |; _1 s/ Z
��T�n�@��S�6 d' [- E' s" u* `
Z'��Pp�HAj9���^k �ĩ�+����[���]T�J�,���}3����ga.�6�u��$I|�s)ʔ�6˳����7�
; a( h% j) ^6 D& ]- J" I5 i T9 J' W( L* c# h! Y
��{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 W7 M' K) {+ [6 V9 F1 R0 ]Y׃S@[�����z��s��@*)dH�K����~���3�����J�7H̙ 5��6�k7�����q\��aһ I3 ]7 A2 u' I6 P ?5 o
X�=�p�8B�Tn�[�ik�[=_�.9�Ls�هH?����Z������$ ]) B! ~& o7 k
ww4�|4�.�ZV�۰��ʥ�z����#��q�-�H��o�k((�Q���e�˔��$'Ij������F) �7 s# M! z d4 s
$�*T���T�CG'�7% I9 @2 q# ]1 K4 n5 e8 N
��N��ϩ�K7�_�/8r:-
( y7 T$ M7 S( ^% H8 a5 s' ]$ b) j0 t. v
2 N3 p$ r4 b" T, C7 N, k1 |这加密措施貌似做得不错。但是如果细心一点的话,也是能看出端倪的。
* ^3 x* i ~3 T# W5 N/ o' u0 |6 U
7 H7 a% h! Q5 n可以观察到,每个pdata数据都是以 H4sIAAAAAAAAA 这13个字符开头的。考虑到每个单词释义都是一个HTML文件,有统一的格式(所以所有单词释义的HTML文件的前几个字符一定是相同的),这就是一个突破口。这种情况说明了唯二的两种可能:* T- f3 P# W6 y% F, ^5 m7 u
1. 这串数据根本就没有用什么加密方式,顶多是转换编码而已。所以每个pdata数据项的数据头都相同。
; J! v8 j8 o% G) U2. 如果使用了现代密码学中的私钥加密(流密码、块密码),明文与密文之间虽然是面目全非,但如果每次加密文件时都用同一个密钥初始化,则每个pdata数据项(也就是密文之间)的数据头也会相同。
6 y- n- ]3 k! a9 I8 f7 Z$ j0 w& \ U
通过反编译该APP的 smali 代码得到大部分 Java 源码(该应用没有进行代码混淆),没有发现 Cipher 以及 doFinal 等字样(这些是 Java 提供的用于加密解密的类或函数),初步可以确定是上述的第 1 种情况。0 Q8 q* L* e& v0 o$ t R0 H
. ~& C1 _& M z T9 e; U0 j
根据Base64的规则,取这13个字符中的前12个。但因为这前12个字符中后面8个都是A,代表6个二进制的0,没什么意义,因此真正有用的信息就是 H4sI 这4个字符。4 ^4 m& s% l% M, @. W0 c
' V5 Q% p. g' y, o
将其进行Base64解密,所得十六进制表示为1F8B08。通过在 filesignatures.net 查找该文件头,可知它是一个gzip压缩文件,文件扩展名为*.gz。
7 c7 `2 d1 n0 b0 m5 d1 v" o( n9 i1 x# s, u
通过Python的 Base64 模块将上述pdata数据转换成二进制gzip文件,最后可读取压缩包内的文件,该文件采用UTF-8编码,为HTML文件,但未标注扩展名。7 u/ h4 }! K2 c o
文件内容为:
7 N6 I( V j7 y
1 o9 {, x. O* x6 p( Z" l: f<p:Entry>( }8 p% W/ I: i+ K" ]/ j( P
<p:Head>8 n, B. ?; ?. n0 K3 B. T* {/ E% O% R
<p:HWD>fabulous</p:HWD>0 h! e, x5 z! I g
<p:HYPHENATION>fab‧u‧lous</p:HYPHENATION>
1 Y- K, T3 M$ j<p:PronCodes>
3 t+ Q7 a% M4 x7 Y$ s7 e<p:PRON>ˈfæbjləs</p:PRON>
* t* N0 K4 M4 R$ |' ~</p:PronCodes>
! Z/ Y4 u" J P b4 R<p:POS>adj</p:POS>" Z- O8 R$ I2 X, y D
</p:Head>/ p1 j; Z, v e; h
<p:Sense id="u2fc098491a42200a.6e2b450a.115037ec1b8.-ad3">: ^: @, v U0 l
<p:DEF>extremely good or impressive</p:DEF>" z: d0 ~% n' j/ f
<p:SYN>wonderful</p:SYN>0 b0 o& B0 C0 s+ v' N* H
<p:EXAMPLE id="p008-001204322.wav">You look fabulous!</p:EXAMPLE>
8 ? y: S6 w9 V* H( n<p:EXAMPLE id="p008-001204323.wav">a fabulous meal</p:EXAMPLE>
; b; P6 o/ S# A9 W* Q<p:EXAMPLE id="p008-001823802.wav">The room has fabulous views across the lake.</p:EXAMPLE>/ N x3 f! P5 t; k) x! e. p0 W
</p:Sense>4 m" B( I* i* I/ }" B
<p:Sense id="u2fc098491a42200a.6e2b450a.115037ec1b8.-acc">5 G! y: v, e% T
<p:GRAM>only before noun</p:GRAM>
) h. }8 U" h+ F( P }) f, @<p:DEF>very large in amount or size</p:DEF>
2 q' B4 t5 [! [1 c<p:SYN>huge</p:SYN>
1 A& H" J; S% ?* [0 g<p:EXAMPLE id="p008-001204328.wav">the Duke’s <p:COLLOINEXA>fabulous wealth</p:COLLOINEXA>6 v, P; N3 [$ O$ E
</p:EXAMPLE>
" d0 F1 A! d& k* a: s+ k</p:Sense>, P! W$ W) b3 ]+ P$ J
<p:Sense id="u2fc098491a42200a.6e2b450a.115037ec1b8.-ac5">) i: ]- }" }7 j" V' ~ w
<p:GRAM>only before noun</p:GRAM>
% H0 l- Y) t! [; t+ w* A! p6 u<p:DEF>fabulous creatures, places etc are mentioned in traditional stories, but do not really exist</p:DEF>! Z; d7 Z9 Z+ i! E3 P
<p:RELATEDWD>fable</p:RELATEDWD>4 K8 @! w' C- {4 n ?8 v, r
</p:Sense>" w3 _+ ], g7 t' I
</p:Entry>
: {) f7 C- W4 [: n
8 K5 L# \# _4 M7 L与 ldoceonline.com 的内容似乎相差不多,但却是原汁原味的第五版内容,格式非常清晰。诸位若有兴趣,也可以拿来练练手。% G: O- V7 Z* z4 [+ v! f
7 V4 C( U7 ]% ]2 z
% M' u/ g" ?( I5 b; C* _& ]
8 Z. n+ g) J' |, n$ K9 ^, F6 f& h |
评分
-
7
查看全部评分
-
本帖被以下淘专辑推荐:
- · 词典制作|主题: 217, 订阅: 40
- · 词典制作|主题: 111, 订阅: 24
- · MDX制作|主题: 46, 订阅: 17
|