某电子书阅读网站EPUB资源逆向分析

查看 98|回复 11
作者:逗啊逗   
声明
本文章中所有内容仅供学习交流使用,不用于其他任何目的,不提供完整代码,抓包内容、敏感网址、数据接口等均已做脱敏处理,严禁用于商业用途和非法用途,否则由此产生的一切后果均与作者无关.本文章未经许可禁止转载,禁止任何修改后二次传播,擅自使用本文讲解的技术而导致的任何意外,作者均不负责。
需求
下载目标网站的书籍。
目标网址

aHR0cHM6Ly9oNS5tZXRhcmVhZGVyLmNuL2g1L3BhZ2VzL3BjL3dlYj9iaWQ9MTA2NDg4OTg5NjQwMzAyMDgmYXBwSWQ9MGJpZGc1MnImdGVuYW50SWQ9MTAxMDAxJmluZGV4PTA=

前言
前一段时间发布过几篇关于期刊、书籍网站解析下载pdf、epub的文章(博看网期刊下载生成pdf【实操AI编程】,QQ阅读·机构版解析生成EPUB电子书,期刊网杂志解析生成PDF(完整解析流程+源码)),因为基本没有什么加密,没什么逆向的必要,就直接分享代码了,本次的网站就稍微多了一点加密,姑且发布在这里做一个记录,web逆向方面我还是个小白,感谢各位大佬支持和指导~
逆向过程
抓包分析
[ol]
  • 先过一边接口,凭借经验把有用的记录一下,做到心中有数。


    20250320145405688.png (153.02 KB, 下载次数: 0)
    下载附件
    5688
    2025-3-20 18:03 上传
  • 查看下载资源。


    20250320145550292.png (270.76 KB, 下载次数: 0)
    下载附件
    0292
    2025-3-20 18:03 上传

    这里其实挺明显的,来回翻页的时候发现书籍每一页都会加载一个独立的epub文件进行解析显示。直接下载发现可以下载但是无法打开。


    20250320150003084.png (92.57 KB, 下载次数: 0)
    下载附件
    3084
    2025-3-20 18:03 上传

    正常的epub文件时直接可以用解压文件打开的,这里说明被加密了。那我们就需要解密epub文件。
    [/ol]
    解密EPUB文件
    查看分析处理epub文件部分的代码。


    20250320150257916.png (43.52 KB, 下载次数: 0)
    下载附件
    7916
    2025-3-20 18:03 上传



    20250320151310561.png (23.52 KB, 下载次数: 0)
    下载附件
    0561
    2025-3-20 18:03 上传



    20250320151320689.png (11.85 KB, 下载次数: 0)
    下载附件
    0689
    2025-3-20 18:03 上传

    看上去很是很是顺利,甚至已经注释了解密书籍的函数,看一下发现用的CryptoJS
    验证解密方式
    下个断点看一下url和password


    20250320152205060.png (62.91 KB, 下载次数: 0)
    下载附件
    5060
    2025-3-20 18:03 上传

    测试一下:
    const CryptoJS = require('./crypto-js.js');
    const fs = require('fs');
    async function getEpubContent(url) {
      const https = require('https');
      return new Promise((resolve, reject) => {
        https.get(url, res => {
          const chunks = [];
          res.on('data', chunk => chunks.push(chunk));
          res.on('end', () => resolve(Buffer.concat(chunks)));
        }).on('error', reject);
      });
    }
    function decryptedBook(buffer, c_key) {
      const key = CryptoJS.enc.Base64.parse(c_key);
      const encrypted = CryptoJS.lib.WordArray.create(buffer);
      return CryptoJS.AES.decrypt(
        { ciphertext: encrypted },
        key,
        {
          mode: CryptoJS.mode.ECB,
          padding: CryptoJS.pad.Pkcs7
        }
      ).toString(CryptoJS.enc.Latin1);
    }
    (async () => {
      const password = "";
      const url = "";
      try {
        const buffer = await getEpubContent(url);
        const decrypted = decryptedBook(buffer, password);
        fs.writeFileSync('decrypted.epub', decrypted, 'binary');
        console.log('解密成功!');
      } catch (error) {
        console.error('处理失败:', error);
      }
    })();
    查看解密后文件:


    20250320153420720.png (89.8 KB, 下载次数: 0)
    下载附件
    0720
    2025-3-20 18:03 上传

    发现已经可以正常打开,且文件内容正常,至此,已完成一半内容,接下来需要找到url和password。
    获取password
    其实url在浏览接口的时候就已经看到了:


    20250320154734774.png (77.57 KB, 下载次数: 0)
    下载附件
    4774
    2025-3-20 18:03 上传

    那么只需要找到password的生成方式。
    抓包分析
    最开始过接口的时候就已经有猜测了:


    20250320164905844.png (59.7 KB, 下载次数: 0)
    下载附件
    5844
    2025-3-20 18:03 上传

    api/front/drm/auth/book这接口名又是drm又是auth的,其实很大程度上可以确定这个接口跟加密相关了,更何况data里还有encrypt这么直白的参数
    代码分析
    先检索api/front/drm/auth/book


    20250320165951607.png (62.57 KB, 下载次数: 0)
    下载附件
    1607
    2025-3-20 18:03 上传

    找到authBook,再次检索


    20250320170022444.png (46 KB, 下载次数: 0)
    下载附件
    2444
    2025-3-20 18:39 上传

    只有8个结果,且在同一文件下,全部打上断点。
    这里发现了刚才的password的值,


    20250320171512213.png (37.73 KB, 下载次数: 0)
    下载附件
    2213
    2025-3-20 18:03 上传

    进入到关键函数T,再次打上断点。


    20250320171856133.png (17 KB, 下载次数: 0)
    下载附件
    6133
    2025-3-20 18:03 上传

    可以看到就是此处生成的,而且代码上看使用的JSEncrypt。
    验证解密方式


    20250320172541402.png (98.74 KB, 下载次数: 0)
    下载附件
    1402
    2025-3-20 18:03 上传

    对于PrivateKey其实接口里面就看到过,走一下形式,检索一下:


    20250320174156259.png (16.19 KB, 下载次数: 0)
    下载附件
    6259
    2025-3-20 18:03 上传

    验证
    用其他书籍验证成功,此处略过。
    其他参数
    所需的参数实际上只差header中的token以及deviceid,因为需求是“下载目标网站的书籍”,所以不做分析,直接在header和localstorage中获取即可。
    后续处理
    接口完整且加密部分使用的标准库,并没有魔改,可以直接改写成其他语言,只需要遍历目录,全部下载后可合并成书籍的完整epub文件。(本文只提供加密部分的逆向分析,不提供完整代码)
    至此,文章结束,感谢观看,撒花~

    下载次数, 下载附件

  • zeldar64   

    epub格式接触的主要是漫画和轻小说,有个网站故意打乱图片顺序来防止被盗用资源的操作有点逆天,本来就是免费分享的网站
    逗啊逗
    OP
      


    shallies 发表于 2025-3-20 18:57
    厉害得很呢!!!
    楼主如果能分析一下掌*的epub解密,那便是极好的了。

    印象里掌阅没有加密,处理过掌阅精选,就是机构版,只需要处理好接口就行,可以参考我之前写的关于qq阅读机构版的处理逻辑。
    lw317627   

    谢谢分享,我得仔细学习下
    zpcy652   

    正是需要的内容,谢谢分享
    qwe5231556   

    学习学习,看看过程,醍醐灌顶
    space4fly   

    谢谢分享
    shallies   

    厉害得很呢!!!
    楼主如果能分析一下掌*的epub解密,那便是极好的了。
    MX138   

    学习了。谢谢分享。
    TL1ng   

    你好,我想问一下,你发的贴子中,所说的“测试一下”后面的代码,是在哪儿运行的?
    您需要登录后才可以回帖 登录 | 立即注册

    返回顶部