吾爱破解 - 52pojie.cn

 找回密码
 注册[Register]

QQ登录

只需一步,快速开始

查看: 29693|回复: 34
收起左侧

[Windows] 完全解密淘宝电子书阅读器/swf合成PDF

  [复制链接]
wzy41718682 发表于 2013-9-6 23:58
本帖最后由 wzy41718682 于 2013-12-8 18:40 编辑

上一次意外的发现淘宝电子书任购的小漏洞,估计很多人都下载到了许多书O(∩_∩)O~,可是数据都是被加密的,而且是swf格式,下载的swf文件复制到其他电脑还打不开囧。前段时间在看雪大牛群有个网友很感兴趣,我俩就开始试图解密还原并生成PDF格式喽。
原任购漏洞已修复呵呵 QQ截图20130907002652.jpg
1.逆向TaobaoReaderSWF 分析加密解密
    用flash反编译程序将<淘宝电子书离线阅读器>目录下TaobaoReader.swf逆向出fla源码,fla源码是浅尘大哥给的,并提醒我此AIR源码是用Adobe Flash CS6编写的。浅尘提醒:Flash CS6安装在xp下有点小错误就会shutdown系统,要安装在win7下。
    在DB.as中记录着swf/xml密钥提取、db数据库加密解密代码
   
[AppleScript] 纯文本查看 复制代码
public static function getSwfKey():ByteArray  
        {
            swfKey = EncryptedLocalStore.getItem("swfKey");
            if (!swfKey){
                swfKey = createRandomKey();
                EncryptedLocalStore.setItem("swfKey", swfKey, false);
            };
            return (swfKey);
        }

        public static function getXmlKey():ByteArray
        {
            xmlKey = EncryptedLocalStore.getItem("xmlKey");
            if (!xmlKey){
                xmlKey = createRandomKey();
                EncryptedLocalStore.setItem("xmlKey", xmlKey, false);
            };
            return (xmlKey);
        }

  public static function openDB():Boolean
        {
            storedKey = EncryptedLocalStore.getItem("dbKey");
            if (!storedKey){
                storedKey = createRandomKey();
                EncryptedLocalStore.setItem("dbKey", storedKey, false);
            };
            //........
            file = File.applicationStorageDirectory.resolvePath("book.db");
            try {
                if (!file.exists){
                    if (!created){
                        con.open(file, SQLMode.CREATE, false, 0x0400, storedKey);
                        createDB();
                        created = true;
                        openDB();
                    }
            //........


在download\DownloadManager.as中记录着加密、解密代码
[AppleScript] 纯文本查看 复制代码
private static function encyptSwf(_arg1:ByteArray):ByteArray
        {
            var _local2:ByteArray = DB.getSwfKey();
            var _local3:int;
            while (_local3 < 0x0400) {
                _arg1[_local3] = (_arg1[_local3] ^ _local2[(_local3 % 16)]);
                _local3++;
            };
            return (_arg1);
        }

        private static function encyptXml(_arg1:ByteArray):ByteArray
        {
            var _local2:ByteArray = DB.getXmlKey();
            var _local3:int = _arg1.length;
            var _local4:int;
            while (_local4 < _local3) {
                _arg1[_local4] = (_arg1[_local4] ^ _local2[(_local4 % 16)]);
                _local4++;
            };
            return (_arg1);
        }


代码尽在眼前,xml/swf/db密钥是2组16位随机数,加密是异或操作,再异或一下便是解密呵呵。
db加密0x00~0x400, swf加密0x00~0x400, xml加密全部

解密:
[AppleScript] 纯文本查看 复制代码
i=0; Data=swf/db/xml原始数据; key[]=16位密钥;
while (i < strlen((Data)) 
{
    (Data[i] = (Data ^ key[i % 16]);
    i++;
};


值得一提的是EncryptedLocalStore和File.applicationStorageDirectory.resolvePath("book.db");http://help.adobe.com/zh_CN/air/reference/html/flash/data/EncryptedLocalStore.html
Adobe AIR 为安装在用户的计算机上的每个 AIR 应用程序提供了加密本地存储区 (ELS)。这样,您就可以以加密格式保存和检索存储在用户本地硬盘驱动器上的数据,使其他用户不能轻易地对这些数据进行解密。为每个 AIR 应用程序使用一个单独的加密本地存储区,且每个 AIR 应用程序为计算机上的每个用户帐户使用一个单独的加密本地存储区。

File.applicationStorageDirectory.resolvePath("book.db");这句是数据库存放位置,通过百度后得知位于C:\Documents and Settings\Administrator\ApplicationData\TaobaoReader\Local Store\book.db



2.编写解密程序
这样思路就很清晰了,只需要编写一个AIR程序伪装成TaobaoReader提取key程序就能搞定一切了。为了解密,只好从0开始学AIR编程,网上资料少的不能再少了..提供一个入门教程wenku.baidu.com/view/ad29651ba76e58fafab003d3.html 通过简单的学习,就写出了AIR key提取程序TaobaoReader.air,源码见附件。
运行TaobaoReader.air之前,必须先要通过淘宝安装程序卸载掉<淘宝电子书>,否则会有错误。点击卸载后并未真正卸载在安装目录依旧有<淘宝电子书>不影响使用。

安装后运行,如图 1.jpg
3个keys内都是16位16进制数,我的分别是
swfkeys: 347F2D01D954807AD1E20C8AA17C3B3F
xmlkeys: D480064DA6E5BC28BF50549F26C95746
dbkeys: AA3A924BC29A5AEB5A6E5619C1558C91  //db用的SQLite3存放, 有密钥也法通过普通数据库查看软件查看,因为一般的查看软件都只能输入0~9 A~z以及特殊字符,而这些16进制无法输入,想要查看必须自己写SQL查看软件或者用 OD bp 数据库查看软件的GetDlgItemText,从内存替换为这16位密钥O(∩_∩)O~
用vc6编写一个数据异或程序试验一下理论是否正确
复制swf 0x00~0x400 内容 输入密钥  一键异或 就看到了swf特征头部:CWS [CWS:已压缩swf FWS:未压缩swf] 把解密出来的数据覆盖掉加密部分,保存后确实能看了!

4.jpg
8.jpg

可是通过异或方法将xml解密出来后发现还是加密的。(⊙o⊙)…只不过有些类似能用文本阅读的样子,也没有继续看解密部分,直接猜测是ASCII+-算法。
2.jpg
通过ascii码表计算了30个左右找到规律
:-3 -5 -2 -3 -5 -2 -4 -2 -1 -5 -1 -1 -1 -4 -3 -3 -4 -1,这样就将整个xml解密完毕。

3.jpg
下面只需要读取xml列表按页数解密swf最后合成就大功告成了。
5.jpg
3.swf合成与转换成PDF格式
swfcombine
功能:将多个小swf合成为整个swf
格式:swfcombine -a -v xx.swf xx1.swf xx2.swf xxx.swf -o output.swf
swfcombine.exe 复制到system32下或者自己添加环境变量方便cmd调用

PDF-XChange
安装这款软件后,会增加一个虚拟打印机,将合成的swf文件用IE打开,右击打印选中PDF-XChange打印机,注意页面范围:选择全部!点击打印后,会输出PDF文件了。绝对高清不失真...这才叫PDF电子书哈

7.jpg 放大N倍 6.jpg
4.附加:另类获取xml密钥

即便没有xml密钥,也能解密xml列表。因为xml列表开头部分<?xml version="1.0" encoding="UTF-8"?>前16个字符是固定的,ASCII移动后也是固定的:16进制3F447A7071227A6773786A706F412534
用加密后的swf 0x00~0x16  ^ 3F447A7071227A6773786A706F412534 = 随机密钥
用加密后的swf 0x00~0x400 ^ 随机密钥 就能还原了O(∩_∩)O~。

代码写的比较烂。。不太希望被看到..可还是传上来了 只能说 达到目的了。。

例子

你可以去http://ebook.taobao.com 找一本积分免费购买电子书试试
因为每个用户 每台电脑 都有自己不同的密钥 我传上来我下载的文件 您也打不开哦。
特意做了个使用小录像 + AIR+VC6 3份源码程序打包

链接:链接: http://pan.baidu.com/s/1EdZa0 密码: pb5g

免费评分

参与人数 4热心值 +4 收起 理由
bestow + 1 欢迎分析讨论交流,[吾爱破解论坛]有你更精.
a-lon + 1 感谢发布原创作品,[吾爱破解论坛]因你更精.
xyetim + 1 感谢您的宝贵建议,我们会努力争取做得更好.
淡然出尘 + 1 感谢发布原创作品,[吾爱破解论坛]因你更精.

查看全部评分

发帖前要善用论坛搜索功能,那里可能会有你要找的答案或者已经有人发布过相同内容了,请勿重复发帖。

qq8533549 发表于 2013-9-7 00:07
好高端的样子。 表示看不懂!
淡然出尘 发表于 2013-9-7 00:07
地狱来者 不速之客
我是来支持你的

绝对支持加精 O(∩_∩)O
wnwn555 发表于 2013-9-7 00:07
 楼主| wzy41718682 发表于 2013-9-7 00:10
淡然出尘 发表于 2013-9-7 00:07
地狱来者 不速之客
我是来支持你的

睡觉、、
y376694236 发表于 2013-9-7 00:18
高端大气上档次
 楼主| wzy41718682 发表于 2013-9-7 00:25
y376694236 发表于 2013-9-7 00:18
高端大气上档次

(⊙o⊙)…额
maviscn 发表于 2013-9-7 00:25
没赶上漏洞
yesunqingyin 发表于 2013-9-7 00:34
大牛,完全看不懂的说
byte 发表于 2013-9-7 01:12
现在还可以任意购???
您需要登录后才可以回帖 登录 | 注册[Register]

本版积分规则

返回列表

RSS订阅|小黑屋|处罚记录|联系我们|吾爱破解 - LCG - LSG ( 京ICP备16042023号 | 京公网安备 11010502030087号 )

GMT+8, 2024-11-24 13:43

Powered by Discuz!

Copyright © 2001-2020, Tencent Cloud.

快速回复 返回顶部 返回列表