본문 바로가기

어느 한 분야를 전문적으로 연구함. 또는 그 분야./정보를 여러가지 위협으로부터 보호

Dehydrating a string Technique

Dehydrating a string Technique

스페이스와 수평탭을 이용하여 보이지 않는 공격코드를 만드는 기법입니다.

이 부분에 대한 자세한 설명은 이미 다수의 블로거에 설명이 잘 나와있습니다. 그래서 저는 소스코드상 알고리즘을 풀어나가려고 합니다.



function rcu_push(s) {
    var r = new Array();
    var curr = 0;
    while(s.charAt(curr) != '\n') {
    // s의 문자가(charAt(curr)) \n이 아닐 때 까지 반복, rcu_push함수에 사용되는 값에는 '\n'이 포함되어 있어 종료 시점을 야기시킨다. charAt는 메서드는 문자열에서 문자를 추출하는데 사용하는 메소드 이다.
        var tmp = 0; // 연산되어 저장되는 tmp 변수를 초기화
        for(var i = 6; i >= 0; i--) { //6부터 역순으로 7번 반복, 이유는 ASCII가 7bit로 구성되기 때문이다.
            if(s.charAt(curr) == ' ') { //charAt(0)이 공백이면 다음을 연산하고 아니면 연산하지 않는다.
                tmp = tmp | (Math.pow(2, i));
                // tmp에 2^i 계산하여 tmp에 저장, 이것은 2진수 값을 7 자리수만 계산하여 10진수로 변환하는 과정이다. 공백(space)을 1로 계산하기 위해 만들어졌다. 
                // Math.pow() 지수승 계산에 사용하는 함수이다.
            }
            curr++;
        }
        r.push(String.fromCharCode(tmp));
        // push() 메소드는 배열 r에 축적하여 저장하는 역할을 한다. String.fromCharCode() 메소드는 tmp안의 ASCII 값을 문자로 치환하는 역할을 한다.
    }
    return r.join('');
    // join('') 메소드는 ''를 사용함으로써 배열로 저장된 문자를 출력할 때 문자 사이의 공간을 제거함으로써 하나로 이어진 문자열로 만들어 주는 역할을 한다. 디폴트로는 ,가 사용된다.
}
Function(rcu_push("                                                                                                                                                                                                                                                     (생략)\n"))();



티스토리 툴바