百度阅读文件解密 国内有很多阅读平台,亚马逊kindle、多看阅读、当当阅读、掌阅ireader、京东阅读、百度阅读、qq阅读等,就目前来说国内版权问题也越来越受到重视,这也就使得很多阅读软件使用DRM数字版权保护技术。
目前阅读工具保护主要做到以下两点:
1、 内容保护。主要是通过加密技术来实现,以防止非授权的访问。
2、 完整性保护。防止原作品遭到纂改。
总的来说百度阅读的加密和qq阅读差不多,代码虽然经过混淆,但是经过简单的修复精简还是可以提取到关键性代码,
多看,掌阅的保护比较好,亚马逊,京东阅读,稍微次之,百度阅读,qq阅读,就比较简单了(上面根据我个人尝试解密难度排序)
目前qq阅读,百度阅读 京东阅读已经可以手动解密并得到解密文件,多看、掌阅,难度较大,还在研究中。
下面记录了百度阅读文件解密过程:
工具:xposed工具箱、IDEA、android killer 、模拟器、DDMS
- xposed工具 主要是监控sd卡中的文件状态
- IDEA 动态调试smlai 查看各个方法的参数
首先,可先尝试随意打开一本书,并监控sd卡文件变化。
看到在加载json文件之前,
首先访问的/mnt/sdcard/BaiduYuedu/download文件夹中的header.enc文件,
打开header.enc其为base64编码。
内容非常像某种加密的key文件,根据上面日志内容可以发现在加载json文件之前回加载这个文件。
建议可以将关键性代码放so文件中。
接着尝试监控header.enc文件,
接着回到书城重新打开一本书:
查看日志文件,可以查看其调用堆栈,根据堆栈信息找的对应的类: 简单分析可以确定的是关键部分在 com.baidu.yuedu.reader.bdjson.c.a和com.baidu.yuedu.c.a.c;这两个类中 分析过程略去,可以从上面类中提取,一些关键性的方法 由于解密内容过多,展示小部分关键代码:完整在附件中, [Java] 纯文本查看 复制代码 private void Decrypt() throws InvalidKeyException, NoSuchAlgorithmException, NoSuchPaddingException, UnsupportedEncodingException {
/*
* header.enc文件的内容 这里的key内容也是经过加密处理的
*/
String Encryptkey = "Mi4wgAQAAElJTW9KcmNqc0thZUFMQUNRWENwRU1abkZEWkFudlN3SnNjY2Jkck5YdnRnL2xUSEtlU3ZWaEkwZGxESExTeTA3RkxrN3JObUphd3FxR1ZBaUNUbC8wMEZyMUNiclBiOHVZYVBkd1lLc0xDZTRaR1lTRElTVTNhKzc2MWh4NXdBbjNWSWZWUVFDWGZ1UXpSaGlUbkkzYjU5cXRCelAyOW9FTFgzOFM5UURmL0xrSkFCRzRBQVVBQkJFUUQzYklTR3FTQ0cwQU0vSFFBREFUQkVNUkhWTmdCTUFEQUJJWWJ2Tm1MMVJXYWhKR1ExdG1ibGQzRFdFUUNCMHc5R2lraHFrZ0JjQWpIeFUzYXVWMmRGTXhBRVUxQUd3QU1PRVRkcjVXWjNWd0VMUVFWRFlBRHc0UU0xUldhaEpXQlRvQUJWTmdCTUFqRHhjbWJwcFdhbEoyQlRjQUJWTmdCT0FERXhjbWJwcFdhbEoyQlRnQUJWTmdCT0FERXg0MllDTWhCRVUxQUdrQU1MRVRnQkNEaEJTNmhCRzYrMFhpNW1FRHRBR00vS3NlZFllVk5vSmM2cVRCZ2pHSU1tR0lCajBSVkRZZ3JCQ3orMFhpNW1FRHRBR00vS3NlZFllVk5vSmM2cVRCQldRZ0RkVTFBRzBCTWVISU1oSDRvQkFRQURJUWJzOGtFTzgzbVpRSjM0MjVqQy84bVF6M2J1bzIyRit0L3NsSEFLVjUxTndCUnM5d25XVmRSZE10cUx2Mnl1NHpEdDJraUhmc0l2Mm45cjZEdDF5ZVRjRndyRm5LT05GS3NEYlJ6aXBLSnRZeHFqbHZLajJMNWZTWHBldHpvd0JsWEcyMk9ONWh0Vy91Y0JYMGI2NVRvd25Ea3RRamNSUUdZYllNZjdKVVdhRFFnQktRaUJDREFORzRBQVVRQUJFUUQzYklTR3FTQ0cwQU1mR0lNdDkyWXVVSFpwRm1ZQVYzYXVWMmRQWVJBSkVRRDNiSVNHcVNDR3dCTWVFVGRyNVdaM1Z3RURRUVZEWUFEdzRRTTF0bWJsZFhCVHNBQlZOZ0JNQWpEeFVIWnBGbVlGTWhDRVUxQUd3QU1PRXpadWxtYXBWbVlITXhCRVUxQUc0QU1RRXpadWxtYXBWbVlITUJDRVUxQUc0QU1RRWpiakp3RUdRUVZEWVFDd3NRTUJHSU1hQnpNd1F6TXdjak0xQXpNeDB3RmFCek13UXpNd2NqTTBBek14MHdGZUFUYnZObUwxUldhaEpHUTF0bWJsZDNEV0VRQ0IwdzlHaWtocWtnQmNBakh4VTNhdVYyZEZNeEFFVTFBR3dBTU9FVGRyNVdaM1Z3RUxRUVZEWUFEdzRRTTFSV2FoSldCVG9BQlZOZ0JNQWpEeGNtYnBwV2FsSjJCVGNBQlZOZ0JPQURFeGNtYnBwV2FsSjJCVGdBQlZOZ0JPQURFeDQyWUNNaEJFVTFBR2tBTUxFVGdCQ0RBRlFRQUIwdzlHaWtocWtnQk5BREFCSWdBQkl3QWdXc0FDQ0RYRKwAAABZY2E9SXFmT3hyYm5yZUdBTUpIUTNoU3ZDb1hQVkRveHBQdmJLQmZSVzFzOXdCYmhVRG1NLzg4RnlJYmtaOVhIdUZZaHA1TVd0WmlvOFNEdmw1bkRiVUxvOFhLSXdRTUxCc0llT3l6VXR6c1VOSzNURVYzOUZQcGZxSDVMY2pvYVRqL1lrRXZSWHNQc3I0QVZ3SnRUbmorZkVNVHV1SERoR1Q0N3VKdmNWdFN3";
/*
* 解密Encryptkey,查看下面方法可以知道 Encryptkey做了RSA处理
* Encryptkey中包含了RSA的密匙和经过处理得到的AES的key
*/
decryptAndGetPublicKey(Base64.decode(Encryptkey.getBytes(), 0));
int v7 = 131072;
byte[] result = new byte[v7];
int start = 0;
int srcfilelength = ((int) new File(this.b).length());
do {
// 这里读取加密json文件
int v2 = a(result, this.b, ((long) start), ((long) (start + v7)));
if (v2 <= 0) {
return;
}
start += v2;
if (cipher == null) {
// 对处key进行扩展 ,由16位key扩展为32位,空白填充16,接着进行初始化
// =====这里也是我不明白的地方,为什么要扩展====
//在win下即使扩展为32 也不能正常使用
byte[] aeskey = b(key.getBytes());
// 下面是解密相关操作
SecretKeySpec v3 = new SecretKeySpec(aeskey, "AES/ECB/NoPadding");
cipher = Cipher.getInstance("AES/ECB/NoPadding");
cipher.init(2, (v3));
}
byte[] v1_1 = cipher.update(result, 0, v2);
try {
// 解密完成后我门写入文件
FileOutputStream fileOutputStream = new FileOutputStream(getFilesDir() + "/xxxx.txt");
fileOutputStream.write(v1_1);
fileOutputStream.flush();
fileOutputStream.close();
} catch (FileNotFoundException e) {
// TODO Auto-generated catch block
e.printStackTrace();
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
} while (start < srcfilelength);
}
经过解密后的json文件格式化得到
存在的问题:
虽然可以拿到解密后的文件,但是还是存在文件,这部分代码无法在win下运行,网上有朋友说是JCE的文件,但是重新下载了JCE问题依旧存在,哪位大大知道还望指导一下 本人比较菜,如有错误之处,还望给与指导
附件:http://yunpan.cn/cH9kLECtTIvYN 访问密码 c77d
|