破解百词斩单词数据之旅

  

作为一位英语爱好者,百词斩是我每天都会用的一款应用,这款应用可以自测词汇量,并巩固你的单词量,确实是一款用心的产品。作为一名雅思7分选手,个人觉得里面的发音和例句,对于口语还是有很大的帮助,可以边听边读,做到碎片化的学习。总言而之,推荐大家都体验一下。

,,,,,,再完美的产品也会有瑕疵,我的词汇量在1.3万左右,大多数单词都能比较熟悉,直接斩掉,但也会有零星的生僻词,我会收藏起来,每天专门巩固这部分词汇。用了两年之久,收藏了八九百个单词了,对于我而言,这些单词属于恐慌区,需要重点强化的,所以希望针对收藏单词列表提供针对性的练习模式,具体是什么模式我就不多想了,专业的人肯定比我有经验。之前跟客服也反馈过一些小问题和建议,而且百词斩和我的办公地点都在同一个办公区,不管有没有走心,起码反馈还比较及时,所以我也跟客服提了这样一个优化收藏列表的需求,而且随着收藏单词的增多,严重怀疑收藏单词的查询性能是有隐患的。

,,,,,,下面画风要转变了,一年多过去了,我提的需求还是没着落,斩家千万不要轻视客户的需求啊,特别是一个程序员的需求,索性自己动手,丰衣足食。

,,,,,,本身百词斩提供离线数据包,而且是Android的应用,假如我能够获取单词的请求格式,同时能够解析每一个单词的音频,图片,例句,再能够解析各个数据库之间的结构关系。理论上讲,这样就能做出来一个PC版的百词斩,也就能满足我的个性化需求,而用户关系这些不太可能是二进制文件的形式,而Android上也就只有sqlite数据库了,这意味着这些数据应该不难解析。初步分析,可行。

,,,,,,首先找到这些数据都存在什么位置了,我对Android系统不熟悉,或许是我眼拙,找了很久都没找到存放路径,就这几个文件夹,怎么就没有baicizhan这样让人眼前一亮的文件夹呢。仿佛当头一棒,看来敌人没这么蠢,靠人肉技术是不行滴。出师不利,只好另辟蹊径。百词斩提供离线数据包,如果可以监控手机的网络请求,那就能知道他下载的是什么内容了。查了一下,在小提琴手→选项中开启代理,如下图。然后重启提琴手。

,

破解百词斩单词数据之旅

,

,,,,,,在手机端(保证是同一个网段),长摁无线信号源,修改网络,显示高级,代理设置为手动选择所提琴手在电脑的无线IP、端口为8888,和小提琴手里面的端口号一致。

,,,,,,一切就绪,点击下载单词包,是的,我们得到了它!一条条的请求都在招潮中获取。请求消息如下图:

,

破解百词斩单词数据之旅

,

,,,,,,如上图,不难猜测,zpk应该就是每一个单词的数据内容,原来单词是保存在文件里面而非数据库中,文件则按照一定的规则来命名。好吧,顺藤摸瓜,看看zpk里面到底是什么玩意。下载下来一个zpk,然后在无以伦比下面以16进制方式打开,上阕如下:

,

破解百词斩单词数据之旅

,

,,,,,,好吧,你应该和我一样不想看下去了,唯一不同的是我能继续忍,继续看到中间,发现看到了里面的单词、音标,例句等ASCII码的内容,终于有点头绪了。再继续向下看,右下角思路是我们人类的语言啊,没错,ASCII码如下:

,

破解百词斩单词数据之旅

,

,,,,,,可以看的到,这算是里面的数据清单,包括zpk文件对应的数据和顺序,说明这个数据包括一个jpg,一个aac或者mp3的音频,其中的。是他们的分隔符,对应的是ASCII码的0 x00。也就是说,右下角的这一段相当于整个二进制的一个清单,而且也是按照清单中的顺序有前到后排列的。我们先解析这部分,就可以知道该zpk文件中有哪些部分,比如png, jpg, mp3或aac等;每一个文件都有自己的标示头和尾,这样就可以把该二进制文件分解成对应格式的内容,一个zpk就这样迎刃而解。

,,,,,,当然如上都只是猜测而已,还是需要验证,另外对比来看看是否有没有遗漏的字段。比如jpg文件的开头是FF D8的标识,结尾则是FF D9,我们手动把这部分的二进制字段截取出来,保存为jpg格式,果然不出所料。同样,里面还有png图片和aac的音频。都可以如此获取,最麻烦的是mp3,我对这个格式不熟悉,发现它没有固定的头尾标识,也算一个美中不足吧,导致我写的zpkParser解析代码有特殊处理的地方,而且结果还是有瑕疵(主要是mp3文件在第一或最后位置)。

破解百词斩单词数据之旅