난독화
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));