js代码混淆[jjencode/jjdecode]

jjencode/jjdecode是Yosuke HASEGAWA的作品,将JS代码转换成只有符号的字符串,此人还有作品aaencode/aadecode,可以将JS代码转换成常用的网络表情,具体请访问作者个人站点。

jjencode代码如下:

jjencode.js
function jjencode( gv, text ) {
var r="";
var n;
var t;
var b=[ "___", "__$", "_$_", "_$$", "$__", "$_$", "$$_", "$$$", "$___", "$__$", "$_$_", "$_$$", "$$__", "$$_$", "$$$_", "$$$$", ];
var s = "";
for( var i = 0; i < text.length; i++ ){
n
= text.charCodeAt( i );
if( n == 0x22 || n == 0x5c ){
s
+= "\\\\\\" + text.charAt( i ).toString(16);
}
else if( (0x21 <= n && n <= 0x2f) || (0x3A <= n && n <= 0x40) || ( 0x5b <= n && n <= 0x60 ) || ( 0x7b <= n && n <= 0x7f ) ){
//}else if( (0x20 <= n && n <= 0x2f) || (0x3A <= n == 0x40) || ( 0x5b <= n && n <= 0x60 ) || ( 0x7b <= n && n <= 0x7f ) ){
s += text.charAt( i );
}
else if( (0x30 <= n && n <= 0x39 ) || (0x61 <= n && n <= 0x66 ) ){
if( s ) r += "\"" + s +"\"+";
r
+= gv + "." + b[ n < 0x40 ? n - 0x30 : n - 0x57 ] + "+";
s
="";
}
else if( n == 0x6c ){ // 'l'
if( s ) r += "\"" + s + "\"+";
r
+= "(![]+\"\")[" + gv + "._$_]+";
s
= "";
}
else if( n == 0x6f ){ // 'o'
if( s ) r += "\"" + s + "\"+";
r
+= gv + "._$+";
s
= "";
}
else if( n == 0x74 ){ // 'u'
if( s ) r += "\"" + s + "\"+";
r
+= gv + ".__+";
s
= "";
}
else if( n == 0x75 ){ // 'u'
if( s ) r += "\"" + s + "\"+";
r
+= gv + "._+";
s
= "";
}
else if( n < 128 ){
if( s ) r += "\"" + s;
else r += "\"";
r
+= "\\\\\"+" + n.toString( 8 ).replace( /[0-7]/g, function(c){ return gv + "."+b[ c ]+"+" } );
s
= "";
}
else{
if( s ) r += "\"" + s;
else r += "\"";
r
+= "\\\\\"+" + gv + "._+" + n.toString(16).replace( /[0-9a-f]/gi, function(c){ return gv + "."+b[parseInt(c,16)]+"+"} );
s
= "";
}
}
if( s ) r += "\"" + s + "\"+";

r
=
gv
+ "=~[];" +
gv
+ "={___:++" + gv +",$$$$:(![]+\"\")["+gv+"],__$:++"+gv+",$_$_:(![]+\"\")["+gv+"],_$_:++"+
gv
+",$_$$:({}+\"\")["+gv+"],$$_$:("+gv+"["+gv+"]+\"\")["+gv+"],_$$:++"+gv+",$$$_:(!\"\"+\"\")["+
gv
+"],$__:++"+gv+",$_$:++"+gv+",$$__:({}+\"\")["+gv+"],$$_:++"+gv+",$$$:++"+gv+",$___:++"+gv+",$__$:++"+gv+"};"+
gv
+".$_="+
"("+gv+".$_="+gv+"+\"\")["+gv+".$_$]+"+
"("+gv+"._$="+gv+".$_["+gv+".__$])+"+
"("+gv+".$$=("+gv+".$+\"\")["+gv+".__$])+"+
"((!"+gv+")+\"\")["+gv+"._$$]+"+
"("+gv+".__="+gv+".$_["+gv+".$$_])+"+
"("+gv+".$=(!\"\"+\"\")["+gv+".__$])+"+
"("+gv+"._=(!\"\"+\"\")["+gv+"._$_])+"+
gv
+".$_["+gv+".$_$]+"+
gv
+".__+"+
gv
+"._$+"+
gv
+".$;"+
gv
+".$$="+
gv
+".$+"+
"(!\"\"+\"\")["+gv+"._$$]+"+
gv
+".__+"+
gv
+"._+"+
gv
+".$+"+
gv
+".$$;"+
gv
+".$=("+gv+".___)["+gv+".$_]["+gv+".$_];"+
gv
+".$("+gv+".$("+gv+".$$+\"\\\"\"+" + r + "\"\\\"\")())();";

return r;
}

jjdecode代码如下:

jjdecode.js
function jjdecode(text) {
var output = '';
var g = text.match(/([^=])=~\[\];/)[1];

// Building my scope
var lines = text.match(/([^;]*);/g);

var lookAhead = false;
var finalLine = '';
for(var i in lines) {
if ( ! lines[i].match(/_.\$\(_.\$\(/) && ! lookAhead) {
eval(lines[i]);
}
else {
lookAhead
= true;
finalLine
= finalLine + lines[i];

if (i == lines.length - 1) {
// _.\$\((.*)(\)\(\))
var re = new RegExp(g + '.\\$\\((.*)(\\)\\(\\))');
var reString = finalLine.match(re);
output
= eval(reString[1]);
}
}
}

// Here's the main object, hav' fun!
console.log(eval(g));

return output;
}

demo链接如下:
jjencode    jjdecode

posted @ 2011-08-09 00:17  Landon  阅读(1990)  评论(1编辑  收藏  举报