글
[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 |