TA的每日心情 | 开心 2023-3-10 21:15 |
---|
签到天数: 1329 天 [LV.10]以坛为家III
状元
- 积分
- 22253
|
本帖最后由 enjoy了哦 于 2019-5-4 10:45 编辑
这是apk文件(来源:360手机助手):
http://zhushou.360.cn/detail/index/soft_id/431302
此应用排版精美,为官方出品,但它的词库做了一定的加密措施,不太好提取。
下面是提取过程。
首先以zip格式解压此apk文件,在解压目录的assets文件夹下,可看到该词典的核心内容:css样式表文件,字体文件,图片文件等。
02/07/2019 12:27 PM <DIR> css
02/07/2019 12:27 PM <DIR> fonts
02/07/2019 12:27 PM <DIR> html
02/07/2019 12:27 PM <DIR> images
11/17/2011 12:27 PM 1,024,000 pearson5.aa
11/17/2011 12:27 PM 1,024,000 pearson5.ab
11/17/2011 12:27 PM 1,024,000 pearson5.ac
11/17/2011 12:27 PM 1,024,000 pearson5.ad
11/17/2011 12:27 PM 1,024,000 pearson5.ae
11/17/2011 12:27 PM 1,024,000 pearson5.af
11/17/2011 12:27 PM 1,024,000 pearson5.ag
11/17/2011 12:27 PM 1,024,000 pearson5.ah
11/17/2011 12:27 PM 1,024,000 pearson5.ai
11/17/2011 12:27 PM 1,024,000 pearson5.aj
11/17/2011 12:27 PM 1,024,000 pearson5.ak
11/17/2011 12:27 PM 1,024,000 pearson5.al
11/17/2011 12:27 PM 1,024,000 pearson5.am
11/17/2011 12:27 PM 1,024,000 pearson5.an
11/17/2011 12:27 PM 1,024,000 pearson5.ao
11/17/2011 12:27 PM 1,024,000 pearson5.ap
11/17/2011 12:27 PM 1,024,000 pearson5.aq
11/17/2011 12:27 PM 1,024,000 pearson5.ar
11/17/2011 12:27 PM 1,024,000 pearson5.as
11/17/2011 12:27 PM 1,024,000 pearson5.at
11/17/2011 12:27 PM 1,024,000 pearson5.au
11/17/2011 12:27 PM 1,024,000 pearson5.av
11/17/2011 12:27 PM 1,024,000 pearson5.aw
11/17/2011 12:27 PM 1,024,000 pearson5.ax
11/17/2011 12:27 PM 1,024,000 pearson5.ay
11/17/2011 12:27 PM 1,024,000 pearson5.az
11/17/2011 12:27 PM 1,024,000 pearson5.ba
11/17/2011 12:27 PM 1,024,000 pearson5.bb
11/17/2011 12:27 PM 1,024,000 pearson5.bc
11/17/2011 12:27 PM 1,024,000 pearson5.bd
11/17/2011 12:27 PM 1,024,000 pearson5.be
11/17/2011 12:27 PM 1,024,000 pearson5.bf
11/17/2011 12:27 PM 974,848 pearson5.bg
其中pearson5.aa至pearson5.bg等33个文件总共加起来有30多兆,占据了apk文件的大部分内容,是词库文件。每一个文件都只有1000KB大小,是对词库文件做的处理,让它不容易被提取。
但是这个做法其实形同虚设。通过以十六进制观察pearson5.aa的文件头:
SQLite format 3...
可知是一个SQLite数据库文件。接着同样以十六进制观察其它的文件名为pearson5的文件,发现格式都非常工整,应该是将原数据库文件按1000KB一块一块地截取而成。
打开Windows的命令提示符,使用copy命令将这33个文件连缀起来,保存为dict.sqlite文件。
将dict.sqlite文件用SQLite程序打开,呈现出清晰的数据库结构,主要内容为entry_a, entry_b, entry_c, ..., entry_z这26张数据表。每张数据表存储了单词释义(pdata数据项)、发音文件名(usa和uk数据项)、词条(word数据项)、词性(pos数据项)等。
但是在这26张数据表中,单词释义(pdata数据项)不是明文存储的。以这个单词fabulous为例,其pdata数据项里面的内容为:
H4sIAAAAAAAAAK1UzW7aQBC+8xRTzg0YG1onopZQcJtIBBBBajmu7QEc1l5rfyD0xKnqK+QFkgfpqepb5AH6DN1dEwdUqUqrHizNzvd9M7Pf2O4WZ2Eu+TaodYuzCyRJGXzsB3MSKcqU6DbLs83PxhfhsDe9HA0N/rh7UPqpWAeoYY85y89ZgqI8TXT6x9f5t/vo5ufuC/1+Z0U2XbPRMX10HZDkxgI6tIxqvmvMBUKavKsrdx47p377tEXarus4pPEG3ajd0UGr1XG8txi3Ir9xQhKvbqX98H2At5JjhnQLC8YSYBzSrOAoRLpG08dwbJvZMNiwPEE+V9QAJmGA8FPvajwI7QSF4/gnjtNynbbnuo0NWdeDGVNAGVvBk4mvjHqv+nMFr6xAKilkSOhL5L7r+c5+gOkSgTOWwZKI50rrFDcCSMyZECA1hZIVNo5rN/fu/qvPcVz6/GHSuwpYrj2OcM44Qs5Ubqpb4GkTa+RbPQVf6C45kExzpNmHSD//tomlWuCLluCXHpgL9tUKH3d3AjT/fDQYjC6HWla927DR3sqlqXqA1v6zI52/caQaLeZIpNJv5WsoKIlRAMoYiNZlmMuU5ZgYzyQnSWqOhIKQjKdGECkJCdMNJOgqVLfE21TIQ0cn4aA3Dfvlh06tsc+po0s3q1/ELx84cjotBAAA
通过观察其他的pdata数据,这应该是通过Base64转换而来的,真是多此一举。将此数据通过Base64解密后,是一堆乱码:
��T�n�@��S�
Z'��Pp�HAj9���^k �ĩ�+����[���]T�J�,���}3����ga.�6�u��$I|�s)ʔ�6˳����7�
��{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��纍
Y׃S@[�����z��s��@*)dH�K����~���3�����J�7H̙ 5��6�k7�����q\��aһ
X�=�p�8B�Tn�[�ik�[=_�.9�Ls�هH?����Z������
ww4�|4�.�ZV�۰��ʥ�z����#��q�-�H��o�k((�Q���e�˔��$'Ij������F) �
$�*T���T�CG'�7
��N��ϩ�K7�_�/8r:-
这加密措施貌似做得不错。但是如果细心一点的话,也是能看出端倪的。
可以观察到,每个pdata数据都是以 H4sIAAAAAAAAA 这13个字符开头的。考虑到每个单词释义都是一个HTML文件,有统一的格式(所以所有单词释义的HTML文件的前几个字符一定是相同的),这就是一个突破口。这种情况说明了唯二的两种可能:
1. 这串数据根本就没有用什么加密方式,顶多是转换编码而已。所以每个pdata数据项的数据头都相同。
2. 如果使用了现代密码学中的私钥加密(流密码、块密码),明文与密文之间虽然是面目全非,但如果每次加密文件时都用同一个密钥初始化,则每个pdata数据项(也就是密文之间)的数据头也会相同。
通过反编译该APP的 smali 代码得到大部分 Java 源码(该应用没有进行代码混淆),没有发现 Cipher 以及 doFinal 等字样(这些是 Java 提供的用于加密解密的类或函数),初步可以确定是上述的第 1 种情况。
根据Base64的规则,取这13个字符中的前12个。但因为这前12个字符中后面8个都是A,代表6个二进制的0,没什么意义,因此真正有用的信息就是 H4sI 这4个字符。
将其进行Base64解密,所得十六进制表示为1F8B08。通过在 filesignatures.net 查找该文件头,可知它是一个gzip压缩文件,文件扩展名为*.gz。
通过Python的 Base64 模块将上述pdata数据转换成二进制gzip文件,最后可读取压缩包内的文件,该文件采用UTF-8编码,为HTML文件,但未标注扩展名。
文件内容为:
<p:Entry>
<p:Head>
<p:HWD>fabulous</p:HWD>
<p:HYPHENATION>fab‧u‧lous</p:HYPHENATION>
<p:PronCodes>
<p:PRON>ˈfæbjləs</p:PRON>
</p:PronCodes>
<p:POS>adj</p:POS>
</p:Head>
<p:Sense id="u2fc098491a42200a.6e2b450a.115037ec1b8.-ad3">
<p:DEF>extremely good or impressive</p:DEF>
<p:SYN>wonderful</p:SYN>
<p:EXAMPLE id="p008-001204322.wav">You look fabulous!</p:EXAMPLE>
<p:EXAMPLE id="p008-001204323.wav">a fabulous meal</p:EXAMPLE>
<p:EXAMPLE id="p008-001823802.wav">The room has fabulous views across the lake.</p:EXAMPLE>
</p:Sense>
<p:Sense id="u2fc098491a42200a.6e2b450a.115037ec1b8.-acc">
<p:GRAM>only before noun</p:GRAM>
<p:DEF>very large in amount or size</p:DEF>
<p:SYN>huge</p:SYN>
<p:EXAMPLE id="p008-001204328.wav">the Duke’s <p:COLLOINEXA>fabulous wealth</p:COLLOINEXA>
</p:EXAMPLE>
</p:Sense>
<p:Sense id="u2fc098491a42200a.6e2b450a.115037ec1b8.-ac5">
<p:GRAM>only before noun</p:GRAM>
<p:DEF>fabulous creatures, places etc are mentioned in traditional stories, but do not really exist</p:DEF>
<p:RELATEDWD>fable</p:RELATEDWD>
</p:Sense>
</p:Entry>
与 ldoceonline.com 的内容似乎相差不多,但却是原汁原味的第五版内容,格式非常清晰。诸位若有兴趣,也可以拿来练练手。
|
评分
-
7
查看全部评分
-
本帖被以下淘专辑推荐:
- · 词典制作|主题: 217, 订阅: 39
- · 词典制作|主题: 111, 订阅: 24
- · MDX制作|主题: 46, 订阅: 17
|