2017-03-21

折腾电子词典系列(3)探索BlueDict的爆破问题

折腾电子词典系列(3)探索BlueDict的爆破问题

探索对象

截至目前,Android系统的BlueDict只有5.9.6可以同时找到原版和爆破版,非常适合研究“蠻荒搜神”是如何进行爆破的。

下面是原版和爆破版的校验和,通过Google搜索校验和应该可以下载到这两个apk:

5.9.6爆破版校验和:
BlueDict Pro v5.9.6 noAD by 蛮荒.apk
大小: 1277806 字节
MD5: 3F153CDA16111DC6290FD09B16CF3B5D
SHA1: 8A9BD723DEC233A5008D86E0FE993F582EE21415
CRC32: 2A54E87E

5.9.6原版的校验和:
BlueDict.5.9.6.apk
大小: 1478374 字节
MD5: 27082DAFFF4BD90DD54EBDF7A1136F14
SHA1: 48B62DDC5D2DA0F94F8F25FB0132540B6FBA37D4
CRC32: E3D6D084

探索工具

AndroidKiller_v1.3.1(md5:E066CD3D82CA67ED2EBED9B352033BCA),这个需要用md5搜索下载。

JRE、JDK和BCompare,这三个软件到各自官网下载就行。

使用前需要安装JRE和JDK,并设置系统环境变量:

CLASSPATH
.;%JAVA_HOME%\lib\dt.jar;%JAVA_HOME%\lib\tools.jar;

JAVA_HOME
C:\Program Files (x86)\Java\jdk1.8.0_121

PATH添加(注意不要覆盖默认的PATH)
%JAVA_HOME%\bin;%JAVA_HOME%\jre\bin;

注:假设JDK版本为1.8.0;其他版本应修正上述环境变量,以保证正确引用。

探索过程

使用AndroidKiller_v1.3.1反编译原版和爆破版;
然后使用BCompare比较反编译得到的源代码。

主要差别如下:























下面仔细看看被爆破的文件,左侧为原版,右侧为爆破版:















不懂爆破,下面仅仅是猜测:

  1. 最关键的,右侧新增了assets\CERT.RSA文件,应该和爆掉程序签名验证及其他防爆破验证有关。
  2. 类似的,original\META-INF\下的三个文件被爆破,应该也是搞定验证用的。
  3. 左侧的com文件夹被移除了,应该全是广告插件。
  4. lib和main文件夹下有几个smali被爆破,应该是从源代码上爆掉防修改验证、广告加载和部分受限功能延迟。
下面是一些具体被修改的smali的源代码对比截图:
main\MyDict.smali,似乎是声明了一个常量,目标为assets/CERT.RSA,应该是爆破防修改用的。
main\MainActivity.smali部分差异截图,可见很多被移除的invoke-static,应该是爆掉了加载广告的函数或子程序;还新增了几个goto,应该用于跳过某些验证吧。
main\FloatActivity.smali部分截图,也是很多用于加载广告的函数调用被爆掉了。

















































其他几个smali的修改,应该是爆破受限功能强制延迟10秒的提示。比如:
main\be.smali截图,看到sleep,猜测是爆破了那个受限功能强制延迟10秒的提示信息。

2017-03-20

折腾电子词典系列(2)BlueDict恶心的广告方式

折腾电子词典系列(2)BlueDict恶心的广告方式


截至2017年3月,BlueDict可以称得上是Android系统上最好用的电子词典,不是之一,是唯一。

然而,BlueDict的广告方式实在是太恶心了。

Android软件含有广告很正常,但是像BlueDict这样的广告方式真的不多,让人感觉它不是为了广告而广告;似乎是为了用恶心的广告敦促用户去购买Pro版。BlueDict的广告显示方式与一般的Android软件大不相同,不仅仅是广告,而是通过广告给用户强大的视觉冲击和视觉压力……用过人相比对其广告方式心有余悸。

本来软件做的好,支持一下作者没什么,本人也在Google Play上买了一些软件的Pro版支持其作者;但是被这么恶心的广告催着去买Pro版,实在是感觉不爽。

而且BlueDict无法通过Google Play购买,购买后也不能像一般的安卓软件那样,只要用同一个Google帐号登录就可以无缝迁移;BlueDict Pro版是绑定手机串号的。

有广告,特别是不一般的广告方式,就必须防止小白进行逆向工程去除广告。

BlueDict加密很强悍,不是一般小白通过简单的反编译、去广告、重新编译就能搞定的。这玩意儿采用了特殊的签名及签名验证方法,不说去广告,仅仅是反编译,然后重新编译就会闪退,因为签名验证失败。

除了技术上采用了强悍的加密,BlueDict似乎还采取了更多的社会工程学方法来敦促用户购买Pro版,包括但不限于:

  • 猛烈打击爆破版的帖子和博客,可能通过软硬兼施等各种办法,使网站将已发布的爆破版换成原版;注意,是换成原版,而不是删除发布。但帖子中显示的依然是xx爆破版,从而让小白误以为下载的是xx爆破版。
  • 甚至,可能作者(团队)采取了混淆手段:他们自己以破解版、免费Pro版等为主题四处发布信息,实际发布的就是原版。
  • ……

无论上述社会工程学手段是否是原作者(团队)所为,都已经成为事实:通过搜索引擎检索BlueDict、蓝典,破解版,免费版Pro等关键字,获得的99.99%是垃圾信息。

既然原作者(团队)动用了社会工程学的“混淆战术”,那么就使用搜索引擎的时候,就需要一点点技巧了:不要搜索软件名称关键;取而代之的是直接搜索md5校验值。不管怎么混淆,校验和可以快速作为确认软件身份的依据。

科普一下BlueDict的版本信息:这玩意儿分为“免费含广告版”和“20元绑定手机串号注册版”。

下面是最近一些原版md5值供参考,如果您在任何网站下载到下述md5值的软件,就直接删了吧,这些都是原版,要么有恶心的广告,要么以开启后会提示输入与手机串号对应的注册码。


原版的校验和-免费恶心广告版

这是“免费版”的校验和,再说一遍,这些是原版,不是爆破版:
BlueDict.6.0.9免费版.apk
大小: 1900036 字节
MD5: C2E3C21EF326C9F1EBC25C202455857D
SHA1: 0D5A1D7F32A4B3DE6B2685EFAC27819F9CF13E94
CRC32: 968961A3

BlueDict.7.0免费版.apk
大小: 2596358 字节
MD5: 648042C9A67B10C7EAF6DC2750F21D76
SHA1: D86DA499B3AD215EDAD5D5760033170948628058
CRC32: 50B68BE0

BlueDict.7.0.2免费版.apk
大小: 3274516 字节
MD5: FBDBC7A58867981C5C845C5DE80CFE44
SHA1: D9AFCE5B324FA2BA6007B0AF09A1F3E3EACEE381
CRC32: A70AE11A

BlueDict.7.0.6免费版.apk
大小: 3275023 字节
MD5: 6877A6FD523CFE744FFB84B74F4DEBB6
SHA1: 6ADA852CEADE8BEA8EB91F88484289F22FB39C20
CRC32: 3C2D3D62

BlueDict.7.0.8免费版.apk
大小: 3141994 字节
MD5: 4C47A9F9B4BFC893DEF9A9CA94473F30
SHA1: 929766F143AF32A63CCC2F12B060F0ED9792091D
CRC32: DF058172

BlueDict.7.2.0免费版.apk
大小: 3176046 字节
修改时间: 2017年3月18日, 21:37:31
MD5: 906BE05ADB41A1E423D145940DCC96B1
SHA1: C7AE4C5BB71748A604F818640B29C447536D6D8A
CRC32: D2A1522D

BlueDict.7.2.6免费版.apk
大小: 3196325 字节
修改时间: 2017年3月18日, 21:37:59
MD5: 0CD886C0872760BAC11BC257294E9A8E
SHA1: DE1DE6FAE3E2F96034F393589F40151DC913168B
CRC32: 8FA57692

BlueDict.7.2.9.免费版.apk
大小: 3197202 字节
MD5: 8F6F08E7CACE2111EDF14D07528E988B
SHA1: 8A3F4934A4C1EC2EC95BAF41D2AC082DD1F5E2C0
CRC32: BD99A2A5

BlueDict.7.3.2.免费版.apk
大小: 3204252 字节
MD5: 18563270CCB51987B174169DE1801658
SHA1: DB4250016348AB00046636C1CE733EA2BEBFA380
CRC32: 6B5E73BD

BlueDict.7.3.6免费版.apk
大小: 2948065 字节
MD5: E231EAE80F5FC221C4B31D6D10FF7CCA
SHA1: 9C3FD72BE598DF1113253D8B4762D28311E3D296
CRC32: DD713E10

BlueDict.7.3.9免费版.apk
大小: 3022105 字节
MD5: 865523A5180DF385363CC89EBD0ECA6B
SHA1: E7921DAA78095197F43CA66602B77E1C4AC38003
CRC32: EB45E444

BlueDict.7.6.0免费版.apk
大小: 3990204 字节
MD5: 6F4DE2AD49F518640193C418AE707884
SHA1: D596BD7F3B60AD4680C8CEE0F0ACCCE11505739E
CRC32: 08108824

BlueDict7.6.1免费版.apk
大小: 3991311 字节
MD5: 97BDB1A6CD169291969B296EAA6670BA
SHA1: 147ACF7269E7E3D7BD417B369194894685E0181F
CRC32: 81363D37


原版的校验和-绑定手机串号注册版

这是“注册版”的校验和,再说一遍,这些是原版,不是爆破版,需要输入注册码的:
BlueDictPro.6.0.9注册版.apk
大小: 1400967 字节
MD5: 57036CBC1B297FFF59B1446FA2C178D8
SHA1: BF98767B02E42E6C20F0C5189E55CF44CD68F6FE
CRC32: 85DAE180

BlueDictPro.7.0注册版.apk
大小: 1922296 字节
MD5: EF9D3BC8FCBB7C2E240161A3CB915E37
SHA1: 91ED96B3EC95459F4CC8935599CFC1410402A9C2
CRC32: 94EE3D51

BlueDictPro.7.0.2注册版.apk
大小: 2600517 字节
MD5: 5005B764207B3DF479436263FC34190D
SHA1: 7BAD0AAC7D957A3EA6DED46ECEACB01F2E2D4E2E
CRC32: D361E4F7

BlueDictPro.7.0.6注册版.apk
大小: 2602620 字节
MD5: CE2956D0147F684C40C277D2B1EB7D14
SHA1: A7A6A6F1D50E8840413E8450846D44F71DFA267C
CRC32: 4E08E367

BlueDictPro.7.0.8注册版.apk
大小: 2602701 字节
MD5: 63557F2F8E2588262B3EDA885935C991
SHA1: F71F73FE3F918C299B5580F7B57026ABDC6D41B1
CRC32: 300D973B

BlueDictPro.7.2.0注册版.apk
大小: 2624589 字节
MD5: ECDC9CF7B3873C8F3480F5E3D675A388
SHA1: 3F5188DD7A66A179827FA96ED333DD2A4AB3DC6E
CRC32: ABD63D88

BlueDictPro.7.2.6注册版.apk
大小: 2647243 字节
MD5: A7618741A55D97E0118B0153B20E1CAE
SHA1: 95DD364F71FD440C4C9FBEB17D70339758F30A52
CRC32: D1261D08

BlueDictPro.7.2.9.注册版.apk
大小: 2647497 字节
MD5: 9BD8F77E48F47A22D2773A4EDA42DA77
SHA1: EA54C7129829205516F083238783212AA29A035B
CRC32: B0D2599D

BlueDictPro.7.3.2.注册版.apk
大小: 2650390 字节
MD5: 10865FCE7E2ACFFF4BF89D94E2F23889
SHA1: 759CC520E6163E178CF5D0ACDC3C1F02CE89820B
CRC32: 4FDAD985

BlueDictPro.7.3.6注册版.apk
大小: 2678246 字节
MD5: EBEC78A5428EDB9B7BC1DF353212F3C1
SHA1: 23FD70A9571377ED7FE351BF44DCD4121567AD78
CRC32: 2E740E1D

BlueDictPro.7.3.9注册版.apk
大小: 2685464 字节
MD5: 2359CBCE73C163EA5DF01484979AF2B1
SHA1: D6887D9811C1810D96919ED1C9A72B78A0EC0ECD
CRC32: 2676E979

BlueDictPro.7.6.0注册版.apk
大小: 3645674 字节
MD5: 7FC1B2F566860BD2544BABABE637EF49
SHA1: CDA1A8184501FC00AEA02B73F228EC740D0AF8DB
CRC32: DF98222A

BlueDictPro7.6.1注册版.apk
大小: 3646850 字节
MD5: 926A863ED828C1695ACA9E9BB4B04348
SHA1: BA41B18508FE92FBA7B32153A0F8871DCE5E55BE
CRC32: 3FCCAD7D


爆破版

难道就没人觉得BlueDict的广告方式太恶心吗?
难道就没人觉得BlueDict的注册方式太变态吗?
这么多大神就没人出手吗?
当然不是。

到目前为止,可以找到的爆破版有1.0、3.5和5.96。
1.0版和3.5版年代久远,没什么使用价值了,不多讨论。


“蠻荒搜神”看不下去了

5.96版是目前最新的爆破版,根据搜索引擎获得信息来看,其由“蠻荒搜神”爆破,不仅移除了广告,而且似乎是通过增加一个CERT.RSA的const到源代码中,解决了签名验证的问题,这个版本可以使用各种反编译工具进行反编译,然后重新编译,依然可以正常运行。

这个爆破版的名字通常叫做“BlueDict Pro v5.9.6 noAD by 蛮荒.apk”,但是正如前面所说,自然语言组成的软件包名字,在面对社会工程学的混淆上显然是不足以所为搜索关键字的,需要使用md5校验和进行搜索:
BlueDict Pro v5.9.6 noAD by 蛮荒.apk
大小: 1277806 字节
MD5: 3F153CDA16111DC6290FD09B16CF3B5D
SHA1: 8A9BD723DEC233A5008D86E0FE993F582EE21415
CRC32: 2A54E87E

如果有志于研究蠻荒搜神是如何爆破的,可以对比5.9.6的原版。5.96版是目前唯一可以同时找到原版和爆破版的版本,反编译之后就可以对比原版和爆破版的源代码了。这是5.96原版的校验和:
BlueDict.5.9.6.apk
大小: 1478374 字节
MD5: 27082DAFFF4BD90DD54EBDF7A1136F14
SHA1: 48B62DDC5D2DA0F94F8F25FB0132540B6FBA37D4
CRC32: E3D6D084

2017-03-14

折腾电子词典系列(1)几种常见的Windows、Andorid词典对比

折腾电子词典系列(1)几种常见的Windows、Andorid词典对比

Windows桌面系统最常见的就是Mdict了,其他金山、Lingoes、ABBYY等要么太大、要么需要联网、要么各种广告、要么词库难找。

Mdict的Windows版已经很不错了,词库丰富,绿色免安装,无需联网。没啥太多需要说的。

Android上的选择就多了,而且各有利弊。

就功能和性能来说,BlueDict最牛,各种完美。然而,这玩意儿的作者也是最牛的:一是广告投放方式不同寻常,完全不是Google的套路;二是反盗版不同寻常,各种变态加密;三是购买方式不同寻常,有自己单独的一套购买和验证方式。
BlueDict荟萃了各种不同寻常,让人又爱又恨。能不用还是别用BlueDict吧,太变态了。

其他GoldenDict、ColorDict、ABBYY等等大同小异,简单总结一下就是“不好用”。什么是好用?后续会逐个展开说明。

再剩下就是Mdict了,这个的作者应该是业余或兼职更新此软件,版本更新太慢了。但是,只要稍微动动手,可以算得上是Andorid上最好用的电子词典了。

首先,Mdict的编程似乎很基本,从Android Jellybean 4.1~4.3、Kitkat 4.4、Lollipop 5.0~5.1、Marshmallow 6.0,再到最新的Nougat 7.0,Mdict都可以正常运行,多词典联合查询性能正常、功能正常。

其次,Mdict的就是普通的mdx+mdd词库,网上很多,随便下载都能用,无论英汉、英英、汉英、汉语词典都有很多,无论是否完美,都足够普通人使用了。

第三,Mdict配合MoonReader很完美,虽然MoonReader的选项中没有列出Mdicit,实际上只要选择GoldenDict就行,因为他们都是同一类词典。

最后,Mdict完全没有广告,使用过程中也无需联网,清净、省心。

2017-02-21

Arch Linux升级后,中文字体渲染infinality彻底被删除

大约从2016年底或2017年初开始,infinality的官网和Arch的repo都不能访问了,也无法更新。

相关讨论也都被关闭了,没有给出任何原因或信息,不知道infinality发生了什么事。
但有一点是明确的:今后不会再有infinality这个东西了。

运行pacman -Syyuu命令更新Arch Linux后,启动时会出现下列错误:
Could not start kdeinit5 check your installation

实际上这是由于infinality被部分覆盖(移除?)导致的。

修复:
在错误界面按下 Ctrl+Alt+F2,登录,su获取root权限,然后运行下述命令:
pacman -S --asdeps freetype2 cairo fontconfig

这是用标准的fontconfig替代infinality。

然后reboot就可以正常登录了。

可能是因为之前的部分配置文件依然存在,显示效果看起来只是略微差了一点点,整体来说依然明显好于Arch Linux默认安装后的效果。

那么问题来了,如果是全新安装的Arch Linux该如优化字体渲染效果呢?只能等以后有时间再慢慢研究了。

最后,编辑pacman的配置文件,删除infinality相关的源:
nano /etc/pacman.conf

删除下面几行:
[infinality-bundle]
Server = http://bohoomil.com/repo/$arch

[infinality-bundle-multilib]
Server = http://bohoomil.com/repo/multilib/$arch

[infinality-bundle-fonts]
Server = http://bohoomil.com/repo/fonts






之后再运行pacman就不会提示找不到infinality源的错误了。