[9] 스크립트의 동작 흐름으로 풀어보는 난독화

난독화/난독화 강좌 2013. 5. 25. 00:55

[9] 스크립트의 동작 흐름으로 풀어보는 난독화

 

1.     /변조 사이트 확인 중 의심스크립트 확인

[그림.1] 정상사이트에 삽입된 악성 스크립트

 

 

2.     의심스크립트 분리 화면

-    한 줄로 된 의심 스크립트를 분리하여 난독화된 스크립트를 확인

[그림 2] 악성스크립트 분리

 

3.     구조를 알기 쉽게 스크립트 정리

-    스크립트는 메인 함수와 그 안에 포함된 부분함수 2개의 구조로 이루어져 있다

[그림 3] 스크립트 정리 및 구조

 

4.     난독화 패턴 분석

1)   해당 스크립트는 분석하기 어렵게 하기 위해 다수의 쓰레기 값을 추가하였다  

아래의 패턴 등 다양하게 사용되지 않는 변수를 삽입하여 실제 값을 찾기 어렵게 한다

 

var GW;

if(GW!='d'){GW='d'};      GW = d

위의 값들은 스크립트에 전혀 영향을 미치지 않는다

 

2)   부분함수 1은 메인 함수와 부분함수 2의 특정변수를 계산해주는 함수로 사용된다

3)   메인 함수와 부분함수 2에서 HEX값 및 특정 로직의 데이터 값을 삽입하여 악성코드 유포 URL

조합하게 되고 body.appendChild를 이용하여 body에 추가하여 실행하는 구조이다

 

해당 문서에서는 이러한 구조를 모르더라도 alert창을 통하여 흐름을 파악하고 key값을

   유추하여 복호화 하는 방법을 익히는 것이 목표이다

 

 

5.     난독화된 스크립트 복호화 하기

1)   다수의 변수와 함수 등을 이용하여 난독화된 스크립트를 상세히 분석하는 것보다 실행을 위해

변수들이 합쳐지는 부분, 실제 스크립트 값가지고 있는 변수(이하 key)를 찾아 보겠다

 

key값을 찾기 어렵게 함수를 사용하여 난독화되어 한 번에 찾을 수 없었다

 

2)   key값을 찾기 위해 ‘alert’을 이용하여 스크립트 동작 흐름을 알아 보았다

-   주요 부분(함수시작 등)“alert(숫자);”를 삽입  

 

[그림 4] 순서 확인을 위한 alert 삽입

 

3)   실행 시 alert 창의 순서: 1 - 9 - 2 - 4 - 3 - 5 - 6 - 3 - 8

[그림 5] 경고창 순서 확인

 

4)   ‘alert(8)’ 부분에서 스크립트가 종료되었기 때문에 ‘8’ 근처에서 key값이 실행된다고 판단하였다

- 8 부분 근처에서 key값이 될 만한 변수를 찾아보았다

[그림 6] 복호화 key값 확인

 

5)   ‘alert(8)’ 부분에 ‘alert(G)’ 삽입 결과

[그림 7] 복호화된 악성 URL 확인

 

6)    스크립트 동작 순서가 ‘6 - 3 - 8’인데 6번에서 key 값을 찾는 이유! (궁금했다면 Good!!)

- 부분을 실행을 위해 함수가 실행되고 다시 아래 부분이 실행

[그림 8] 스크립트 동작 순서 TIP

 

설정

트랙백

댓글