/script-kiddie/002_script_kiddie/script-kiddie/node_modules/js-beautify/js/lib/unpackers/p_a_c_k_e_r_unpacker.js |
@@ -0,0 +1,83 @@ |
// |
// Unpacker for Dean Edward's p.a.c.k.e.r, a part of javascript beautifier |
// written by Einar Lielmanis <einar@jsbeautifier.org> |
// |
// Coincidentally, it can defeat a couple of other eval-based compressors. |
// |
// usage: |
// |
// if (P_A_C_K_E_R.detect(some_string)) { |
// var unpacked = P_A_C_K_E_R.unpack(some_string); |
// } |
// |
// |
|
var P_A_C_K_E_R = { |
detect: function(str) { |
return (P_A_C_K_E_R.get_chunks(str).length > 0); |
}, |
|
get_chunks: function(str) { |
var chunks = str.match(/eval\(\(?function\(.*?(,0,\{\}\)\)|split\('\|'\)\)\))($|\n)/g); |
return chunks ? chunks : []; |
}, |
|
unpack: function(str) { |
var chunks = P_A_C_K_E_R.get_chunks(str), |
chunk; |
for (var i = 0; i < chunks.length; i++) { |
chunk = chunks[i].replace(/\n$/, ''); |
str = str.split(chunk).join(P_A_C_K_E_R.unpack_chunk(chunk)); |
} |
return str; |
}, |
|
unpack_chunk: function(str) { |
var unpacked_source = ''; |
var __eval = eval; |
if (P_A_C_K_E_R.detect(str)) { |
try { |
eval = function(s) { // jshint ignore:line |
unpacked_source += s; |
return unpacked_source; |
}; // jshint ignore:line |
__eval(str); |
if (typeof unpacked_source === 'string' && unpacked_source) { |
str = unpacked_source; |
} |
} catch (e) { |
// well, it failed. we'll just return the original, instead of crashing on user. |
} |
} |
eval = __eval; // jshint ignore:line |
return str; |
}, |
|
run_tests: function(sanity_test) { |
var t = sanity_test || new SanityTest(); |
|
var pk1 = "eval(function(p,a,c,k,e,r){e=String;if(!''.replace(/^/,String)){while(c--)r[c]=k[c]||c;k=[function(e){return r[e]}];e=function(){return'\\\\w+'};c=1};while(c--)if(k[c])p=p.replace(new RegExp('\\\\b'+e(c)+'\\\\b','g'),k[c]);return p}('0 2=1',3,3,'var||a'.split('|'),0,{}))"; |
var unpk1 = 'var a=1'; |
var pk2 = "eval(function(p,a,c,k,e,r){e=String;if(!''.replace(/^/,String)){while(c--)r[c]=k[c]||c;k=[function(e){return r[e]}];e=function(){return'\\\\w+'};c=1};while(c--)if(k[c])p=p.replace(new RegExp('\\\\b'+e(c)+'\\\\b','g'),k[c]);return p}('0 2=1',3,3,'foo||b'.split('|'),0,{}))"; |
var unpk2 = 'foo b=1'; |
var pk_broken = "eval(function(p,a,c,k,e,r){BORKBORK;if(!''.replace(/^/,String)){while(c--)r[c]=k[c]||c;k=[function(e){return r[e]}];e=function(){return'\\\\w+'};c=1};while(c--)if(k[c])p=p.replace(new RegExp('\\\\b'+e(c)+'\\\\b','g'),k[c]);return p}('0 2=1',3,3,'var||a'.split('|'),0,{}))"; |
var pk3 = "eval(function(p,a,c,k,e,r){e=String;if(!''.replace(/^/,String)){while(c--)r[c]=k[c]||c;k=[function(e){return r[e]}];e=function(){return'\\\\w+'};c=1};while(c--)if(k[c])p=p.replace(new RegExp('\\\\b'+e(c)+'\\\\b','g'),k[c]);return p}('0 2=1{}))',3,3,'var||a'.split('|'),0,{}))"; |
var unpk3 = 'var a=1{}))'; |
|
t.test_function(P_A_C_K_E_R.detect, "P_A_C_K_E_R.detect"); |
t.expect('', false); |
t.expect('var a = b', false); |
t.test_function(P_A_C_K_E_R.unpack, "P_A_C_K_E_R.unpack"); |
t.expect(pk_broken, pk_broken); |
t.expect(pk1, unpk1); |
t.expect(pk2, unpk2); |
t.expect(pk3, unpk3); |
|
var filler = '\nfiller\n'; |
t.expect(filler + pk1 + "\n" + pk_broken + filler + pk2 + filler, filler + unpk1 + "\n" + pk_broken + filler + unpk2 + filler); |
|
return t; |
} |
|
|
}; |