From e9e503c6858cdf6badfb31e210c75e0fbc2ebe15 Mon Sep 17 00:00:00 2001 From: QAIU <736226400@qq.com> Date: Fri, 1 Sep 2023 18:07:21 +0800 Subject: [PATCH] =?UTF-8?q?=E8=A7=A3=E6=9E=90=E7=94=A8=E5=88=B0=E7=9A=84js?= =?UTF-8?q?=E6=96=87=E4=BB=B6=E6=94=B9=E4=B8=BAString=E6=96=B9=E5=BC=8F?= =?UTF-8?q?=E5=BC=95=E5=85=A5?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../main/java/cn/qaiu/WebClientVertxInit.java | 7 +- .../main/java/cn/qaiu/parser/impl/LzTool.java | 4 +- .../src/main/java/cn/qaiu/util/JsContent.java | 152 ++++++++++++++++++ .../main/java/cn/qaiu/util/JsExecUtils.java | 47 ++---- web-service/src/main/resources/js/lz.js | 46 ------ web-service/src/main/resources/js/ye123.js | 95 ----------- 6 files changed, 168 insertions(+), 183 deletions(-) create mode 100644 parser/src/main/java/cn/qaiu/util/JsContent.java delete mode 100644 web-service/src/main/resources/js/lz.js delete mode 100644 web-service/src/main/resources/js/ye123.js diff --git a/parser/src/main/java/cn/qaiu/WebClientVertxInit.java b/parser/src/main/java/cn/qaiu/WebClientVertxInit.java index 6ba2e30..641abf3 100644 --- a/parser/src/main/java/cn/qaiu/WebClientVertxInit.java +++ b/parser/src/main/java/cn/qaiu/WebClientVertxInit.java @@ -1,18 +1,23 @@ package cn.qaiu; import io.vertx.core.Vertx; +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; public class WebClientVertxInit { private Vertx vertx = null; private static final WebClientVertxInit INSTANCE = new WebClientVertxInit(); + private static final Logger log = LoggerFactory.getLogger(WebClientVertxInit.class); + public static void init(Vertx vx) { INSTANCE.vertx = vx; } public static Vertx get() { if (INSTANCE.vertx == null) { - throw new IllegalArgumentException("VertxInit getVertx: vertx is null"); + log.info("getVertx: Vertx实例不存在, 创建Vertx实例."); + INSTANCE.vertx = Vertx.vertx(); } return INSTANCE.vertx; } diff --git a/parser/src/main/java/cn/qaiu/parser/impl/LzTool.java b/parser/src/main/java/cn/qaiu/parser/impl/LzTool.java index 5a2a5e1..eeb6931 100644 --- a/parser/src/main/java/cn/qaiu/parser/impl/LzTool.java +++ b/parser/src/main/java/cn/qaiu/parser/impl/LzTool.java @@ -112,9 +112,7 @@ public class LzTool extends PanBase implements IPanTool { headers.set("sec-ch-ua-mobile", "sec-ch-ua-mobile"); String url = SHARE_URL_PREFIX + "/ajaxm.php"; - client.postAbs(url).putHeaders(headers).sendForm(MultiMap - .caseInsensitiveMultiMap() - .setAll(map)).onSuccess(res2 -> { + client.postAbs(url).putHeaders(headers).sendForm(map).onSuccess(res2 -> { JsonObject urlJson = res2.bodyAsJsonObject(); if (urlJson.getInteger("zt") != 1) { fail(urlJson.getString("inf")); diff --git a/parser/src/main/java/cn/qaiu/util/JsContent.java b/parser/src/main/java/cn/qaiu/util/JsContent.java new file mode 100644 index 0000000..ed80ee7 --- /dev/null +++ b/parser/src/main/java/cn/qaiu/util/JsContent.java @@ -0,0 +1,152 @@ +package cn.qaiu.util; + +public interface JsContent { + String ye123 = """ + /* + https://statics.123pan.com/share-static/dist/umi.fb72555e.js + eaefamemdead + eaefameidldy + _0x4f141a(1690439821|5790548|/b/api/share/download/info|web|3|1946841013) = 秘钥 + + _0x1e2592 1690439821 时间戳 + _0x48562f 5790548 随机码 + _0x1e37d5 /b/api/share/download/info + _0x4e2d74 web + _0x56f040 3 + _0x43bdc6 1946841013 加密时间HASH戳 + + >>>> + _0x43bdc6=''['concat'](_0x1e2592, '-')['concat'](_0x48562f, '-')['concat'](_0x406c4e) + 加密时间HASH戳 = 时间戳-随机码-秘钥 + */ + + function _0x1b5d95(_0x278d1a) { + var _0x839b57, + _0x4ed4dc = arguments['length'] > 0x2 && void 0x0 !== arguments[0x2] ? arguments[0x2] : 0x8; + if (0x0 === arguments['length']) + return null; + 'object' === typeof _0x278d1a ? _0x839b57 = _0x278d1a : (0xa === ('' + _0x278d1a)['length'] && (_0x278d1a = 0x3e8 * parseInt(_0x278d1a)), + _0x839b57 = new Date(_0x278d1a)); + var _0xc5c54a = _0x278d1a + 0xea60 * new Date(_0x278d1a)['getTimezoneOffset']() + , _0x3732dc = _0xc5c54a + 0x36ee80 * _0x4ed4dc; + return _0x839b57 = new Date(_0x3732dc), + { + 'y': _0x839b57['getFullYear'](), + 'm': _0x839b57['getMonth']() + 0x1 < 0xa ? '0' + (_0x839b57['getMonth']() + 0x1) : _0x839b57['getMonth']() + 0x1, + 'd': _0x839b57['getDate']() < 0xa ? '0' + _0x839b57['getDate']() : _0x839b57['getDate'](), + 'h': _0x839b57['getHours']() < 0xa ? '0' + _0x839b57['getHours']() : _0x839b57['getHours'](), + 'f': _0x839b57['getMinutes']() < 0xa ? '0' + _0x839b57['getMinutes']() : _0x839b57['getMinutes']() + }; + } + + + function _0x4f141a(_0x4075b1) { + + for (var _0x4eddcb = arguments['length'] > 0x1 && void 0x0 !== arguments[0x1] ? arguments[0x1] : 0xa, + _0x2fc680 = function() { + for (var _0x515c63, _0x361314 = [], _0x4cbdba = 0x0; _0x4cbdba < 0x100; _0x4cbdba++) { + _0x515c63 = _0x4cbdba; + for (var _0x460960 = 0x0; _0x460960 < 0x8; _0x460960++) + _0x515c63 = 0x1 & _0x515c63 ? 0xedb88320 ^ _0x515c63 >>> 0x1 : _0x515c63 >>> 0x1; + _0x361314[_0x4cbdba] = _0x515c63; + } + return _0x361314; + }, + _0x4aed86 = _0x2fc680(), + _0x5880f0 = _0x4075b1, + _0x492393 = -0x1, _0x25d82c = 0x0; + _0x25d82c < _0x5880f0['length']; + _0x25d82c++) + + _0x492393 = _0x492393 >>> 0x8 ^ _0x4aed86[0xff & (_0x492393 ^ _0x5880f0.charCodeAt(_0x25d82c))]; + return _0x492393 = (-0x1 ^ _0x492393) >>> 0x0, + _0x492393.toString(_0x4eddcb); + } + + + function getSign(_0x1e37d5) { + var _0x4e2d74 = 'web'; + var _0x56f040 = 3; + var _0x1e2592 = Math.round((new Date().getTime() + 0x3c * new Date().getTimezoneOffset() * 0x3e8 + 28800000) / 0x3e8).toString(); + var key = 'a,d,e,f,g,h,l,m,y,i,j,n,o,p,k,q,r,s,t,u,b,c,v,w,s,z'; + var _0x48562f = Math['round'](0x989680 * Math['random']()); + + var _0x2f7dfc; + var _0x35a889; + var _0x36f983; + var _0x3b043d; + var _0x5bc73b; + var _0x4b30b2; + var _0x32399e; + var _0x25d94e; + var _0x373490; + for (var _0x1c540f in (_0x2f7dfc = key.split(','), + _0x35a889 = _0x1b5d95(_0x1e2592), + _0x36f983 = _0x35a889['y'], + _0x3b043d = _0x35a889['m'], + _0x5bc73b = _0x35a889['d'], + _0x4b30b2 = _0x35a889['h'], + _0x32399e = _0x35a889['f'], + _0x25d94e = [_0x36f983, _0x3b043d, _0x5bc73b, _0x4b30b2, _0x32399e].join(''), + _0x373490 = [], + _0x25d94e)) + _0x373490['push'](_0x2f7dfc[Number(_0x25d94e[_0x1c540f])]); + var _0x43bdc6; + var _0x406c4e; + return _0x43bdc6 = _0x4f141a(_0x373490['join']('')), + _0x406c4e = _0x4f141a(''['concat'](_0x1e2592, '|')['concat'](_0x48562f, '|')['concat'](_0x1e37d5, '|')['concat'](_0x4e2d74, '|')['concat'](_0x56f040, '|')['concat'](_0x43bdc6)), + [_0x43bdc6, ''['concat'](_0x1e2592, '-')['concat'](_0x48562f, '-')['concat'](_0x406c4e)]; + } + + """; + String lz = """ + /** + * 蓝奏云解析器js签名获取工具 + */ + + var signObj; + + + var $, jQuery; + + $ = jQuery = function () { + return new jQuery.fn.init(); + } + + jQuery.fn = jQuery.prototype = { + init: function () { + return { + focus: function (a) { + + }, + keyup: function(a) { + + }, + ajax: function (obj) { + signObj = obj + } + + } + }, + + } + + jQuery.fn.init.prototype = jQuery.fn; + + + // 伪装jquery.ajax函数获取关键数据 + $.ajax = function (obj) { + signObj = obj + } + + var document = { + getElementById: function (v) { + return { + value: 'v' + } + }, + } + + """; + +} diff --git a/parser/src/main/java/cn/qaiu/util/JsExecUtils.java b/parser/src/main/java/cn/qaiu/util/JsExecUtils.java index 9683357..2b2f5b9 100644 --- a/parser/src/main/java/cn/qaiu/util/JsExecUtils.java +++ b/parser/src/main/java/cn/qaiu/util/JsExecUtils.java @@ -7,12 +7,6 @@ import javax.script.Invocable; import javax.script.ScriptEngine; import javax.script.ScriptEngineManager; import javax.script.ScriptException; -import java.io.FileReader; -import java.io.IOException; -import java.net.URL; -import java.nio.file.Files; -import java.nio.file.Path; -import java.nio.file.Paths; /** * 执行Js脚本 @@ -21,28 +15,17 @@ import java.nio.file.Paths; * @date 2023/7/29 17:35 */ public class JsExecUtils { - private static final String JS_PATH = "js/ye123.js"; - private static final String LZ_JS_PATH = "js/lz.js"; - - private static final String RES_PATH; private static final Invocable inv; // 初始化脚本引擎 static { ScriptEngineManager engineManager = new ScriptEngineManager(); ScriptEngine engine = engineManager.getEngineByName("JavaScript"); // 得到脚本引擎 - //获取文件所在的相对路径 - URL resource = JsExecUtils.class.getResource("/"); - if (resource == null) { - throw new RuntimeException("js resource path is null"); - } - RES_PATH = resource.getPath(); - String reader = RES_PATH + JS_PATH; - try (FileReader fReader = new FileReader(reader)) { - engine.eval(fReader); - fReader.close(); + + try { + engine.eval(JsContent.ye123); inv = (Invocable) engine; - } catch (IOException | ScriptException e) { + } catch (ScriptException e) { throw new RuntimeException(e); } } @@ -63,23 +46,11 @@ public class JsExecUtils { NoSuchMethodException { ScriptEngineManager engineManager = new ScriptEngineManager(); ScriptEngine engine = engineManager.getEngineByName("JavaScript"); // 得到脚本引擎 - try { - //获取文件所在的相对路径 - Path path; - try { - path = Paths.get(RES_PATH + LZ_JS_PATH); - } catch (RuntimeException ioe) { - path = Paths.get(RES_PATH.substring(1) + LZ_JS_PATH); - } - String jsContent = Files.readString(path) + "\n" + jsText; - engine.eval(jsContent); - Invocable inv = (Invocable) engine; - //调用js中的函数 - if (StringUtils.isNotEmpty(funName)) { - inv.invokeFunction(funName); - } - } catch (IOException e) { - throw new RuntimeException(e); + engine.eval(JsContent.lz); + Invocable inv = (Invocable) engine; + //调用js中的函数 + if (StringUtils.isNotEmpty(funName)) { + inv.invokeFunction(funName); } return (ScriptObjectMirror) engine.get("signObj"); diff --git a/web-service/src/main/resources/js/lz.js b/web-service/src/main/resources/js/lz.js deleted file mode 100644 index 7df1e7b..0000000 --- a/web-service/src/main/resources/js/lz.js +++ /dev/null @@ -1,46 +0,0 @@ -/** - * 蓝奏云解析器js签名获取工具 - */ - -var signObj; - - -var $, jQuery; - -$ = jQuery = function () { - return new jQuery.fn.init(); -} - -jQuery.fn = jQuery.prototype = { - init: function () { - return { - focus: function (a) { - - }, - keyup: function(a) { - - }, - ajax: function (obj) { - signObj = obj - } - - } - }, - -} - -jQuery.fn.init.prototype = jQuery.fn; - - -// 伪装jquery.ajax函数获取关键数据 -$.ajax = function (obj) { - signObj = obj -} - -var document = { - getElementById: function (v) { - return { - value: 'v' - } - }, -} diff --git a/web-service/src/main/resources/js/ye123.js b/web-service/src/main/resources/js/ye123.js deleted file mode 100644 index 65ec609..0000000 --- a/web-service/src/main/resources/js/ye123.js +++ /dev/null @@ -1,95 +0,0 @@ -/* -https://statics.123pan.com/share-static/dist/umi.fb72555e.js -eaefamemdead -eaefameidldy -_0x4f141a(1690439821|5790548|/b/api/share/download/info|web|3|1946841013) = 秘钥 - -_0x1e2592 1690439821 时间戳 -_0x48562f 5790548 随机码 -_0x1e37d5 /b/api/share/download/info -_0x4e2d74 web -_0x56f040 3 -_0x43bdc6 1946841013 加密时间HASH戳 - ->>>> -_0x43bdc6=''['concat'](_0x1e2592, '-')['concat'](_0x48562f, '-')['concat'](_0x406c4e) -加密时间HASH戳 = 时间戳-随机码-秘钥 -*/ - -function _0x1b5d95(_0x278d1a) { - var _0x839b57, - _0x4ed4dc = arguments['length'] > 0x2 && void 0x0 !== arguments[0x2] ? arguments[0x2] : 0x8; - if (0x0 === arguments['length']) - return null; - 'object' === typeof _0x278d1a ? _0x839b57 = _0x278d1a : (0xa === ('' + _0x278d1a)['length'] && (_0x278d1a = 0x3e8 * parseInt(_0x278d1a)), - _0x839b57 = new Date(_0x278d1a)); - var _0xc5c54a = _0x278d1a + 0xea60 * new Date(_0x278d1a)['getTimezoneOffset']() - , _0x3732dc = _0xc5c54a + 0x36ee80 * _0x4ed4dc; - return _0x839b57 = new Date(_0x3732dc), - { - 'y': _0x839b57['getFullYear'](), - 'm': _0x839b57['getMonth']() + 0x1 < 0xa ? '0' + (_0x839b57['getMonth']() + 0x1) : _0x839b57['getMonth']() + 0x1, - 'd': _0x839b57['getDate']() < 0xa ? '0' + _0x839b57['getDate']() : _0x839b57['getDate'](), - 'h': _0x839b57['getHours']() < 0xa ? '0' + _0x839b57['getHours']() : _0x839b57['getHours'](), - 'f': _0x839b57['getMinutes']() < 0xa ? '0' + _0x839b57['getMinutes']() : _0x839b57['getMinutes']() - }; -} - - -function _0x4f141a(_0x4075b1) { - - for (var _0x4eddcb = arguments['length'] > 0x1 && void 0x0 !== arguments[0x1] ? arguments[0x1] : 0xa, - _0x2fc680 = function() { - for (var _0x515c63, _0x361314 = [], _0x4cbdba = 0x0; _0x4cbdba < 0x100; _0x4cbdba++) { - _0x515c63 = _0x4cbdba; - for (var _0x460960 = 0x0; _0x460960 < 0x8; _0x460960++) - _0x515c63 = 0x1 & _0x515c63 ? 0xedb88320 ^ _0x515c63 >>> 0x1 : _0x515c63 >>> 0x1; - _0x361314[_0x4cbdba] = _0x515c63; - } - return _0x361314; - }, - _0x4aed86 = _0x2fc680(), - _0x5880f0 = _0x4075b1, - _0x492393 = -0x1, _0x25d82c = 0x0; - _0x25d82c < _0x5880f0['length']; - _0x25d82c++) - - _0x492393 = _0x492393 >>> 0x8 ^ _0x4aed86[0xff & (_0x492393 ^ _0x5880f0.charCodeAt(_0x25d82c))]; - return _0x492393 = (-0x1 ^ _0x492393) >>> 0x0, - _0x492393.toString(_0x4eddcb); -} - - -function getSign(_0x1e37d5) { - var _0x4e2d74 = 'web'; - var _0x56f040 = 3; - var _0x1e2592 = Math.round((new Date().getTime() + 0x3c * new Date().getTimezoneOffset() * 0x3e8 + 28800000) / 0x3e8).toString(); - var key = 'a,d,e,f,g,h,l,m,y,i,j,n,o,p,k,q,r,s,t,u,b,c,v,w,s,z'; - var _0x48562f = Math['round'](0x989680 * Math['random']()); - - var _0x2f7dfc; - var _0x35a889; - var _0x36f983; - var _0x3b043d; - var _0x5bc73b; - var _0x4b30b2; - var _0x32399e; - var _0x25d94e; - var _0x373490; - for (var _0x1c540f in (_0x2f7dfc = key.split(','), - _0x35a889 = _0x1b5d95(_0x1e2592), - _0x36f983 = _0x35a889['y'], - _0x3b043d = _0x35a889['m'], - _0x5bc73b = _0x35a889['d'], - _0x4b30b2 = _0x35a889['h'], - _0x32399e = _0x35a889['f'], - _0x25d94e = [_0x36f983, _0x3b043d, _0x5bc73b, _0x4b30b2, _0x32399e].join(''), - _0x373490 = [], - _0x25d94e)) - _0x373490['push'](_0x2f7dfc[Number(_0x25d94e[_0x1c540f])]); - var _0x43bdc6; - var _0x406c4e; - return _0x43bdc6 = _0x4f141a(_0x373490['join']('')), - _0x406c4e = _0x4f141a(''['concat'](_0x1e2592, '|')['concat'](_0x48562f, '|')['concat'](_0x1e37d5, '|')['concat'](_0x4e2d74, '|')['concat'](_0x56f040, '|')['concat'](_0x43bdc6)), - [_0x43bdc6, ''['concat'](_0x1e2592, '-')['concat'](_0x48562f, '-')['concat'](_0x406c4e)]; -}