js逆向-某旗小说

声明

本文仅供学习参考,请勿用于他途,违者后果自负

前言

笔者一直是一个小说控,喜欢看小说很多年了。自从学会了python后,就经常会去不同的小说网站抓取小说保存到本地阅读,最近发现一本很好看的小说,准备抓下来看,却发现有请求参数和返回的接口数据有加密!

参数分析

目标网站:

aHR0cHM6Ly93d3cuc2h1cWkuY29tL3JlYWRlcj9iaWQ9NzEwMjM5NCZjaWQ9ODI0NjA2

在这里插入图片描述
在这里插入图片描述

params中有一个sign参数,32位长度,忙猜md5。响应数据比较长,暂不确定是什么加密,需要分析。

逻辑分析

首先来看sign的生成,全局搜索关键字即可
在这里插入图片描述
在这里有一个sign的加密,打下断点,刷新页面并没有断下来,看一下这个代码是怎么回事。

sign: $.md5("imei=" + h + "&platform=an&readChapters=1&sn=" + h + "&timestamp=1234567890&userId=" + n + "&skey=8771731b23164da09a5b80c4d7e4c619").toUpperCase()

md5的加密,最后大写。但是URL参数中的sign并没有大写。说明不是在这里进行的加密,那跳过这个文件继续寻找,看到最后一个文件。
在这里插入图片描述
搜索sign会发现有一千多个。
在这里插入图片描述

而且最关键的是sign已经给出具体的数值了,不用再进行逆向处理了,简直了!
在这里插入图片描述

这个sign的分析就到此结束了。
继续看章节内容的加密逻辑,继续搜索关键字ChapterContent,进入文件。关键字比较有特点,所以一下子就找到了。
在这里插入图片描述
刷新,然后会断住。

在这里插入图片描述
解密函数传入密文,然后一系列的操作就可以得到明文了。

在这里插入图片描述
总体来说还是难度不大,细致即可。

扣代码

代码难度比较小,就直接附上了。码字不易,喜欢的可以给笔者点个赞。

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)
}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值