某外卖 _sign参数生成

前言

只作学习研究,禁止用于非法用途,否则后果自负,如有侵权,请告知删除,谢谢!

目标网址: aHR0cHM6Ly9oNS53YWltYWkubWVpdHVhbi5jb20vd2FpbWFpL21pbmRleC9tZW51

分析过程可以看这篇 写的挺详细的 JS逆向—获取某知名外卖平台数据(_token)

根据分析可以在网页控制台直接运行一下window.Rohr_Opt.reload('') 如图 是这个方法生成的
在这里插入图片描述
把js文件down下载开始搭架子 这里用的java j2v8库 J2V8–java调用JS文件执行js函数的高效类库,高并发下表现依然高效
主要是jdk17不能直接运行js 而且这篇文章也写了效率很低 所以采用j2v8库
Maven地址 linux和mac的自行搜索 替换

		<dependency>
            <groupId>com.eclipsesource.j2v8</groupId>
            <artifactId>j2v8_win32_x86_64</artifactId>
            <version>4.6.0</version>
        </dependency>

之前是用的nodejs+jsdom方式 然后http调用 每次都得运行node才能跑很麻烦 这次直接用java跑js
在这里插入图片描述
文件下载到java目录开搞

	public void runScript() {
        // 文件地址
        String JS_BASE_PATH = System.getProperty("user.dir") + "/lib/rohr.min.js";
        // 读取内容  用的hutool库
        String jsContent = FileUtil.readString(JS_BASE_PATH, StandardCharsets.UTF_8);
        V8 runtime = V8.createV8Runtime();
        runtime.executeVoidScript(jsContent);
        // 释放内存
        runtime.release(true);
    }

在这里插入图片描述
给补上就行了var Rohr_Opt = {}; 注意一定要严格用var分号结尾
用let的话会报错
在这里插入图片描述
回归正题 然后补document 按浏览器内容能补全就补全

在这里插入图片描述
然后就是一些window navigator 自己补全就行

然后就是这个方法会报错 只能修改源码 这个参数e直接修改为空数组 分析的文章也有些 也可以按文章改
在这里插入图片描述

					filter: function(e, dY) {
                        var dQ, iH = [];
                        // 直接改为空数组
                        e = [];
                        for (dQ = 0; dQ < e.length; dQ++) {
                            dY(e[dQ], dQ, e) && iH.push(e[dQ])
                        }
                        ;return iH
                    },

然后j2v8是没有浏览器的setTimeoutsetInterval方法的 直接补空的
在这里插入图片描述

function setTimeout(arg1, arg2) {}
function setInterval(arg1, arg2) {}

在这里插入图片描述
已经能正常运行 然后添加function进行调用
Rohr_Opt是之前添加的 经过脚本运行完会有一个reload方法 参数为url 可以自行搜索reload方法然后断点看入参

function generateToken(url) {
    return Rohr_Opt.reload(url);
}

接下来就是java调用了

	public void runScript() {
        // 文件地址
        String JS_BASE_PATH = System.getProperty("user.dir") + "/lib/rohr.min.js";
        // 读取内容  用的hutool库
        String jsContent = FileUtil.readString(JS_BASE_PATH, StandardCharsets.UTF_8);
        V8 runtime = V8.createV8Runtime();
        runtime.executeVoidScript(jsContent);
        // 函数入参数组
        V8Array param = new V8Array(runtime);
        param.push("http://xxxx.com");
        // 运行函数
        String ret = runtime.executeStringFunction("generateToken", param);
        System.out.println(ret);
        // 记得手动释放
        param.release();
        // 释放内存
        runtime.release(true);
    }

在这里插入图片描述
成功生成
测试一下 根据之前文章还需要一个mtgsig参数 没问题

在这里插入图片描述

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值