- ID de l'analyse :
- 9df0f94d-df24-4a6c-94cd-d2f9967ced40Terminée
- URL soumise :
- https://lun2.tv/Redirigé
- Fin du rapport :
Liens : 0 trouvé(s)
Liens sortants identifiés à partir de la page
Variables JavaScript : 19 trouvée(s)
Les variables JavaScript globales chargées dans l'objet fenêtre d'une page sont des variables déclarées en dehors des fonctions et accessibles depuis n'importe quel endroit du code au sein du champ d'application actuel
Nom | Type |
---|---|
onbeforetoggle | object |
documentPictureInPicture | object |
onscrollend | object |
$ | function |
jQuery | function |
QRCode | function |
CryptoJS | object |
config | object |
templateData | object |
WEB_OPTIONS | object |
Messages de journal de console : 1 trouvé(s)
Messages consignés dans la console web
Type | Catégorie | Enregistrement |
---|---|---|
log | javascript |
|
HTML
Le corps HTML de la page en données brutes
<!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>