- 扫描 ID:
- 9df0f94d-df24-4a6c-94cd-d2f9967ced40已完成
- 提交的 URL:
- https://lun2.tv/已重定向
- 报告完成时间:
链接 · 找到 0 个
从页面中识别出的传出链接
JavaScript 变量 · 找到 19 个
在页面窗口对象上加载的全局 JavaScript 变量是在函数外部声明的变量,可以从当前范围内的代码中的任何位置访问
名称 | 类型 |
---|---|
onbeforetoggle | object |
documentPictureInPicture | object |
onscrollend | object |
$ | function |
jQuery | function |
QRCode | function |
CryptoJS | object |
config | object |
templateData | object |
WEB_OPTIONS | object |
控制台日志消息 · 找到 1 条
记录到 Web 控制台的消息
类型 | 类别 | 记录 |
---|---|---|
log | javascript |
|
HTML
页面的原始 HTML 正文
<!DOCTYPE html><html lang="cn"><head>
<meta charset="UTF-8">
<script type="text/javascript" async="" src="https://s9.cnzz.com/z.js?id=1281390920"></script>
<meta name="viewport" content="maximum-scale=1.0,minimum-scale=1.0,user-scalable=0,width=device-width,initial-scale=1.0,viewport-fit=cover">
<meta name="theme-color" content="#111618">
<title></title>
<meta property="og:description" name="description" id="description" content="">
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
<meta name="viewport" content="width=device-width,initial-scale=1,user-scalable=no">
<script type="text/javascript" src="/js/jquery.min.js"></script>
<script type="text/javascript" src="/js/qrcode.min.js"></script>
<script type="text/javascript" src="/js/crypto-js.min.js"></script>
<script type="text/javascript" src="/js/aes.min.js"></script>
<script type="text/javascript" src="/js/enc-utf8.min.js"></script>
<link id="favicon" rel="icon">
<style>
html {
background: #050505;
text-align: center;
}
body {
margin: 0;
color: #fff;
}
#body {
max-width: 500px;
height: 100vh;
background: #333;
margin: 0 auto;
position: relative;
font-size: 14px;
overflow-y: auto;
}
#body * {
box-sizing: border-box;
}
#body p {
margin: 5px 0;
}
#body .top {
padding: 30px 0 0 0;
background: #000;
}
#body .foot {
padding: 20px 20px 60px;
font-size: 15px;
}
#body .foot b {
color: #ffd07d;
}
#body .foot p {
margin: 10px 0;
}
#body .color {
color: #6dc1fe;
}
#body .text-color {
background-size: 400% 400%;
background-image: linear-gradient(
to left,
#6dc1fe,
#ff8000,
#fff200,
#51ff00,
#00d0ff,
#9000ff,
#ff008c
);
-webkit-background-clip: text;
animation: text-color 5s ease infinite;
color: transparent;
margin: 0 5px;
}
#body .logo {
width: 60px;
height: 60px;
margin: 10px auto;
}
#body .logo img {
width: 100%;
height: 100%;
object-fit: cover;
border-radius: 6px;
}
#body .main {
margin: 10px;
background: #222;
border-radius: 10px;
padding: 10px;
font-size: 14px;
}
#body .main .domain {
margin: 10px;
background: #000;
padding: 9px 2px;
border-radius: 20px;
}
#body .main .domain a {
color: #6dc1fe;
text-decoration: none;
}
#body .tips {
padding: 10px;
text-align: left;
}
#body .tips .li {
padding: 5px 0;
}
#body .tips p {
margin: 2px 0 0 1em;
}
#body .ar1 {
font-size: 10px;
opacity: 0.7;
margin: 0 0 -3px 0;
}
#body .ar2 {
font-size: 16px;
}
#body .qrcode {
width: 150px;
height: 150px;
border: 2px solid #6dc1fe;
margin: 20px auto;
background: #fff;
border-radius: 5px;
}
#body .qrcode img,
#body .qrcode canvas {
width: 100%;
height: 100%;
}
#domainContent{
text-align: center;
}
.navigation-buttons {
display: flex;
flex-direction: row;
justify-content: space-around;
margin-top: 30px;
}
.btn {
flex: none;
width: 150px;
padding: 12px 15px;
font-size: 14px;
font-weight: bold;
text-align: center;
color: #fff;
background: linear-gradient(45deg, #6dc1fe, #009cfa);
border-radius: 20px;
cursor: pointer;
transition: all 0.3s ease;
box-shadow: 0 4px 6px rgba(0, 0, 0, 0.1);
text-transform: uppercase;
}
.btn:hover {
transform: translateY(-2px);
box-shadow: 0 6px 8px rgba(0, 0, 0, 0.15);
background: linear-gradient(45deg, #ff8000, #6dc1fe);
}
.btn:active {
transform: translateY(1px);
box-shadow: 0 2px 4px rgba(0, 0, 0, 0.1);
}
@keyframes text-color {
0% { background-position: 0% 50%; }
50% { background-position: 100% 50%; }
100% { background-position: 0% 50%; }
}
@-moz-keyframes text-color {
0% {
background-position: 0% 50%;
}
50% {
background-position: 100% 50%;
}
}
@-webkit-keyframes text-color {
0% {
background-position: 0% 50%;
}
50% {
background-position: 100% 50%;
}
}
@-o-keyframes text-color {
0% {
background-position: 0% 50%;
}
50% {
background-position: 100% 50%;
}
}
@keyframes text-color {
0% {
background-position: 0% 50%;
}
50% {
background-position: 100% 50%;
}
}
</style>
</head>
<body>
<div id="body">
<div class="top">
<div class="logo"><img id="logo"></div>
<div class="main">
<p id="title"></p>
<div class="qrcode" id="qrcode"></div>
<div class="domain" style="text-align: left;">
<span id="domainContent" class="color"></span>
</div>
</div>
<div class="tips" style="text-align: left;">
<span id="wordContent"></span>
</div>
<div class="arrow">
<div class="ar1 color">▼</div>
<div class="ar2 color">▼</div>
</div>
</div>
<div class="foot">
<p><span>完成</span><b>屏幕截图</b></p>
<p>
<span class="text-color">页面跳转倒计时<span id="countDown"></span>秒</span>
</p>
<div class="navigation-buttons">
<div class="btn first">进入本站</div>
<div class="btn second">进入极速纯净版</div>
</div>
</div>
</div>
<script src="config.js"></script>
<script>
var interval;
/**
* 业务公共解密方法
* @param {any} data - 传入的包含加密数据的对象
* @param {string} secretKey - 用于解密的密钥(Base64格式)
* @returns {any} - 解密后的JSON对象或原始数据
*/
// 解密
function aesDe(ciphertext) {
// 检查输入参数
if (!ciphertext) {
console.warn('解密失败:输入的密文不能为空')
return ciphertext
}
try {
const keyBytes = CryptoJS.enc.Utf8.parse("zH3JDuCRXVGa3na7xbOqpx1bw6DAkbTP")
const decrypted = CryptoJS.AES.decrypt(ciphertext, keyBytes, {
iv: keyBytes,
mode: CryptoJS.mode.CBC,
padding: CryptoJS.pad.Pkcs7
})
return CryptoJS.enc.Utf8.stringify(decrypted)
} catch (error) {
console.error(`解密失败:${error}`)
return ''
}
}
// 加密
// function aesEn(obj) {
// let encrypt = CryptoJS.AES.encrypt(
// CryptoJS.enc.Utf8.parse(obj),
// CryptoJS.enc.Utf8.parse('6E31ECDEF3EEC0E6'),
// {
// mode: CryptoJS.mode.ECB,
// padding: CryptoJS.pad.Pkcs7
// }
// );
// return encrypt.toString();
// }
// 随机选择并调用 jsonApiList 中的一个域名
function getRandomJsonApi(jsonApiList) {
if (!Array.isArray(jsonApiList) || jsonApiList.length === 0) {
console.warn("jsonApiList 为空或不是一个有效的数组");
return null;
}
const randomIndex = Math.floor(Math.random() * jsonApiList.length);
return jsonApiList[randomIndex];
}
function getJsonData() {
const domainUrl = window.location.origin;
let domainName = window.location.hostname;
const tenantId = window.config?.tenantId || '1';
const webSiteId = window.config?.webSiteId || '1';
const templateId = window.config?.templateId || '1';
let url = ''
// 如果是测试环境或者开发环境
if (domainUrl.includes("localhost") || domainUrl.includes("test")) {
if (domainUrl.includes("localhost")) {
domainName = 'test.mediadiversion.dfre45.com'
}
url = `http://mediajson.dfre45.com/pages/nav/${tenantId}/${webSiteId}/${templateId}/result.json`
// http://mediajson.dfre45.com/pages/nav/1/1/1/result.json
} else {
const jsonApiList = window.config?.jsonApiList;
const randomApi = getRandomJsonApi(jsonApiList);
url = `${randomApi}/pages/nav/${tenantId}/${webSiteId}/${templateId}/result.json`;
}
// 获取接口数据
fetch(url)
.then(response => response.text())
.then(res => {
if (!res) return;
let jsonData = null
try {
jsonData = JSON.parse(res)
if (jsonData?.json_data) {
const info = aesDe(jsonData.json_data)
console.log(JSON.parse(info));
initPage(JSON.parse(info))
}
} catch (error) {
console.error('解析json数据失败', error)
}
})
}
function initPage(resData) {
const adDomains = resData?.adDomains;
const adDomain = adDomains[Math.floor(Math.random() * adDomains.length)];
const logoUrl = adDomain + resData?.logo; // logo
document.getElementById("logo").setAttribute("src", logoUrl); //logo
document.getElementById("title").innerHTML = resData?.title; // 提醒文字
var qrcode = new QRCode(document.getElementById("qrcode"), {
width: 150,
height: 150,
useSVG: true,
});
qrcode.makeCode(resData?.qrDomain); // 二维码
document.getElementById("domainContent").innerHTML = decodeURIComponent(resData?.domainContent); //域名文字
document.getElementById("wordContent").innerHTML = decodeURIComponent(resData?.wordContent); //文字描述
document.getElementById("countDown").innerHTML = resData?.countDown; //倒计时
if (resData?.jumpDomain){
document.querySelector(".navigation-buttons .btn.first").addEventListener("click", function () {
clearInterval(interval);
window.location.href = resData.jumpDomain;
});
}
if (resData?.jumpDomain2){
document.querySelector(".navigation-buttons .btn.second").addEventListener("click", function () {
clearInterval(interval);
window.location.href = resData.jumpDomain2;
});
}else{
document.querySelector(".navigation-buttons .btn.second").style.display = 'none';
}
interval = setInterval(() => {
var countDown = document.getElementById("countDown");
if (countDown.innerHTML <= 0) {
clearInterval(interval);
window.location.href = resData.jumpDomain;
} else {
countDown.innerHTML -= 1;
}
}, 1000);
}
getJsonData()
</script>
</body></html>