【JS逆向案例】某五矿网站请求参数逆向分析

声明

本文中所有内容仅供学习交流使用,不用于其他任何目的,不提供完整代码,敏感网址、数据接口等均已做脱敏处理,严禁用于商业用途和非法用途,否则由此产生的一切后果均与作者无关!

本文未经许可禁止转载,禁止任何形式的修改后进行二次传播,若有侵权,请联系作者删除!

逆向目标

  • 网站:aHR0cHM6Ly9lYy5taW5tZXRhbHMuY29tLmNuL29wZW4vaG9tZS9wdXJjaGFzZS1pbmZv

抓包分析

打开开发者工具或者F12,翻页进行接口加载,每次翻页可以看到两个接口加载

目标数据如下图

查看请求参数信息,发现加密密文,再查看public,返回一长串密文

加载数据时每次都会加载public,猜测public返回的密文有用,复制路径搜索,找到相应位置并打上断点,翻页进行调试成功断住

查看代码发现t.setPublicKey(r)  、t.encryptLong(JSON.stringify(a)) 等相关代码,在适当位置打上断点进行调试发现s为数据接口参数paramrpublic返回的长串密文

t.encryptLong(JSON.stringify(a))为参数param的生成位置,向上看,发现用到了以下代码,需要解决atr,其中r可以暂时固定,后期再调整

建一个js文件,放入以下代码,r固定后需要解决的只剩下ta

t = new v["a"]
r = n.data,//控制台打印r,暂时固定,后期传入即可
t.setPublicKey(r),
a = m(m({}, e), {}, {
    sign: f()(JSON.stringify(e)),
    timeStamp: +new Date
}),
s = t.encryptLong(JSON.stringify(a))

逆向分析

变量a

接下来先看a,控制台打印输出,sign需要逆向,pageIndex暂时固定

找到a的生成位置,发现m()函数、f()函数、参数e不知道,参数e控制台打印输出即可,和a差不多,只是少了timeStampsign

a处打上断点进行调试依次跟进找到m()函数、f()函数,m()函数很简单如下图,f()函数实质为一个标准md5加密,直接使用JS标准算法库还原

//md5加密算法
function f(data){
    const md5Hash = crypto.createHash("md5");
    md5Hash.update(data);
    return md5Hash.digest("hex");
}

变量t

接下来还剩下t未完成,看到 t = new v["a"] 要逆向t就要先找到v,向上找发现如图所示,很明显是一个webpack,该处断点调试跟进去发现t("9816")g函数生成,扣出webpack相关代码,不会的话网上自行搜索

扣出webpack代码如下,注意需要全局导出g函数,比如定义一个变量a,让a来接收g,方便后面调用

var a;
(function(A) {
    //代码过长,这里是部分代码
    function g(e) {
        if (n[e])
            return n[e].exports;
        var t = n[e] = {
            i: e,
            l: !1,
            exports: {}
        };
        return A[e].call(t.exports, t, t.exports, g),
        t.l = !0,
        t.exports
    }
    a = g;//全局导出g函数,方便后面调用
}
)({
    //此处放模块,后面会用到
})

接下来需要补全webpack模块代码,选中 t("9816") 直接跟进去,进入到chunkXXX.js文件,直接搜索9816,把代码抠出来,有点小长哦

最后还差个t.encryptLong,选中它直接跟进去,直接扣出

v["a"].prototype.encryptLong = function(A) {
            var e = this.getKey()
              , t = (e.n.bitLength() + 7 >> 3) - 11;
            try {
                var n = ""
                  , r = "";
                if (A.length > t)
                    return n = A.match(/.{1,50}/g),
                    n.forEach((function(A) {
                        var t = e.encrypt(A);
                        r += t
                    }
                    )),
                    w(r);
                var a = e.encrypt(A)
                  , s = w(a);
                return s
            } catch (i) {
                return i
            }
        }

温馨提示:扣的js代码放到本地运行会报错,根据提示补全剩余代码即可,很简单的~

本次逆向到此就结束了,下面是结果验证,由于是第一次写,大佬看见还请多多指导。

结果验证

  • 5
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
嗨!对于爬虫中的 JavaScript 逆向案例,我可以给你提供一个简单的示例。请注意,这个示例只是为了帮助你理解逆向过程,真实的应用中可能涉及法律和伦理问题,请合法使用爬虫技术。 假设我们要爬取一个网站上的某个页面数据,但是该页面通过 JavaScript 动态生成。我们可以通过分析网页的 JavaScript 代码来逆向工程,获取所需数据。 首先,打开 Chrome 浏览器并进入开发者工具(按 F12 键或右键点击页面并选择“检查”)。然后切换到“网络”选项卡。 接下来,在浏览器地址栏中输入目标网页的 URL 并按下回车,浏览器将开始加载页面。在网络选项卡中,你将看到所有请求和响应的列表。 查找其中一个请求,该请求可能包含我们所需的数据。点击该请求并查看其请求头、响应头和响应体。 在响应体中,你可能会看到一些 JavaScript 代码,这些代码负责生成页面上的内容。你可以仔细阅读该代码,并找到生成目标数据的部分。 如果你发现目标数据是通过 Ajax 请求获取的,你可以查看该 Ajax 请求的 URL 和参数,然后使用 Python 的 requests 库或其他适当的方法模拟该请求,并解析响应获取数据。 如果你发现目标数据是在 JavaScript 代码中直接生成的,你可以尝试分析代码逻辑并编写相应的 Python 代码来模拟该过程。这可能涉及到使用 JavaScript 解释器或库来执行 JavaScript 代码。 需要注意的是,JavaScript 逆向工程是一项复杂的任务,需要对 JavaScript 和网络协议有一定的理解。同时,网站所有者可能会采取一些反爬虫措施来阻止你的行为,所以请务必遵守法律法规和网站的使用规则。 希望这个示例能够帮助你入门 JavaScript 逆向工程。如果你有任何其他问题,欢迎继续提问!

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

Red sir

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值