gpt4 book ai didi

javascript - 从控制台运行用户脚本时未定义函数

转载 作者:行者123 更新时间:2023-11-29 23:08:22 28 4
gpt4 key购买 nike

我正在尝试从 url http://kissasian.sh/Drama/My-Mister/Episode-1?id=36170 中提取链接(特定页面)从运行用户脚本时 http://kissasian.sh/Drama/My-Mister (一般页面)。但是,该网站对我尝试访问的链接进行了加密。

运行以下代码

var url = "http://kissasian.sh/Drama/My-Mister/Episode-1?id=36170";
var msg = $.ajax({type: "GET", url: url, async: false}).responseText;
console.log(msg);

$kissenc.decrypt() 内的响应文本中提供加密视频链接功能。

当从特定页面的控制台运行此函数时,返回解密链接;但是,此函数未在运行我的脚本的常规页面上定义,如下面的代码所示。

var url = "http://kissasian.sh/Drama/My-Mister/Episode-1?id=36170";
var decrypted = "";

var msg = "ui0uI3/FNJEDeMXFKFzBVr30Yc6w34jKMp2NWjnnv355ptM/1h5bostMEAZVqsyi";

$.support.cors = true;
$.ajax({type: "GET", url:url, async: false, crossDomain: true}).done(function(){decrypted = $kissenc.decrypt(msg)});

alert(decrypted);

我不熟悉 CORS,我不确定这是否会对尝试运行该函数造成问题。

同样,我无法运行 $kissenc.decrypt()通过在通用或特定页面上合并来自 kissasian.sh 域的脚本来实现功能:

var rootUrl = "http://kissasian.sh/Scripts/";
$.ajaxSetup({async:false});

var jsS = [
"common.js",
"aes.js",
"sha256.min.js",
"subo.min.js?v=3.19"
];
console.log('Loading scripts ...');
for (var i=0; i < jsS.length; i++){
console.log(jsS[i]);
$.getScript(rootUrl + jsS[i]);
}

var msg = "ui0uI3/FNJEDeMXFKFzBVr30Yc6w34jKMp2NWjnnv355ptM/1h5bostMEAZVqsyi";
var decrypted = $kissenc.decrypt(msg);
alert(decrypted);

这两种方法都依赖于解密函数的成功执行。以下代码在不使用 $kissenc.decrypt() 的情况下在更具体的页面上执行:

 $.ajax({
url: "http://kissasian.sh/Drama/My-Mister/Episode-1?id=36170",
success: function(result) {
var msg = document.getElementById('containerRoot').outerHTML;
console.log(msg);
},
crossDomain: true,
async: false,
script: true
});

但是,当我尝试通过从一般页面检索元素来查找链接时,代码再次无法正常运行。我期待 document.getElementById从特定页面提供正确的 containerRoot,但它会为执行它的一般页面提供一个。

在这三种不同的场景中,我需要其中一个来工作,我不确定是什么导致了问题。任何帮助将不胜感激!

最佳答案

有点复杂。 $kissenc对象在 subo.min 中定义被混淆的脚本依赖于已经加载的其他四个脚本,包括 jquery.allofthelights-min.js .将这些脚本放在一个数组中,就像您正在做的那样,然后 eval他们。

在那之后,window.$kissenc被定义,因此可以与之交互。但还有另一个问题:其 decrypt 的结果方法不仅取决于传入的参数,还取决于先前对 $kissenc 的属性调用$kissenc 取决于在 subo 之前执行的剧集页面顶部的某个内联脚本标记脚本运行,否则 decrypt将返回空字符串。所以,eval第一个内联 <script>在加载外部脚本之前标记。

然后,页面上出现了一堆other混淆的内联脚本标签。你需要eval他们每个人都先,直到你到达那个叫decrypt的那个- 然后,您可以调用 decrypt 你自己并获得你正在寻找的输出。

var url = "http://kissasian.sh/Drama/My-Mister/Episode-1?id=36170";
var msg = "ui0uI3/FNJEDeMXFKFzBVr30Yc6w34jKMp2NWjnnv355ptM/1h5bostMEAZVqsyi";
var rootUrl = "http://kissasian.sh/Scripts/";
var jsS = [
"common.js?v=3",
'jquery.allofthelights-min.js?v=3', // this was missing from your original code
"aes.js",
"sha256.min.js",
"subo.min.js?v=3.19"
];
console.log('Loading scripts ...');
(async () => {
const resp = await fetch(url);
const text = await resp.text();
const doc = new DOMParser().parseFromString(text, 'text/html');
// Get all inline script tags
const [first, ...inlineScripts] = doc.querySelectorAll('script:not([src])');
// we'll eval the inlineScripts later, after the subo script runs (defines $kissenc)
// but the first must be evaled before subo runs
eval(first.textContent);

// load the 5 external scripts
for (let i = 0; i < jsS.length; i++) {
const resp = await fetch(rootUrl + jsS[i]);
const text = await resp.text();
eval(text);
}

// window.$kissenc is now defined,
// now we can iterate through the inlineScripts that look obfuscated and eval them:
let textToDecode;
for (const { textContent } of inlineScripts) {
if (textContent.includes('decrypt')) {
// we've gotten to the script that decrypts;
// don't run it, instead call decrypt ourselves,
// and break out of the loop:
const match = textContent.match(/decrypt\('([^']+).+/);
textToDecode = match[1];
break;
} else if (textContent.includes('\\x') || /^\s+_/.test(textContent)) {
eval(textContent);
}
}
console.log('Decrpyting ', textToDecode);
var decrypted = $kissenc.decrypt(textToDecode);
console.log(decrypted);
})();

关于javascript - 从控制台运行用户脚本时未定义函数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/54340752/

28 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com