소스코드를 보면 이상한 코드가 보인다. 일부만 구글링 해보면 aaencode라는 것을 알 수 있다.
aaencode decoder이다.
https://cat-in-136.github.io/2010/12/aadecode-decode-encoded-as-aaencode.html
aadecode - Decode encoded-as-aaencode JavaScript program. ['_']
aadecode - Decode encoded-as-aaencode JavaScript program. (゚Д゚) ['_'] Enter ...
cat-in-136.github.io
var enco='';
var enco2=126;
var enco3=33;
var ck=document.URL.substr(document.URL.indexOf('='));
for(i=1;i<122;i++){
enco=enco+String.fromCharCode(i,0);
}
function enco_(x){
return enco.charCodeAt(x);
}
if(ck=="="+String.fromCharCode(enco_(240))+String.fromCharCode(enco_(220))+String.fromCharCode(enco_(232))+String.fromCharCode(enco_(192))+String.fromCharCode(enco_(226))+String.fromCharCode(enco_(200))+String.fromCharCode(enco_(204))+String.fromCharCode(enco_(222-2))+String.fromCharCode(enco_(198))+"~~~~~~"+String.fromCharCode(enco2)+String.fromCharCode(enco3)){
location.href="./"+ck.replace("=","")+".php";
}
decode 결과이다.
URL에서 '=' 문자부터 끝까지 문자열을 떼어 변수 ck에 저장한다.
String.fromCharCode() 메서드는 UTF-16 코드 유닛의 시퀀스로부터 문자열을 생성해 반환한다. enco에는 \x01\x00\x02\x00...a\x00b\x00... 이런식으로 저장된다.
https://developer.mozilla.org/ko/docs/Web/JavaScript/Reference/Global_Objects/String/fromCharCode
String.fromCharCode() - JavaScript | MDN
String.fromCharCode() 메서드는 UTF-16 코드 유닛의 시퀀스로부터 문자열을 생성해 반환합니다.
developer.mozilla.org
charCodeAt 메서드는 index에 해당하는 문자의 unicode 값을 리턴한다.
https://opentutorials.org/course/50/87
charCodeAt - 생활코딩
요약 index에 해당하는 문자의 unicode 값을 리턴 문법 string.charCodeAt(index) 인자 index - 필수, 0보다 큰 정수 설명 유니코드는 모든 시스템에서 일관되게 문자를 표현하기 위한 산업표준이다. charCodeAt
opentutorials.org
테스트해보면 알파벳의 경우는 String.fromCharCode() 메서드는 숫자를 문자로 바꾸고, charCodeAt 메서드는 문자를 다시 숫자로 바꾼다.
이 문제의 코드를 전문 용어로 설명하기보다 간략하게 설명하자면 먼저 숫자를 문자로 바꾸어 enco 변수에 저장한다. 마지막 if 문에서 ecno_ 함수에 의해 문자를 숫자로 변환 후 fromCahrCode 메서드로 다시 숫자를 문자로 변환한다.
개발자 옵션의 콘솔에 들어가서 자바스크립트 코드를 복붙한다.
youaregod~~~~~~~!을 url 쿼리의 인자로 전달하자.
url 뒤에 ?hi=youaregod~~~~~~~! 로 전달하면 풀린다. hi는 임의의 값이다. 따라서 다른 문자(열)로 대체가능하다.