| 百度阅读文件解密国内有很多阅读平台,亚马逊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;这两个类中 分析过程略去,可以从上面类中提取,一些关键性的方法 由于解密内容过多,展示小部分关键代码:完整在附件中, [mw_shl_code=java,true]        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);
 
 }[/mw_shl_code]
 经过解密后的json文件格式化得到
 
 
 存在的问题:
 
 虽然可以拿到解密后的文件,但是还是存在文件,这部分代码无法在win下运行,网上有朋友说是JCE的文件,但是重新下载了JCE问题依旧存在,哪位大大知道还望指导一下本人比较菜,如有错误之处,还望给与指导 {:5_136:} 附件:http://yunpan.cn/cH9kLECtTIvYN  访问密码 c77d
 
 
 
 |