개요
스페이스와 수평탭을 이용하여 보이지 않는 공격코드를 만드는 기법이다. 이 부분에 대한 자세한 설명은 이미 다수의 블로거에 설명이 잘 나와있다. 따라서 소스코드상 알고리즘을 분석하는 형태로 소개하려 한다.
- 뚜기의 S 톨이 블로그 : http://cleverdj.tistory.com/98
- 광게바라 블로그 : http://kwangguevara.tistory.com/20
- 트라님 블로그 : http://www.cyworld.com/traa/7081447
- 난독화 분석 팀 블로그 : http://scriptmalwarehunter.blogspot.kr/2013/05/0x20space-0x09tab.html
분석
function rcu_push(s) {
var r = new Array();
var curr = 0;
while(s.charAt(curr) != '\n') {
// s의 문자가(charAt(curr)) \n이 아닐 때 까지 반복, rcu_push함수에 사용되는 값에는 '\n'이 포함되어 있어 종료 시점을 야기시킨다. charAt는 메서드는 문자열에서 문자를 추출하는데 사용하는 메소드 이다.
var tmp = 0; // 연산되어 저장되는 tmp 변수를 초기화
for(var i = 6; i >= 0; i--) { //6부터 역순으로 7번 반복, 이유는 ASCII가 7bit로 구성되기 때문이다.
if(s.charAt(curr) == ' ') { //charAt(0)이 공백이면 다음을 연산하고 아니면 연산하지 않는다.
tmp = tmp | (Math.pow(2, i));
// tmp에 2^i 계산하여 tmp에 저장, 이것은 2진수 값을 7 자리수만 계산하여 10진수로 변환하는 과정이다. 공백(space)을 1로 계산하기 위해 만들어졌다.
// Math.pow() 지수승 계산에 사용하는 함수이다.
}
curr++;
}
r.push(String.fromCharCode(tmp));
// push() 메소드는 배열 r에 축적하여 저장하는 역할을 한다. String.fromCharCode() 메소드는 tmp안의 ASCII 값을 문자로 치환하는 역할을 한다.
}
return r.join('');
// join('') 메소드는 ''를 사용함으로써 배열로 저장된 문자를 출력할 때 문자 사이의 공간을 제거함으로써 하나로 이어진 문자열로 만들어 주는 역할을 한다. 디폴트로는 ,가 사용된다.
}
Function(rcu_push(" (생략)\n"))();
반응형
'Information Security > Malware' 카테고리의 다른 글
공다팩에 대한 생각 (0) | 2013.08.27 |
---|---|
php obfuscation (0) | 2013.08.10 |
Deobfuscation 사이트 (0) | 2013.07.11 |
Unicode Obfuscated (0) | 2013.06.24 |
Hexdecimal Obfuscation #02 (0) | 2013.06.19 |