JS逆向解析---某知名小说网站内容加密

2023-11-07

        该小说网站的全部内容都是经过一个JS的加密,要想爬取这个网站那么将其内容解析是不可避免的,本文将讲解如何对其进行JS的逆向解析。网站:shuqi

随便点开一本书,打开浏览器自带的抓包工具:

点击第一个包,但是在这里找不到我们想要的数据,说明不在这个包里,退出去XHR类找一下:

从名称中看,第二个包有书的ID、页码等信息,大概率就是这个,打开看一下

发现这里有一份加密的字符ChapterContent,下面我们来对这个关键字进行逆向的解析:

点击右上角的全局搜索:

 

 发现只搜索到一个,在源码中打开,继续搜索:

 得到两个结果,我们看不出哪个是,我们先将这两个行打上断点(点击代码那一行对应的数字),并刷新

 这里发现,第一个是得到这个加密字符的函数,这个暂时对我们没用,我们直接get之前那个包也能直接得到,这里我们点击这个小按钮进行单步调试。

 

 点着点着发现进入了一个函数的循环,且这个函数对我们没什么用处,于是我们点击向上的这个小箭头,跳出当前函数,并继续一直点一直点,遇到循环就跳出,没有循环就单步调试。

 

 直到我们遇到这个界面!!激动人心的时刻到啦!!

 从这里我们就可以看出文章的内容是通过i._decodeCont(t.ChapterContent)这个函数得到的,把鼠标移动到这个函数上

 到这里很显然,这个函数的结构是    i._decodeCont(加密的密文),点击i._decodeCont进入查看它的源代码。

新建一个js文件,把这个一整个函数复制到你建的js文件中,(注意:一定不要漏复制)

复制完后修改一下函数,将头改成function _decodeCont(t)这种格式,

(这个格式是由js的格式决定的,同时也是固定的)

function _decodeCont(t) {
    return t = function(t) {
        return t.split("").map(function(t) {
            var e, i;
            return t.match(/[A-Za-z]/) ? (e = Math.floor(t.charCodeAt(0) / 97),
            i = (t.toLowerCase().charCodeAt(0) - 83) % 26 || 26,
            String.fromCharCode(i + (0 == e ? 64 : 96))) : t
        }).join("")
    }(t),
    function(t) {
        var e, i, a, n, r, o, c, s = "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/=", d = "", l = 0;
        for (t = t.replace(/[^A-Za-z0-9\+\/\=]/g, ""); l < t.length; )
            n = s.indexOf(t.charAt(l++)),
            r = s.indexOf(t.charAt(l++)),
            o = s.indexOf(t.charAt(l++)),
            c = s.indexOf(t.charAt(l++)),
            e = n << 2 | r >> 4,
            i = (15 & r) << 4 | o >> 2,
            a = (3 & o) << 6 | c,
            d += String.fromCharCode(e),
            64 != o && (d += String.fromCharCode(i)),
            64 != c && (d += String.fromCharCode(a));
        return function(t) {
            for (var e, i = "", a = 0, n = 0, r = 0; a < t.length; )
                n = t.charCodeAt(a),
                n < 128 ? (i += String.fromCharCode(n),
                a++) : n > 191 && n < 224 ? (r = t.charCodeAt(a + 1),
                i += String.fromCharCode((31 & n) << 6 | 63 & r),
                a += 2) : (r = t.charCodeAt(a + 1),
                e = t.charCodeAt(a + 2),
                i += String.fromCharCode((15 & n) << 12 | (63 & r) << 6 | 63 & e),
                a += 3);
            return i
        }(d)
    }(t)
}

到这里之后,我们只需要直接调用这个函数就可以将密文解密出来啦

t = '密文'
console.log(_decodeCont(t));

输出结果:

当然如果不想用JS,我们在py上传入参数也可以的(123.js就是前面放js函数的文件):

# -*- coding: gbk -*-    # 防止出现乱码等格式错误

import execjs
def get_data():
# '123.js'是用来放前面的js的
    with open('123.js','r',encoding='utf-8')as f:
        read_js=f.read()
    return_js = execjs.compile(read_js)
    t = '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'
    data = return_js.call('_decodeCont',t)  # 传入参数t进入函数_decondeCont中
    print(data)


if __name__ == '__main__':
    get_data()

这个时候可能会遇到下面这个错误:

经过一番搜索之后才找到了这个问题的解决方案:去subprocess.py下面修改它的源代码:

 

 将encoding修改前一定要备份!!万一弄错了好改回来。敲代码最忌不懂,乱改还不保留,这样很招人烦的,尤其团队合作时。

接下来点击运行就可以看见结果啦!

 

 

到这里解析就完成啦,剩下的将数据进行简单的处理和保存就搞定了

其他JS逆向案例:JS逆向解析案例-巨潮证券市场数据库

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

JS逆向解析---某知名小说网站内容加密 的相关文章

随机推荐

  • 小米VS华为:水军?黑稿?到底是谁黑了谁?

    那边罗永浩和黄章互相吐槽还没结束 雷军又向华为开炮 雷军发微博称 其被华为水军黑了 事情的起因其实很简单 一位微博名为 IT华少 的网友称 小米手机4的芯片没有进行点胶处理 所以认定其 做工粗糙 不如华为的荣耀6 雷军在看到华强电子产业研究
  • CentOS7 系统简单 Python 环境使用

    文章目录 1 CentOS7 系统简单 Python 环境使用 1 1 查看当前系统 Python 版本 1 2 使用 CentOS7 系统中的 Python3 版本 1 3 CentOS7 系统中 Pycharm 环境使用 1 4 Pyc
  • 数据库ALTER语句使用

    ALTER语句使用 ALTER是数据库DDL语言的一部分 其操作对像主要是可以是表中的字段和索引 一般被用来修改上述对象的部分 1 操作表 1 1 表中增加列 ALTER TABLE tbl name ADD COLUMN column n
  • xgboost 安装问题(xgboost library (xgboost.dll) could not be loaded)win10+ anaconda3.8+pycharm最新社区版

    最近打算使用XGBOOST跑跑数据 奈何换了电脑 安装过程一把泪 1 搜索大部分安装办法 https blog csdn net qazplm155357 article details 107313915 utm medium distr
  • Spring Boot 性能优化几点

    点击下方 IT牧场 选择 设为星标 程序员大目 IT牧场公众号 BAT 技术专家分享开发 架构 运维相关干货 159篇原创内容 公众号 文章来源 http a nxw so 1biCvy 目录 异步执行 增加内嵌 Tomcat 的最大连接数
  • Bert的NSP任务的loss原理

    Bert的NSP任务是预测上句和下句的关系 对一个句子的表征可以用CLS的embedding bert的NSP任务 NSP 是一个预测两段文本是否在原文本中连续出现的二元分类损失 NSP 是一种二进制分类损失 用于预测原始文本中是否有两个片
  • 彻底理解Linux下动态替换.so的方法

    0x00 背景 hdfs增加了一个native方法 打成了libhadoop so这个动态库 需要分发到线上的各个Datanode上以便升级 在灰度分发到datanode时遇到了可复现的问题 即datanode进程肯定会core dump
  • scipy.sparse稀疏矩阵内积点乘--效率优化!

    在使用scipy和numpy做数据计算时 感觉运行速度较慢 但是程序已经到了使用多数计算使用内积运算地步了 真的不知道该如何优化 如果能够优化下内积运算该有多好啊 奔着这个目标 希望能够写一篇文章盘点各种内积优化方法 也算是贡献自己的微薄之
  • Java RMI 解析

    1 什么是RMI Java RMI 即 远程方法调用 Remote Method Invocation 一种用于实现远程过程调用 RPC Remote procedure call 的Java API 能直接传输序列化后的Java对象和分布
  • GD32替换STM32后 写片上闪存(flash)失败的解决方法

    目录 型号 问题 解决办法 下载gd的fmc操作库 修改fmc文件 使用 擦除一页 写一页 型号 使用的GD32C103CB等引脚替换STM32F103CB 问题 使用hal库的flash操作接口 片上flash可以正常擦除 但是无法写入
  • Flash Player 10 中的RTMFP协议(实现P2P技术)

    RTMFP是Adobe公司开发的一套新的通信协议 该协议可以让使用Adobe Flash Player的终端用户之间进行直接通信 用Adobe AIR框架开发的程序也可以用此协议来发布直播 实时信息 通过使用RTMFP 那些以来直播 实时通
  • 03多线程之间通讯

    线程之间的通信 一 为什么要线程通信 1 多个线程并发执行时 在默认情况下CPU是随机切换线程的 当我们需要多个线程来共同完成一件任务 并且我们希望他们有规律的执行 那么多线程之间需要一些协调通信 以此来帮我们达到多线程共同操作一份数据 2
  • linux内存文件系统

    写文件时 太耗内存的话 可以使用dma拷贝 或者使用内存文件系统的方式 但首先要搞清楚一点 正常的文件操作 多久会真正保存到磁盘中去呢 参考 浅谈Linux系统写磁盘机制 http blog sina com cn s blog 96757
  • mybatis通用mapper的Example查询

    mybatis的通用mapper 多用于单表查询 接口内部为我们提供了单表查询的基础查询语法 可以极大地帮助我们简化编程 接下来让我们动手试一试 我建的是springboot项目 先导依赖
  • 词云下载jieba成功后仍然报错

    下载jieba终端 pip install i https pypi tuna tsinghua edu cn simple jieba 成功下载后仍然报错 TransposedFont object has no attribute ge
  • 牛顿-拉夫逊法潮流计算matlab程序,牛顿—拉夫逊法潮流计算MATLAB程序.doc

    牛顿 拉夫逊法潮流计算程序By Yuluo 牛顿 拉夫逊法进行潮流计算 n input 请输入节点数 n n1 input 请输入支路数 n1 isb input 请输入平衡母线节点号 isb pr input 请输入误差精度 pr B1
  • python之struct详解

    python之struct详解 醉小义的博客 CSDN博客 python struct 尊重原创
  • Unity中,在按钮的处理事件中,显示UI(Panel)的一些问题

    问题来源 自己遇到的 32条消息 Unity SetActive True 滞后严重 游戏 CSDN问答 简单概括就是 点击按钮 开始处理某个事件 这个事件需要花费较长时间 我的想法是加入一个加载中界面 方便告知用户当前程序没有卡住 在完成
  • kodi刮削器 中文_手把手教你用Kodi,搭建最强私人娱乐/学习中心!(小白篇)...

    喜欢本篇内容请给我们点个在看 什么是KODI 简单的说 Kodi 就是一个功能强大且免费的媒体播放器 支持全平台 如Windows Linux iOS Android Xbox 以及树莓派等 可播放电影 电视剧 音乐 电视直播 电台等等 特
  • JS逆向解析---某知名小说网站内容加密

    该小说网站的全部内容都是经过一个JS的加密 要想爬取这个网站那么将其内容解析是不可避免的 本文将讲解如何对其进行JS的逆向解析 网站 shuqi 随便点开一本书 打开浏览器自带的抓包工具 点击第一个包 但是在这里找不到我们想要的数据 说明不