⑴ JS加密方法
本文一共介绍了七种方法:
一:最简单的加密解密
二:转义字符""的妙用
三:使用Microsoft出品的脚本编码器Script Encoder来进行编码 (自创简单解码)
四:任意添加NUL空字符(十六进制00H) (自创)
五:无用内容混乱以及换行空格TAB大法
六:自写解密函数法
七:错误的利用 (自创)
在做网页时(其实是网页木马呵呵),最让人烦恼的是自己辛辛苦苦写出来的客户端IE运行的javaSCRIPT代码常常被别人轻易的拷贝,实在让自己的心里有点不是滋味,要知道自己写点东西也挺累的......^*^
但我们也应该清楚地认识到因为JAVASCRIPT代码是在IE中解释执行,要想绝对的保密是不可能的,我们要做的就是尽可能的增大拷贝者复制的难度,让他知难而退(但愿~!~),下面我结合自己这几年来的实践,及个人研究的心得,和大家一起来探讨一下网页中JAVASCRIPT代码的加密解密技术。
以加密下面的JAVASCRIPT代码为例:
<SCRIPT LANGUAGE="JavaScript">
alert("《黑客防线》");
</SCRIPT>
一:最简单的加密解密
大家对于JAVASCRIPT函数escape()和unescape()想必是比较了解啦(很多网页加密在用它们),分别是编码和解码字符串,比如例子代码用escape()函数加密后变为如下格式:
alert%28%22%u9ED1%u5BA2%u9632%u7EBF%22%29%3B
如何?还看的懂吗?当然其中的ASCII字符"alert"并没有被加密,如果愿意我们可以写点JAVASCRIPT代码重新把它加密如下:
%61%6C%65%72%74%28%22%u9ED1%u5BA2%u9632%u7EBF%22%29%3B
呵呵!如何?这次是完全都加密了!
当然,这样加密后的代码是不能直接运行的,幸好还有eval(codeString)可用,这个函数的作用就是检查JavaScript代码并执行,必选项 codeString 参数是包含有效 JavaScript 代码的字符串值,加上上面的解码unescape(),加密后的结果如下:
<SCRIPT LANGUAGE="JavaScript">
var code=unescape("%61%6C%65%72%74%28%22%u9ED1%u5BA2%u9632%u7EBF%22%29%3B");
eval(code)
</SCRIPT>
是不是很简单?不要高兴,解密也就同样的简单,解密代码都摆给别人啦(unescape())!呵呵
二:转义字符""的妙用
大家可能对转义字符""不太熟悉,但对于JavaScript提供了一些特殊字符如:n (换行)、 r (回车)、' (单引号 )等应该是有所了解的吧?其实""后面还可以跟八进制或十六进制的数字,如字符"a"则可以表示为:"141"或"x61"(注意是小写字符"x"),至于双字节字符如汉字"黑"则仅能用十六进制表示为"u9ED1"(注意是小写字符"u"),其中字符"u"表示是双字节字符,根据这个原理例子代码则可以表示为:
八进制转义字符串如下:
<SCRIPT LANGUAGE="JavaScript">
eval("")
</SCRIPT>
十六进制转义字符串如下:
<SCRIPT LANGUAGE="JavaScript">
eval("")
</SCRIPT>
这次没有了解码函数,因为JavaScript执行时会自行转换,同样解码也是很简单如下:
<SCRIPT LANGUAGE="JavaScript">
alert("")
</SCRIPT>
就会弹出对话框告诉你解密后的结果!
⑵ js中eval的使用问题
eval函数接收一个参数s,如果s不是字符串,则直接返回s。否则执行s语句。如果s语句执行结果是一个值,则返回此值,否则返回undefined。
楼主的例子里面“123,456”是个字符串,所以作为语句执行。这又涉及到逗号运算符。
JavaScript中逗号运算符(,)是顺序执行两个表达式。
使用方法:expression1, expression2
其中expression1是任何表达式。
expression2是任何表达式。
JavaScript中逗号运算符, 运算符使它两边的表达式以从左到右的顺序被执行,并获得右边表达式的值。
所以楼主的例子是将123和456作为2个表达式处理,最后返回的是456
-------------
去掉eval,或者用parseInt来从字符串提取数字
⑶ 介绍一点js加密的方法
一:最简单的加密解密
大家对于JAVASCRIPT函数escape()和unescape()想必是比较了解啦(很多网页加密在用它们),分别是编码和解码字符串,比如例子代码用escape()函数加密后变为如下格式:
alert%28%22%u9ED1%u5BA2%u9632%u7EBF%22%29%3B
如何?还看的懂吗?当然其中的ASCII字符"alert"并没有被加密,如果愿意我们可以写点JAVASCRIPT代码重新把它加密如下:
%61%6C%65%72%74%28%22%u9ED1%u5BA2%u9632%u7EBF%22%29%3B
呵呵!如何?这次是完全都加密了!
当然,这样加密后的代码是不能直接运行的,幸好还有eval(codeString)可用,这个函数的作用就是检查JavaScript代码并执行,必选项 codeString 参数是包含有效 JavaScript 代码的字符串值,加上上面的解码unescape(),加密后的结果如下:
<SCRIPT LANGUAGE="JavaScript">
var code=unescape("%61%6C%65%72%74%28%22%u9ED1%u5BA2%u9632%u7EBF%22%29%3B");
eval(code)
</SCRIPT>
是不是很简单?不要高兴,解密也就同样的简单,解密代码都摆给别人啦(unescape())!呵呵
二:转义字符"\"的妙用
大家可能对转义字符"\"不太熟悉,但对于JavaScript提供了一些特殊字符如:\n (换行)、 \r (回车)、\' (单引号 )等应该是有所了解的吧?其实"\"后面还可以跟八进制或十六进制的数字,如字符"a"则可以表示为:"\141"或"\x61"(注意是小写字符"x"),至于双字节字符如汉字"黑"则仅能用十六进制表示为"\u9ED1"(注意是小写字符"u"),其中字符"u"表示是双字节字符,根据这个原理例子代码则可以表示为:
八进制转义字符串如下:
<SCRIPT LANGUAGE="JavaScript">
eval("\141\154\145\162\164\50\42\u9ED1\u5BA2\u9632\u7EBF\42\51\73")
</SCRIPT>
十六进制转义字符串如下:
<SCRIPT LANGUAGE="JavaScript">
eval("\x61\x6C\x65\x72\x74\x28\x22\u9ED1\u5BA2\u9632\u7EBF\x22\x29\x3B")
</SCRIPT>
这次没有了解码函数,因为JavaScript执行时会自行转换,同样解码也是很简单如下:
<SCRIPT LANGUAGE="JavaScript">
alert("\x61\x6C\x65\x72\x74\x28\x22\u9ED1\u5BA2\u9632\u7EBF\x22\x29\x3B")
</SCRIPT>
就会弹出对话框告诉你解密后的结果!
⑷ C#对于 eval加密的JS 有什么办法解密获取跳转URL
给你个解密函数:
private string Eval(string stringjs)
{
string MyJs = "function Eval(code){code2=code.replace(/^eval/,'');return eval(code2);}";
object[] _params = new object[1];
_params[0] = stringjs;
MSScriptControl.ScriptControl js = new MSScriptControl.ScriptControl();
js.Language = "javascript";
js.AddCode(MyJs);
string result = js.Run("Eval", _params);//NET4.0以下为js.Run("Eval",ref _params).ToString();
return result;
}
~如果你认可我的回答,请及时点击【采纳为满意回答】按钮
~~手机提问的朋友在客户端右上角评价点【满意】即可。
~你的采纳是我前进的动力
~~O(∩_∩)O,记得好评和采纳,互相帮助,谢谢。
⑸ js混淆加密后 如何使用
js这种东西,加啥密,还是jq写的,混淆肯定容易混出问题。
你再怎么加浏览器都要解析出来能跑才行,浏览器能跑,就意味着很好解密。
⑹ JAVASCRIPT 里 EVAL的用法
eval顾名思义是执行语句的作用,在浏览器地址栏中输入:
javascript:eval(1+2)
浏览器将以写文档流方式输出3.
(有的系统删除了javascript:协议已注册的程序,则无法使用javascript:协议)
有时候遇到一个问题,比如说有10个radio元素,它们的ID都是以ye01,ye02,ye03来命名,那么在循环语句中你就很难动态的取到对象的句柄,有了eval可以先把相同的字符串和01,02..先合并起来再执行后面的语句,就可以取到对象的句柄了.
如:
<script defer>
var a="ye";
b="1818";
c=eval(a+b);
alert(c.value);
</script>
<input id="ye1818" value="你好" />
eval是执行的意思,你把变量赋值这些都放在里面是不合理的.
⑺ javascript中eval的用法
JavaScript eval() 函数
JavaScript 全局对象
定义和用法:
eval() 函数可计算某个字符串,并执行其中的的 JavaScript 代码。
语法:
eval(string)
返回值:
通过计算 string 得到的值(如果有的话)。
说明:
该方法只接受原始字符串作为参数,如果 string 参数不是原始字符串,那么该方法将不作任何改变地返回。因此请不要为 eval() 函数传递 String 对象来作为参数。
如果试图覆盖 eval 属性或把 eval() 方法赋予另一个属性,并通过该属性调用它,则 ECMAScript 实现允许抛出一个 EvalError 异常。
抛出:
如果参数中没有合法的表达式和语句,则抛出 SyntaxError 异常。
如果非法调用 eval(),则抛出 EvalError 异常。
如果传递给 eval() 的 Javascript 代码生成了一个异常,eval() 将把该异常传递给调用者。
(7)eval加密js怎么运行扩展阅读:
调用eval函数的三种情况:
1、直接调用
直接调用时,eval函数相关的执行环境属性ThisBinding,LexicalEnvironment,VariableEnvironment的值如下:
a) ThisBinding是调用eval函数时,调用方执行环境的ThisBinding
b) LexicalEnvironment是调用eval函数时,调用方执行环境的LexicalEnvironment
c) VariableEnvironemnt是调用eval函数时,调用方执行环境的VariableEnvironment
2、间接调用
所谓间接调用,即将eval赋值给另一个变量后在调用
3、严格模式下的eval
在严格模式下,eval的LexicalEnvironment,VariableEnvironment指向属于eval自己的Lexcial Environment,而不是调用方的Lexical Environment,但是ThisBinding还是调用方的ThisBinding。
同时,在严格模式下如果eval直接调用,那么eval的Lexical Environment的outer指针指向调用方的Lexical Environment,否则,如果是间接调用,那么eval的Lexical Environment的outer指针指向全局环境的Lexical Environment。
参考资料来源:网络--eval()
⑻ 请清楚、明了地介绍一下js中eval的用法请不要复制十分感谢
最简单的eval的例子:
s='3+5';
document.write(s,'=');
document.write(eval(s));
你能说出结果吗?
结果是:
3+5=8
那么eval是什么?你试着说一下看。是不是把字符串变量或者常量,作为js的代码进行解释,请再回忆一下上面的例子,然后看了下面的例子你就算完全懂eval了:
s='alert(123)';
eval(s);
上面的代码运行时,会弹出一个提示窗口,内容是123。
⑼ js加密后能在网页中运行吗怎么运行
可以 运行的。加密之后你不需要做其它事情,同样可以识别的。
http://zh-cn.bin2hex.com/javascript_compressor_obfuscator_encryption.html
这个工具可以加密。上面还有解密工具
⑽ C#对于 eval加密的JS 有什么办法解密获取跳转URL
解密后eval那段的原文如下(是一个解密函数):function uncodeStr(str){str=str.replace(/\^/g,"%");//把原来字符串里的~符号替换成%号var str_len=str.length-1;//后面数组循环时的最大下标var i;var encodeStr='';for(i=str_len;i>=0;i--){//这个循环是将密文倒转过来encodeStr+=str.substr(i,1)}return decodeURI(encodeStr) //使用decodeURI解密}varaaa___就是获取的uncodeStr函数运算后的结果。通过解密过程可以反推出加密过程如下:获取需要字符串s使用encodeURI(s)将一些特定符号替换为编码,如空格替换为%20,得到一个新的字符串将新的字符串反转(第一位变为最后一位,第二位变为倒数第二位。。。。以此类推)将反转后的字符串里的百分号(%)用波浪线替换后就得到密文了。