2019년 6월 12일 수요일

JavaScript 난독화

https://stackoverrun.com/ko/q/3910942

JavaScript Obfuscate.

/** 
* Obfuscate a plaintext string with a simple rotation algorithm similar to 
* the rot13 cipher. 
* @param {[type]} key rotation index between 0 and n 
* @param {Number} n maximum char that will be affected by the algorithm 
* @return {[type]}  obfuscated string 
*/ 
String.prototype.obfs = function(key, n = 126) { 
    var chars = this.toString().split(''); 

    for (var i = 0; i < chars.length; i++) { 
        var c = chars[i].charCodeAt(0); 
        chars[i] = String.fromCharCode((c + key) % n); 
    } 

    return chars.join(''); 
}; 

/** 
* De-obfuscate an obfuscated string with the method above. 
* @param {[type]} key rotation index between 0 and n 
* @param {Number} n same number that was used for obfuscation 
* @return {[type]}  plaintext string 
*/ 
String.prototype.defs = function(key, n = 126) { 
    return this.toString().obfs(n - key); 
}; 

사용 방법은 아래와 같다. 시간이 없어서 코드를 그대로 긁어다 붙였지만 예상대로 동작하지 않을 수 있기 때문에 사용하기 전에 충분한 테스트가 필요하다.


"abc;123!".obfs(13) // => "nopH>?@." 
"nopH>?@.".defs(13) // => "abc;123!" 

무슨 말인가 하면 아스키 문자에는 del 키나 backspace 키 같은 제어 문자가 포함되므로 난독화 과정에서 일부 문자가 소실될 수 있는 것이다. 아스키 코드 표는 아래 링크에 잘 정리되어 있다.
https://shaeod.tistory.com/228

댓글 없음:

댓글 쓰기