在这里购买电子书:http://product.china-pub.com/ebook4894212
但是需要专用的阅读器才能阅读,叫爱阅读。
阅读器下载:http://ebook.bbbvip.com/soft/aireader.rar
一开始想把他下载的电子书弄出来,换个阅读器看,他这个阅读器太丑了。通过Procmon看到了下载的电子书都存在了C:\Users\username\AppData\Roaming\aireader\Local Store中,发现epub中的Text文件都被加密了。那就去逆程序看看吧。
通过对主程序的逆向,发现程序加载了一个叫做mReader.swf的文件,反编译出AS代码,通读一下as代码,发现主要的处理都在src\com\evan\mreader\这里。其中有关加密的部分都在src\com\evan\mreader\util\KeyGenerator.as中,其中有一些加解密相关的函数,把这些函数拿去全局搜索,找调用方,发现了几处敏感的地方。
在src\com\evan\mreader\util\EpubParser.as中发现如下代码:
猜测这个函数是解密epub中Text的内容,调用的是decryptFileStr函数,密钥使用的realfkey。但是在KeyGenerator.as中并没有看到realfkey的值。只有pkey和fkey,并不知道是干啥用的。
全局搜索realfkey,寻找赋值处理。在src\mReader.mxml文件中找到了赋值处理。
这样我们就可以得到密钥了,加密方式也从KeyGenerator.as中得知是AES-ECB方式。可以写出解密Text的脚本了。解密所借用的库是AS3Crypto,原本他这个阅读器也调用了,直接复制代码来写就行了。
解密脚本:
通过这个脚本把解密完的内容丢回epub的包里替换掉原来的密文,就可以通过其他的epub阅读器打开了。
到这里已经目标达成了,但是手贱抓了一下包,又结合代码分析了一下,发现了几个神奇的接口。
先是找到了下载时候的请求接口Getepub.aspx,param是被加密了,去找找怎么加密的。
http://yans.hztraining.com/bbyf_api/Getepub.aspx?param=xxxxxx&client=air
通过全局搜索,在src\com\evan\mreader\service\DownloadService.as中找到了如下代码:
yoooo,key不就是fkey么,还有个loc1暂时不管,后面调用encrypt函数,密钥就是pkey,也有了。现在去找找这个loc1是啥,在靠上一点的代码找到了:
通过抓包,找到了一个有效的param,解密掉,发现loc1.download是类似于11111872_v.epub这样的内容,继续分析数据包,发现了
http://yans.hztraining.com/bbyf_api/GetBookInfo.aspx?bookinfoid=xxxxx 这个接口,可以拿到类似11111872_v.epub的值。也就是可以任意下载了。
我们用新出的代码审计这本书做测试吧。
在爱阅读里搜索这本书,然后抓包发现:
http://www.bbbvip.com/bbyf_api/GetBookInfo.aspx?bookinfoid=11116882
得到了这本书的真正需要的字段是11116838_v.epub
然后写个脚本对其AES加密,得到param参数:
加密脚本:
拼凑出URL为:http://yans.hztraining.com/bbyf_api/Getepub.aspx?param=84320cf3fc6896288655029b0208235dbf003cc5fff98c45dbee23000cd9ef6532c07663beb19b87942acc8544f201cb0db13177632da3ae21030795be09ed8e831c28deb70acc766b234ed16e196fcf0e80a9d85f05c30a9e81aca19357f41f&client=air
得到下载链接为http://yans.hztraining.com/exg/r2/11116838/f4362c17-7646-4b8f-a253-031d2ed5bb32.epub
下载好以后我们打开看看,通过目录可以看出是全本,不是试读版。
看看每章的内容发现是被加密了。
我们用一开始整理出的脚本去解密看看。然后丢到阅读器里去看看。
任意电子书免费大畅读~再也不用等打折咯~