-
Analysis Code Obfuscateed VBScripttip 2011. 2. 11. 23:02
VBScript 는 텍스트 편집기에서 위와 같이 보인다. 기본적으로 확장자는 *.vbs 로 되어 있으면 윈도우 시스템에서 *.vbs 파일을 더블클릭 했을 때 cscript 에 의해서 실행되어진다. 도스명령어 창에서 cscript.exe 를 입력하면 cscript 사용법이 출력될 것이다.
[그림1] 코드 난독화된 악성 VBScript
VBScript 는 텍스트 편집기에서 눈으로 쉽게 확인할 수 있다는 단점때문에 JavaScript 와 마찬가지로 코드 낙독화(Obfuscate)를 사용하고 있다. 위 그림에서와 같은 경우 다음과 같은 절차로 코드 일반화(Normalization) 해보았다.
Code Normalization
1. 주석제거
VBScript 에서 주석은 ' 를 사용한다. 주석은 실행되는 문장과 관련이 없으므로 제거한다. 악성코드 제작자가 의미있는 주석을 달아 두었을 것이라고 기대하지 않는 것이 좋다.
2. 변수이름 단순화 및 의미 부여
일반적인 프로그래머들은 변수를 의미있는 이름으로 부여하기를 좋아한다. 더욱이 불필요한 변수의 설정은 메모리 낭비라고 생각하기 때문에 나름 최적화된 변수 사용을 고려할 것이다. 그러나 악성코드 제작자들이 사용하는 변수의 이름을 보고 그 의미를 파악할 수 있다는 것은 거의 불가능에 가깝다. 코드가 길게 느껴진다면 변수들을 의미있는 이름으로 부여하는 것이 코드 분석에 효율적이다.
3. Indentation
들여쓰기 역시 가독성있는 코드로 만들기위해 필요한 작업 중에 하나이다. 이 정도만 수행해도 코드가 훨씬 눈에 잘 들어 올 것이다.
[그림2] Code Normalization 된 코드
숨겨진 실행코드 출력
자 그런데 [그림1] 코드에서는 Execute 함수를 통해 다시 코드가 실행되게 되는데, 코드 일반화 작업만으로는 어떠한 코드가 실행되는지 알 수가 없다. 그래서 일반적으로 사용하는 방법이 MsgBox 를 통해 코드를 확인하는 방법을 사용하지만 위 샘플의 경우 코드가 길어 MsgBox 에 코드가 모두 출력되지 않는다. 그래서 아래 WriteFileText 함수를 이용하여 파일로 그 내용을 기록하는 것이 좋을 것 같다.
VBScript를 자주 사용하지 않는 필자와 같은 경우 위에서 제시한 WriteFileText 함수를 VBScript 에서 사용하기 위해서는 약간의 주의가 필요하다.VBScript 에서 Sub 는 반환값이 없는 프로시저를 말하며 Function 은 반환값이 있는 프로시저를 말한다. 반환값이 없는 Sub 를 호출할 때는 인자값을 괄호로 묶지 말아야 하며 묶고 싶을 경우에는 Call 명령을 사용 하여야 한다.
이렇게 해서 생성된 파일을 텍스트 편집기로 확인하면 다시 VBScript 코드가 보일 것이다. 이 것도 위에서 살펴본 코드 일반화 과정을 통해 보다 가독성있는 코드로 만든 후 분석하는 것이 훨씬 효율적일 것이다.
'tip' 카테고리의 다른 글
Microsoft Mathmatics Add-in (0) 2011.03.24 쉽게 윈도우 시스템 파일 복구하는 방법 (0) 2011.03.13 ASM --> C --> IDA Python Script (0) 2011.02.07 아웃룩 메일계정 비밀번호가 저장이 안될 때 (0) 2011.01.27 아웃룩(Outlook) 첨부된 실행파일 다운로드 하기 (0) 2011.01.27