关于js eval 的解密方法 二

前一段时间随手写了一个关于 JS eval 的解密,但之前的代码稍微有点小问题,显示解码后的信息不完整,主要是<只进行了一次替换,现在从新调整了一下。

并且,现在也支持在代码中使用 /*....*/ 进行填充的JS代码解密,支持使用变量代替 eval 指令的混淆后代码的解密

关于 js eval 的解密方法


<!doctype html>
<html lang="en">
 <head>
  <meta charset="UTF-8">
  <meta name="Generator" content="EditPlus®">
  <meta name="Author" content="">
  <meta name="Keywords" content="">
  <meta name="Description" content="">
  <title>Decode For JS eval function</title>
 </head>
 <body>
<textarea id="jscode" style="width:100%;height:300px;"></textarea>  
<button οnclick="decode();">decode</button>  
<div id="decode_step"></div>  
<script>  
var step = 0;  
function decode(){  
    if (document.getElementById('jscode'))  
    {  
        var code = document.getElementById('jscode').value;  
        code = de_code(code);  
    }  
}  
  
function de_code(code){
    if (/^eval/gi.test(code))  
    {  
        try{  
            eval(code.replace(/^eval/gi,'var a=').replace('/(','('));  
        }catch(e){  
            alert(e);  
        }  
        var el = document.createElement('div');  
        el.style.border = '1px solid black';  
        el.style.margin = '10px';  
        el.style.padding = '10px';  
        if (!/^eval/gi.test(a))  
        {  
            var b = a;  
            b = b.replace(/</gi,'&lt;');  
            b = b.replace(/\{(?!<br(?!\w))/gi,'{<br/>');  
            b = b.replace(/\}(\s*([,;]?|else)(?!\s*([,;]|else)))/gi,'<br/>}$1');  
            b = b.replace(/\}(?!\s*(else(?!\w)|<br\/>|[,;\(\)]))/gi,'}<br/>');  
            b = b.replace(/(([^;'"]|'[^']*'|"[^"]*")+);\s*/gi,'$1;<br/>');  
            while (/\{[^\{\}]+\}/gi.test(b))  
            {  
                var c = /\{([^\{\}]*)\}/gi.exec(b);  
                b = b.replace(c[0],'{'+c[1].replace(/(<br\/>(?!$))/gi,'$1    ')+'}');  
            }  
            el.innerHTML = b;  
        }else{  
            el.innerHTML = a.replace(/</gi,'&lt;');  
        }  
        document.getElementById('decode_step').appendChild(el);  
        step ++;  
        return de_code(a);  
    }else{  
		if (/\/\*[\s\S]*?\*\//gi.test(code))
		{
			code = code.replace(/\/\*[\s\S]*?\*\//gi,' ');
			code = code.replace(/\\u[\da-f]{4}/gi,function(m){eval(m.replace('\\u','var asc=0x'));return String.fromCharCode(asc);});
			//alert(/var\s*([^\s]+)\s*=\s*[\w]+[\s\S]*?\1\s*\(/gi.test(code));
			while (/var\s*([^\s]+)\s*=\s*[\w]+[\s\S]*?\1\s*\(/gi.test(code))
			{
				code = code.replace(/var\s*([^\s]+)\s*=\s*([\w]+)([\s\S]*?)\1\s*\(/gi,'$3$2(');
				code = code.replace(/^[\s;]+/gi,'');
			}
			var el = document.createElement('div');  
			el.style.border = '1px solid black';  
			el.style.margin = '10px';  
			el.style.padding = '10px';  
            el.innerHTML = code.replace(/</gi,'&lt;');  
			document.getElementById('decode_step').appendChild(el);
			return de_code(code);
		}else{
	        return code;  
		}
    }  
}  
  
</script> 
 </body>
</html>



  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

文盲老顾

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值