2017-04-21 30 views
-4

我試圖解決一個challange和我得到這個腳本:的理解有一定的JS腳本

<script> 
function r(){ 
for(var r=0,e=0,a="",l=0;l<n.length;l++) 
    if(n[l].toLowerCase()!=n[l]&&(r+=1),8==++e){ 
     if(!t) 
     return; 
     a+=String.fromCharCode(r),r=0,e=0 
     } else r<<=1;return a 
} 
var e=!1,t=!1,a=setInterval(function(){ 
    e&&(t=!0,alert("Your flag is: "+r()),clearInterval(a));t=!1 
    },1e3) 
    ,n="kACgqAPgqVQbTCycnTVmofqPnOKzvBSPhLAHYtUFsBwykxefnUhiJPdugBmkHCqwrFqDAVPIjJtSShzOnyVAnwkefSZJqXmIfWPWanLtpYeFKJHRuNZgbrWsiAyjsvemyOQSiqFEsiMUraVJfQvWGNWPuSIpjpnBpHYDvoMufeHRfaPWwMrZJJWMgHvlnzTmdPDamBoDfPnpYNtrmmDPjunyxAWvSWZdrQyarFXWhCfYNQMNsxGZoWPXjEUoMAMIuXtGJDWKgPbYlMrCxBBCkhZOiKFSAQvS"; 
</script> 

它說:「你的標誌爲:......」 ,我想執行的代碼以某種方式顯示預期的警報,但我似乎找不到方法來啓動setinterval來查看警報。

有什麼想法?

+0

通常只是執行它,但代碼是錯誤的,會引發多種語法犯錯... –

+0

只是出於好奇,爲什麼你明明發布最小化代碼?你從哪裏搬來的? – gforce301

+0

challange是一個帶有gif base64的html頁面,我相信它會讓我失望並嘗試在gif中找到文本。 查看源代碼後,我發現腳本,它清楚地說明了「你的國旗在這裏......」 因此它成爲腳本的一個不受支持的問題。 – silvercr

回答

0

的格式化代碼:

function r(){ 
    var r=0,e=0,a=""; 
    for(l=0;l<n.length;l++){ 
     if(n[l]!=n[l].toLowerCase()){ 
      r++; 
     } 
     e++; 
     if(8==e){ 
      a+=String.fromCharCode(r); 
      r=0,e=0; 
     } else { 
      r<<=1; 
     } 
    } 
    return a; 
} 

http://jsbin.com/temuqosayo/edit?console

所以,你必須在8分字符塊來讀取它,然後將其轉換:

"kACgqAPg" //=> one char 

所以每到大信1加好,並且從左到右的每次迭代都執行左移,這等於* 2。所以實際上,每一個細小的字母是0,每一個大的一個1:然後

"kACgqAPg" 
01100110 

至極轉換爲字符「F」等。所以,你的代碼也可能是這樣的:

var solution= 
n.split("").map(el=>el!=el.toLowerCase()?"1":"0")//small letters=0, big letters=1 
.reduce((str,el,i)=>str+el+(!((i+1)%8)?",":""),"").split(",")//group in 8 char strings 
.reduce((str,el)=>str+String.fromCharCode(parseInt(el,2),"") //convert one group to its char 

http://jsbin.com/rahokinepi/edit?console