난독화

|

1. Split 기법

 

문자열을 다수의 string 변수에 잘게 나눈 후 마지막에 재조합하는 방식

var a = "<h";
var b = "</h";
var c = "M";
var d = "1>";
var e = "AT";
var f = "1>";
var g = "AD";
var h = "H";

document.write(a + f + c + g + h + e + b + d); 

2. escape()/ unescape()

 

escape 함수는 ASCII 형태의 문자열을 ISO Latin-1 형태로 변환해 주는 함수(문자열을 encode)

unescape 함수는 그와 반대로 반환(문자열을 decode; escaping된 문자열을 정상적인 문자로 치환)

알파벳과 숫자, *, @, -, _, +, / 를 제외한 특수문자만 해당

document.write(escape("MADHAT!@#$%^&*"));
document.write(" ");
document.write(unescape("MADHAT%21@%23%24%25%5E%26*"));

3. eval

 

문자열을 코드로 인식하게 해주는 함수

var a = "document.write('\x4d\x41\x44\x48\x41\x54')";

eval(a);

// \ddd : 2개의 8진수(ddd)로 지정된 Latin-1 문자

 

4. Hexademical / Decimal

Hexademical 은 16진수를 Decimal은 10진수를 의미.

어떤 문자열이 있을때, 이를 알아보기 어렵게 16진수 혹은 10진수 값으로 바꾸어 입력.

이때, String.fromCharCode 혹은 String.charCodeAt 함수를 사용

String.fromCharCode은 숫자 -> 문자로 변환하는 함수.

String.charCodeAt은 특정 위치의 문자를 아스키코드의 숫자로 변환하는 함수.

Mazilla나 JSDEtox와 같은 툴로 바로 풀리는 난독화임.

Hexademical의 경우 주로 나오는 난독화의 형시은 %(숫자)나 \x(숫자)

\x(숫자)는 %로 치환 후 분석.

document.write('\x4d\x41\x44\x48\x41\x54\x20');
document.write(String.fromCharCode(0x4d,0x41,0x44,0x48,0x41,0x54,0x20));
document.write(String.fromCharCode(77,65,68,72,65,84,32));

document.write(String.fromCharCode("LADHAT".charCodeAt(0) + 1));

5. XOR 기법

XOR 암/복호화 방식 : 평문 ^ KEY = 암호문 // 암호문 ^ KEY = 평문

XOR 연산의 성질

 교환법칙 : A ^ B = B ^ A

 결합법칙 : (A ^ B) ^ C = A ^ (B ^ C)

 항등원 : A ^ 0 = A

 역원 : A ^ A = 0

document.write(String.fromCharCode(92 ^ 17, 80 ^ 17, 85 ^ 17, 89 ^ 17, 80 ^ 17, 69 ^ 17));

 

 

'JavaScript' 카테고리의 다른 글

jQuery를 효율적으로 작성하는 방법  (0) 2021.05.06
Navigator  (0) 2021.04.09
Coding Convention  (0) 2021.04.02
성능 향상을 위한 자바스크립트 코딩 패턴  (0) 2020.10.29
favicon.ico 404 Not found 에러  (0) 2020.08.25
And