分享:破解"当当"DRM版权保护的电子书

sfqfirst sfqfirst 墨衍会员 · AI 创作全网分发 墨衍智能分发 通过墨衍一键同步至各平台 可同步平台 CSDN微信公众号微博知乎掘金百家号博客园抖音小红书 你的文章也可以这样分发 墨衍会员 ¥399起/年,写一次发全网 我也要 + 加入社区
转帖:http://www.kanxue.com/showthread.php?t=147903
这里缺图。
PC客户端破解
方法
1. 先分析一下网络通讯。用fiddle2分析HTTP通讯。
用的是flash。进入阅读页面后先下载以一个reader.swf,这是它的阅读程序。每次翻页,都会去get:
/datasvr/permissionAuth.do?bookUid=<xxx>&pageNo=<page_no>,
返回约100k,这肯定是它的数据了。HTTP header显示
Content-Type: application/x-shockwave-flash;charset=utf-8
把cookie存下dangdang.cookie。用这个cookie和wget,向这个地址发请求,存成page_no的swf文件,打不开。问题在哪儿?
2. 看看16进制:



异常的文件头!有强烈暗示意义的, "==",这是base64编码的数据,是解密密钥?居然把密钥和数据放在一起?不会吧?
3. 用的什么算法呢?能不能把swf反汇编一下?
使用万能的google,找到一个Sothink SWF Decompiler,可以使用。好,锤子有了,看看reader.swf是不是钉子。

用Swf decompiler尝试反汇编一下reader.swf。没做代码混淆,是破解者最最喜欢的裸奔方式。全裸还是半裸?搜索“decrypt”试试。Class name中显示三个结果,其中两个是:
ARC4, DupLoader






好。全裸,而且一屏就全露了。
128位的RC4算法。从page_no.swf的第二个字节开始读取24字节的数据,base64解出来后是16字节。24/4*3=18,所以出现两个"=="。
4. 解密:密钥、算法和密文都有了,解密神马的都是浮云。万能的python来了:

import base64
from Crypto.Cipher import ARC4 as cipher
import sys

name = sys.argv[1]

f = open(name, "rb")

f.seek(1)
key = base64.b64decode(f.read(24))

dec = cipher.new(key)
buf = f.read()
print len(buf)
buf = dec.decrypt(buf)

f.close()

fswf = open(name + ".swf", "wb")
fswf.write(buf)
fswf.close();
5. OK啦:

6. 再写一个swf应用,把单页的组合成一本书来离线阅读。再也不用担心在线离线的蛋疼问题了。
Android客户端破解
1. 下载apk, 用dex2jar提去出jar,然后用DJ Java Decompiler反汇编。没做代码混淆,好,把代码导入Eclipse中,开搞。
2. 查"drm", "decrypt"关键字, 找到com.dangdang.reader.modules.drm。算法是AES的。编码的哥们居然把测试的代码也放在万能的main()里面了。兄弟?你不做单元测试吗?就拿这么可怜的一点数据凑活着跑一遍就完了?这是数据加工啊,兄弟。万一你算法搞得不对,而且只对某些数据出错怎么办? 还有,你为什么非要用PKCS7,不用PKCS5呢?对bouncycastle这么痴情?

3. 算法找到了,密钥放在哪里?
密钥的管理在CertificateManager.java里面。fetchDecryptKey(),简单读下代码后跳转到RsaUtils.java里面。EpubreaderActivity.java中有:
key = CertificateManager.fetchDecryptKey((new StringBuilder(String.valueOf((new File(bookDir)).getParent()))).append(File.separator).append("book_key").toString(), mConfigManager.getPrivateKey());

简单的查找和分析,得以定位到每本书的资料都放在sd卡的/data/data/dangdang/<user.name>/<book>目录下,书是epub格式的。该目录下有一个叫book_key的文件,这个文件里面有个<key>。密钥是128位的AES密钥,用512位的RSA加密。密钥放在手机的/data/data/com.dangdang.reader/shared_prefs/dang_reader_config.xml里面,目录是由Android系统的getSharedPreferences()定义的。里面有base64过的private_key, public_key。
4. 机制搞清楚了。开工!
1)先买本书,下载到Android手机上。
2)把手机root掉。把手机和SD卡上的两个目录都拷贝到PC上。
3)从文件中拿到该书对应的key,拿到private_key。
4)写段Java程序,用RSA/ECB/PKCS1Padding解密书的key。
5)用7-zip打开epub,ops目录下的文件,除了.ncx和.opf,都是用AES加密的。程序当中把它们解出来。
解密前是这个样子:

解密完后是这个样子:


6)把程序写成解密epub,生成另外一个epub。好,现在可以选择自己喜欢的设备和阅读软件了。|Adobe:


...全文

相关推荐

当当网图书破解

DRM通常会限制设备间的转移、打印次数以及阅读权限。2. **版权法**:了解并遵守版权法是至关重要的,因为非法破解和分享受版权保护的内容可能会导致法律诉讼和个人法律责任。3.

u010657385

破解WMV DRM限制:合法与技术指南

本文还有配套的精品资源,点击获取 简介:DRM技术用于保护数字媒体版权,限制未授权复制与分发。去除WMV文件的DRM限制意味着用户可以自由播放或处理这些文件。但这一行为可能违反版权法,并带来道德与法律风险。本文将探讨DRM的工作原理、限制因素、合法去除DRM的途径、相关法律问题、道德与版权意识、替代方案、媒体转换以及云服务和流媒体平台作为解决方案等。 1. DRM...

小黄人95

carlibre 插件 dedrm 下载

然而,这也引发了一系列关于版权保护和用户权益的讨论。随着技术的发展,DRM的破解和反破解斗争将持续下去,而如何平衡版权保护与用户自由,也将成为一个长期的社会议题。

略懂excel的医生罢了

数字版权管理

**适应性**:随着技术的发展,DRM也需要不断更新以应对新的挑战,如破解技术的进步、新的数字平台的出现等。

楼小雨

DRM实现流媒体的加密

**反盗版措施**:DRM系统通常包含反破解机制,如定期更新加密密钥,检测异常的访问模式,防止内容被逆向工程分析。

doupi2008
评论 4
收藏 已收藏
分享
返回顶部
sfqfirst
安全技术/病毒 9,513 成员 28,940 内容