13 Security Lab

윈도우즈 내 자바스크립트 구현 본문

Computer Science/Windows Externals

윈도우즈 내 자바스크립트 구현

Maj0r Tom 2016. 3. 24. 11:17

윈도우즈 내 자바스크립트 구현 알아보기

 

 

자바스크립트가 HTML에 접근하기 위해 사용한 함수와 객체의 인터페이스를 문서 객체 모델, 줄여서 DOM(Document Object Model)이라고 한다.

 

DOM과 자바스크립트를 혼동해 둘을 같은 선상에 두고 이해하려는 프로그래머가 있다. 그러나 이 둘은 전혀 다른 개념이다. DOM은 플랫폼이나 구체적인 언어 구현에 종속된 것이 아닌 언어 독립적 인터페이스다.

 

브라우저에서도 자바스크립트와 DOM을 별도로 나눠 구현한다. 예를 들면 인터넷 익스플로러의 자바스크립트 구현은 JScript.dll에 구현돼 있으며, DOM은 이와 별도의 파일인 mshtml.dll에 구현돼 있다.

 

WSH는 클라이언트측 스크립트 도구로서 기본적으로 VBScript / JScript를 실행할 수있고, 거의 모든 스크립트언어를 실행할 수있도록 지원

 

주 실행 파일 : 

wscript.exe  윈도우 (UI) 버전

cscript.exe 명령행에서 실행(커맨드라인) (/? 으로 옵션확인)

 

"악성 모바일 코드" (Malicious mobile code, Roger A. Grimes) 발췌

 

 

더보기

 

 

 

윈도우즈 디버깅을 통한 자바스크립트 난독화 해제

Ref. : http://scriptmalwarehunter.blogspot.kr/2013/05/windbg.html

 

Windbg 툴은 커널단에서 디버깅이 가능하게 해주는 툴입니다.

해당 툴을 이용하면 난독화 해제가 가능합니다.

인터넷 익스플로러 웹브라우저에서는 jscript.dll에서 제공해주는 함수 - COleScript::Compile - 를 통해서 자바 스크립트 코드를 해석하여 화면에 출력해줍니다.

JavaScript : JavaScript는 wed 개발에서 일반적으로 사용되는 프로그래밍 언어입니다. 코드는 웹 브라우저에서만 실행되며, 자바 스크립트는 HTML, CSS와 함께 월드 와이드 웹의 핵심 기술 중 하나입니다. JavaScript는 Brendan Eich에 의해 설계되었으며 1995 년 12 월 4 일에 처음 등장했습니다.
JScript : JScript는 Microsoft JavaScript의 변형 인 JScript와 동일합니다. JScript는 JaveScript의 상표가 Oracle Corporation이므로 Microsoft가 상표 문제를 피하기를 원했기 때문에 구현을 위해 이름이 붙여졌습니다.

2) iexplorer.exe를 이용하여 해당 HTML 문서를 실행시킵니다. 그렇게 하면 해당 스크립트 코드를 실행할 것인지 묻는 경고창이 보입니다. 이때 Windbg 툴을 이용하여 iexplorer.exe 프로세스를 Attach 시킵니다.

 

3) iexplorer.exe 프로세스가 Attach 한 다음, Windbg툴의 Commmand창에 다음과 같은 명령을 내립니다.

bu jscript!COleScript::Compile

 

- 위의 명령은 jscript.dll 파일의 COleScript::Compile 함수에 브레이크 포인터를 거는 것입니다.

그렇게 한 다음 해당 HTML 문서를 실행시키면 다음과 같이 브레이크 포인터가 걸린 것을 확인 할 수 있습니다.

 

그러면 이번엔 다음과 같이 명령을 줍니다.

bu jscript!COleScript::Compile "dt wchar_t* esp+8; gc"

 

- 위의 명령은 전에 내린 명령과 동일하게  jscript.dll 파일의 COleScript::Compile 함수에 브레이크 포인터를 거는 것이지만, 조건부 브레이크 포인터를 거는 것입니다.

조건부? 무슨 조건일까요? esp 레지스터의 0x8h 위치의 값(해당 값의 타입은 wchar_t*)을 출력해주라는 것입니다. 해당 값은 바로 우리가 원하는 난독화가 해제된 코드입니다.

다음과 같습니다.

 

이러한 방법을 이용하면 어떤 난독화 코드든 인터넷 익스플로러 웹브라우저에서 실행가능한 코드라면 무엇이든지 난독화가 풀린 코드를 확인할 수 있습니다.

 

+ 추가 Ref.2 : http://binaryhax0r.blogspot.kr/2012/10/windbg-way-to-decrypt-obfuscated-js.html

 

+ 추가 Ref.3 : http://dontstuffbeansupyournose.com/2008/11/23/javascript-malware-deobfuscation

 

+  다른 방법 : 가상 webkit을 구현해서 후킹, 난독화를 푸는 시스템 (urlquery.net 에서 구현)

 

+ 윈도우즈가 아닌 다른 3party 모듈 사용  : 

     v8 -> 구글 스크립트 엔진(Chrome)

 

     스파이더 몽키 -> 모질라

Comments