글
인생이란 공평하지 않다
인생이란 공평하지 않다. 이 사실에 익숙해져라. (빌 게이츠)
'작은 진동 > 명언' 카테고리의 다른 글
자꾸 넘어지다 보면 언젠간은... (0) | 2013.11.22 |
---|---|
선택을 고민중이면 참고해~ (0) | 2013.08.06 |
만남이란 언제나 그런 것입니다. (0) | 2013.04.30 |
내가 생각하는 "열정"의 다른 말. (0) | 2013.03.04 |
혁명이란 (0) | 2013.02.26 |
글
[6] 난독화에 자주 등장하는 자바스크립트 함수 1
[6] 난독화에 자주 등장하는 스크립트 함수 1
1. String.fromCharCode
String.fromCharCode는 아스키코드를 기준으로 숫자를 문자로 변환해주는 함수이다.
아래의 예제를 통하여 실습해 보면 쉽게 이해할 수 있을 것이다.
<script> // -- 기본 사용 예제 1 document.write(String.fromCharCode(65)); // -- 출력 1 document.write("<br>");document.write("<br>"); // -- 단지 결과값의 줄 바꾸기 역할만!!
// -- 기본 사용 예제 2 s=65 document.write( String.fromCharCode(s)); // -- 출력 2 document.write("<br>");document.write("<br>"); // -- 줄 바꾸기
// -- 문자열로 변환하는 예제 a="104,116,116,112,58,47,47,107,119,97,110,103,103,117,101,118,97,114,97,46,116,105,115,116,111, 114,121,46,99,111,109"; b=a.split(","); // -- a를 배열로 만드는 부분 c=""; for (i=0;i<b.length;i++) // -- i=0 부터 b의 길이 보다 작을 때 까지 1씩 증가 { c+=String.fromCharCode(b[i]); // -- 배열 b의 i번재 요소를 문자화해서 c 변수에 저장 } document.write(c); // -- 출력 3
</script> |
## 예제 스크립트 결과
ð A (출력 1)
ð A (출력 2)
ð http://kwangguevara.tistory.com (출력 3)
※ String.fromCharCode는 난독화된 데이터 복호화시 key 값을 문자열로 변환하여 저장하기 위해 많이 사용합니다. 때문에 key값이 저장된 변수를 찾는데 도움이 됩니다.
2. charCodeAt
String.fromCharCode의 반대라고 생각하면 된다. 문자를 숫자로 변환해주는 함수이다
≫ 기본형태: 변수(문자열).charCodeAt(자리수); -- 변수(문자열)의 (자리수)를 숫자로 변환
역시 아래의 예제를 통하여 실습해 봅시다!!
<script> // -- 기본 사용 예제 1 a="A"; document.write(a.charCodeAt(0)); // -- 출력 1 document.write("<br>");document.write("<br>"); // -- 줄 바꾸기
// -- 기본 사용 예제 2 b="ABC"; document.write(b.charCodeAt(0) + ", " +b.charCodeAt(1) + ", " + b.charCodeAt(2)); // -- 출력 2 document.write("<br>");document.write("<br>"); // -- 줄 바꾸기
// -- 문자열을 변환하는 예제 c="http://kwangguevara.tistory.com"; s=""; for (i=0;i<c.length;i++ ) { s+=c.charCodeAt(i)+", "; } document.write(s); // -- 출력 3 </script> |
## 예제 스크립트 결과
ð 65 (출력 1)
ð 65, 66, 67 (출력 2)
ð 104, 116, 116, 112, 58, 47, 47, 107, 119, 97, 110, 103, 103, 117, 101, 118, 97, 114, 97, 46, 116, 105, 115, 116, 111, 114, 121, 46, 99, 111, 109, (출력 3)
3. parseInt
String 인자 값에서 정수로 표현 가능한 부분을 10진수로 변환하여 나타내어 주는 함수이다.
≫ 기본형태: parseInt(string, 진수); -- string 진수를 10진수로 변환
* 진수 부분에는 2 ~ 36의 숫자만 들어갈 수 있다.
* 진수부분을 생략했을 때 string 부분이 0으로 시작하면 8진수로, \x로 시작하면 16진수로
처리된다.
<script> //parseInt(string, 진수) <---스트링(진수)을 10진수로 변환 a=parseInt(1010,2); document.write(a + "<br>"); // -- 출력 1 a=parseInt(1010,8); document.write(a + "<br>"); // -- 출력 2 a=parseInt(1010,16); document.write(a + "<br>"); // -- 출력 3 a=parseInt(1010,36); document.write(a + "<br>"); // -- 출력 4
// parseInt를 이용하여 Hex값을 10진수로 변환하기 b="68,74,74,70,3a,2f,2f,6b,77,61,6e,67,67,75,65,76,61,72,61,2e,74,69,73,74,6f,72,79,2e,63,6f,6d"; b=b.split(","); c=""; for (i=0;i<b.length;i++) { c+=parseInt(b[i],16)+", "; } document.write(c); // -- 출력 5 </script> |
## 예제 스크립트 결과
ð 10 (출력 1)
ð 520 (출력 2)
ð 4112 (출력 3)
ð 46692 (출력 4)
ð 104, 116, 116, 112, 58, 47, 47, 107, 119, 97, 110, 103, 103, 117, 101, 118, 97, 114, 97, 46, 116, 105, 115, 116, 111, 114, 121, 46, 99, 111, 109, (출력 5)
4. Hex값을 문자열로 변환하기
String.fromCharCode와 parseInt를 이용하여 hex값을 문자열로 변환하는 예제이다.
실제 악성스크립트에서 상당히 많이 사용되고 있으므로 확실히 익혀두기 바란다.
<script> // 응용하기 (16진수를 문자열로 변환하기) b="68,74,74,70,3a,2f,2f,6b,77,61,6e,67,67,75,65,76,61,72,61,2e,74,69,73,74,6f,72,79,2e,63,6f,6d"; b=b.split(","); c=""; for (i=0;i<b.length;i++) { c+=String.fromCharCode(parseInt(b[i],16)); // -- 16진수를 10진수로 변환 후 문자열로 변환 } document.write(c); // -- 출력 1 </script> |
## 예제 스크립트 결과
ð http://kwangguevara.tistory.com
'난독화 > 난독화 강좌' 카테고리의 다른 글
[8] Dehydrating a String (보이지 않는 코드) (0) | 2013.05.23 |
---|---|
[7] 자바스크립트의 함수 이해하기 (0) | 2013.05.19 |
[5] 블랙홀 툴킷의 PDF 난독화 풀이 (2) | 2013.05.13 |
[4] 난독화 연습 문제풀이 따라하기 I (4) | 2013.05.08 |
[3] 자바스크립트 난독화 기초 2 (0) | 2013.05.04 |
글
사쿠라 툴킷 난독화 풀이
사쿠라 툴킷 난독화 풀이
1. Sakura Exploit Toolkit 이란?
악성코드 유포에 이용되는 Web exploit Toolkit 중 하나이다. 국내에서는 많이 알려져 있지 않지만, 2012년 이뤄진 사이버 공격 유형에서 2위(22%)를 차지하고 있다. 블랙홀 툴킷과 마찬가지고 pdf, java 등 다양한 취약점을 이용한다.
[그림 1] 2012년 발생한 툴킷 유형 (ETNEWS 기사 내용 중)
2. Sakura Toolkit의 난독화
지인을 통하여 구하게 된 사쿠라 툴킷 샘플은 JAVA 취약점을 이용한 부분만 분석이 가능하였다.
Html의 input tag의 value 값을 자바스크립트의 함수로 복호화 하는 형식을 기본적으로 가지고 있으며, 독특한 점 스크립트의 특정 데이터를 자바(.Jar)파일의 Main.Class에서 복호화하여 동작하는 것이다.
3. Sakura Toolkit의 난독화 분석
분석한 샘플은 지인(설원)이 제공해준 것으로 사쿠라 툴킷 중 일부에 대한 것이며 분석 시 악성 URL은 재현되지 않아 가능한 부분만 분석하였다.
3.1 Sakura Toolkit의 구조
[그림 2] Sakura Toolkit의 구조
3.2 난독화 스크립트 분석
3.2.1 난독화 분석 1차 (‘데이터 A’ 부분 분석)
[그림 3] ‘데이터 A’ 부분과 관련 스크립트 정리
1) ‘데이터 A’ 부분과 ‘데이터 A’ 복호화 스크립트 부분만 분리한다.
2) input 부분의 value를 function hyurls(n)으로 복호화하는 형태로 구성되어 있다.
3) 복호화된 데이터가 q 변수에 저장되기 때문에 그림에서 ① 방법 또는 ② 방법으로 값에
저장되는 데이터를 확인 할 수 있다.
[그림 4] ‘데이터 A’ 부분 복호화 결과
3.2.2 난독화 분석 2차
- ‘데이터 A’ 복호화된 부분 추가 분석
[그림 5] 1차 결과 추가 분석
1) ‘데이터 A’ 복호화 부분은 if절을 사용하여 java 버전에 따라 동작하도록 구성되어 있다
2) document.write를 사용하고 있고, 빨간 박스 부분은 base64로 인코딩되어 있다.
- base64 decoding
[그림 6] malzilla를 이용한 base64 decoding
- document.write 적용 후 정리
[그림 7] document.write와 base64 디코딩 후 모습
1) 정리된 데이터를 보면 ②의 value 값 난독화된 문자로 된 것을 확인 할 수 있다.
2) ①의 부분을 보고 Main.class에서 해당 부분을 복호화 한다는 힌트를 얻을 수 있었다
- Java Decompiler를 이용한 Main.class 분석
[그림 8] Java Decompiler로 Main.class 확인
1) 샘플에 포함된 자바(.jar)파일을 Java Decompiler로 확인한다.
2) Main.class 확인 시 복호화 시 이용될 듯한 함수를 찾을 수 있었다.
3) ①의 부분을 보고 Main.class에서 해당 부분을 복호화 한다는 힌트를 얻을 수 있었다
- Main.class 코드를 이용한 난독화 해지
[그림 9] 코드 수정
1) 자바스크립트로 복호화를 하기 위해 Main.class의 함수를 [그림 9] 처럼 수정한다.
2) 난독화된 데이터를 s 변수로 삽입하고 결과값을 alert을 이용하여 확인한다.
[그림 10] 최종 결과 값
※ 확인된 URL은 재현되지 않아 추가 분석은 불가능 하였다.
3.3 PluginDectect (0.8.0) 정보
PluginDectect 부분은 블랙홀 툴킷에서도 자주 보았던 부분으로 java, pdf, flash 등 다양한 Plugin 정보를 수집해 주는 스크립트다. 이 수집된 정보를 통해 공격코드에서 취약점이 존재하는 부분을 공격하여 악성행위를 하게 된다.
해당 스크립트는 아래의 사이트에서 누구나 쉽게 원하는 부분만 포함하여 제작할 수 있다.
- http://www.pinlady.net/PluginDetectArchive/0.8.0/download/
3.4 PDF 취약점 관련 부분 (재현되지 않아, 다음 기회 ~ ㅠㅠ)