扫二维码与项目经理沟通
我们在微信上24小时期待你的声音
解答本文疑问/技术咨询/运营咨询/技术建议/互联网交流
JavaScript加密解密7种方法
创新互联公司长期为千余家客户提供的网站建设服务,团队从业经验10年,关注不同地域、不同群体,并针对不同对象提供差异化的产品和服务;打造开放共赢平台,与合作伙伴共同营造健康的互联网生态环境。为繁峙企业提供专业的成都网站建设、网站制作,繁峙网站改版等技术服务。拥有十年丰富建站经验和众多成功案例,为您定制开发。
作者:不详 来源:DOT技术信息网 日期:2007-11-27 11:30:05
--------------------------------------------------------------------------------
本文一共介绍了七种javascript加密方法:
在做网页时(其实是网页木马呵呵),最让人烦恼的是自己辛辛苦苦写出来的客户端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("1411541451621645042u9ED1u5BA2u9632u7EBF425173")
/SCRIPT
十六进制转义字符串如下:
SCRIPT LANGUAGE="javascript"
eval("x61x6Cx65x72x74x28x22u9ED1u5BA2u9632u7EBFx22x29x3B")
/SCRIPT
这次没有了解码函数,因为javascript执行时会自行转换,同样解码也是很简单如下:
SCRIPT LANGUAGE="javascript"
alert("x61x6Cx65x72x74x28x22u9ED1u5BA2u9632u7EBFx22x29x3B")
/SCRIPT
就会弹出对话框告诉你解密后的结果!
三:使用Microsoft出品的脚本编码器Script Encoder来进行编码
工具的使用就不多介绍啦!我是直接使用javascript调用控件Scripting.Encoder完成的编码!代码如下:
SCRIPT LANGUAGE="javascript"
var Senc=new ActiveXObject("Scripting.Encoder");
var code='SCRIPT LANGUAGE="javascript"rnalert("《我爱一起》");rn/SCRIPT';
var Encode=Senc.EncodeScriptFile(".htm",code,0,"");
alert(Encode);
/SCRIPT
编码后的结果如下:
SCRIPT LANGUAGE="JScript.Encode"#@~^FgAAAA==@#@lsDD`J黑客防线r#p@#@FgMAAA==^#~@/SCRIPT
够难看懂得吧?但相应的解密工具早已出来,而且连解密网页都有!因为其解密网页代码过多,我就不多说拉!给大家介绍一下我独创的解密代码,如下:
SCRIPT LANGUAGE="JScript.Encode"
function decode()
alert(decode.toString());
/SCRIPT
咋样?够简单吧?它是原理是:编码后的代码运行前IE会先对其进行解码,如果我们先把加密的代码放入一个自定义函数如上面的decode()中,然后对自定义函数decode调用toString()方法,得到的将是解码后的代码!
如果你觉得这样编码得到的代码LANGUAGE属性是JScript.Encode,很容易让人识破,那么还有一个几乎不为人知的window对象的方法execScript(),其原形为:
window.execScript( sExpression, sLanguage )
参数:
sExpression: 必选项。字符串(String)。要被执行的代码。
sLanguage : 必选项。字符串(String)。指定执行的代码的语言。默认值为 Microsoft JScript
使用时,前面的"window"可以省略不写!
利用它我们可以很好的运行编码后的javascript代码,如下:
SCRIPT LANGUAGE="javascript"
execScript("#@~^FgAAAA==@#@lsDD`J我爱一起r#p@#@FgMAAA==^#~@","JScript.Encode")
/SCRIPT
你可以利用方法二对其中的""号内的字符串再进行编码,使得"JScript.Encode"以及编码特征码"#@~^"不出现,效果会更好!
四:任意添加NUL空字符(十六进制00H)
一次偶然的实验,使我发现在HTML网页中任意位置添加任意个数的"空字符",IE照样会正常显示其中的内容,并正常执行其中的javascript 代码,而添加的"空字符"我们在用一般的编辑器查看时,会显示形如空格或黑块,使得原码很难看懂,如用记事本查看则"空字符"会变成"空格",利用这个原理加密结果如下:(其中显示的"空格"代表"空字符")
S C RI P T L ANG U A G E =" J a v a S c r i p t "
a l er t (" 我 爱 一 起") ;
/ SC R I P T
如何?是不是显得乱七八糟的?如果不知道方法的人很难想到要去掉里面的"空字符"(00H)的!
五:无用内容混乱以及换行空格TAB大法
在javascript代码中我们可以加入大量的无用字符串或数字,以及无用代码和注释内容等等,使真正的有用代码埋没在其中,并把有用的代码中能加入换行、空格、TAB的地方加入大量换行、空格、TAB,并可以把正常的字符串用""来进行换行,这样就会使得代码难以看懂!如我加密后的形式如下:
SCRIPT LANGUAGE="javascript"
"xajgxsadffgds";1234567890
625623216;var $=0;alert//@$%%*()((^%^
//cctv function//
(//hhsaasajx xc
/*
asjgdsgu*/
"我爱一起"//ashjgfgf
/*
@#%$^%$96667r45fggbhytjty
*/
//window
)
;"#@$#%@#432hu";212351436
/SCRIPT
至少如果我看到这样的代码是不会有心思去分析它的,你哪?
六:自写解密函数法
这个方法和一、二差不多,只不过是自己写个函数对代码进行解密,很多VBS病毒使用这种方法对自身进行加密,来防止特征码扫描!下面是我写的一个简单的加密解密函数,加密代码如下(详细参照文件"加密.htm"):
SCRIPT LANGUAGE="javascript"
function compile(code)
{
var c=String.fromCharCode(code.charCodeAt(0)+code.length);
for(var i=1;icode.length;i++)
alert(escape(c));
}
compile('alert("《我爱一起》");')
/SCRIPT
运行得到加密结果为:
o%CD%D1%D7%E6%9CJ%u9EF3%uFA73%uF1D4%u14F1%u7EE1Kd
相应的加密后解密的代码如下:
SCRIPT LANGUAGE="javascript"
function uncompile(code)
{
code=unescape(code);
var c=String.fromCharCode(code.charCodeAt(0)-code.length);
for(var i=1;icode.length;i++)
return c;
}
eval(uncompile("o%CD%D1%D7%E6%9CJ%u9EF3%uFA73%uF1D4%u14F1%u7EE1Kd"));
/SCRIPT
七:错误的利用
利用try{}catch(e){}结构对代码进行测试解密,虽然这个想法很好(呵呵,夸夸自己),因为实用性不大,我仅给个例子
SCRIPT LANGUAGE="javascript"
var a='alert("《我爱一起》");';
var c="";
for(var i=0;ia.length;i++)
alert(c);
//上面的是加密代码,当然如果真正使用这个方法时,不会把加密写上的
//现在变量c就是加密后的代码
//下面的函数t()先假设初始密码为0,解密执行,
//遇到错误则把密码加1,然后接着解密执行,直到正确运行
var d=c; //保存加密后的代码
var b=0; //假定初始密码为0
t();
function t()catch(e){
c="";
for(var i=0;id.length;i++)
b+=1;
t();
//setTimeout("t()",0);
}
}
/SCRIPT
好的学习方法对于你的学习至关重要,对于每一个刚开始学习Java的程序员新人来说,都希望有一种快速学习的方法,漫无目的和长时间的学习很容易消耗你的信息,最后学的混乱,也没有实质性的收获,以至于学习到最后越来越焦虑。
初学者想要快速学习Java技术的心情大家都可以理解,但是有一句话:欲速则不达。盲目的追求快并不能达到理想的学习效果,问题来了,那么作为Java新人如何快速的学习Java编程呢?
新人学习进步非常缓慢,是因为很多的Java难题自己都没有办法解决,身边没有懂技术的人,所以只能一直在网上苦苦查找答案,就算你找到了解答,但是也不一定能够保证是对的。
初学者如何快速学Java?
方法1:Java初学者可以加入一个比较好的Java学习交流群,或者论坛,群不需要加的太多,在群中提出问题,有时候其他人的只言片语也可以帮助你走出困境。多与技术好的人交流沟通,你的技术才能变得更好。比如我的这个技术交流群
我创建的Java自学交流裙,前面输入是:926中间是:452最后连起来:303,需要java最新录制视频教程及学习路线,开发工具,jar包。源码等都可以找我,有遇见任何问题都可以随时来交流,只有不断的碰撞和交流,我们才能发现解决自己的问题,以此取长补短。
方法2:对于初学者来说快速学Java,还有一个有效的办法就是收集有用代码和工具,一些代码是可以重复使用的,随着你Java代码的练习越来越多,你对Java代码编写越来越得心应手,你就会发现你之前搜集的有用的代码和工具,大大节省了你敲代码的时间,比如工具类的:StringUtils(字符串工具),DBUtils(数据库工具)等等。
方法3:养成良好的记录笔记的习惯,因为在快速学习Java的过程中,记录显得尤为重要,比如在Java学习中,把你碰到的问题,或者突然间的奇思妙想记录下来,不时翻翻,你会很清楚你一路以来的学习历程是怎样的。
它不仅是你Java学习的成长日记,更是鼓励支持你坚持学Java的好法宝,还可以成为你Java学习的动力源泉。
好的学习方法再加上良好的习惯,你会发现学习Java也不是一件多么困难的事情。当然,以上这些方法适用于那些有足够时间学习,或者是有较强自控力的人,如果你面临的就业,面临着经济问题,很难有一颗平常心去好好学习。
总之,学好Java技术才你才能享受生活带来的乐趣,为了你的梦想,努力学习吧。
有哪些适合java初学者的项目?
20个当时初学时的Java 练手项目,结尾提供项目源码。
需要可以群文件自行下载
请点击输入图片描述
作者:王欣彤
来源:知乎
著作权归作者所有,转载请联系作者获得授权。
不推荐使用eval的原因有很多,
1、eval 太神秘了,以至于很多人用错。所以不推荐使用。
这并不是eval 不好而是因为容易被用错。这并不是eval 不好而是因为容易被用错。
eval只是一个普通的函数,只不过他有一个快速通道通向编译器,可以将string变成可执行的代码。有类似功能的还有Function ,
setInterval 和 setTimeout。
2、 eval不容易调试。用chromeDev等调试工具无法打断点调试,所以麻烦的东西也是不推荐使用的…
3、说到性能问题,在旧的浏览器中如果你使用了eval,性能会下降10倍。在现代浏览器中有两种编译模式:fast path和slow path。fast path是编译那些稳定和可预测(stable and predictable)的代码。而明显的,eval不可预测,所以将会使用slow path ,所以会慢。
还有一个是,在使用类似于Closure Compiler等压缩(混淆)代码时,使用eval会报错。
(又慢又报错,我还推荐吗?)
4、关于安全性,我们经常听到eval是魔鬼,他会引起XSS攻击,实际上,如果我们对信息源有足够的把握时,eval并不会引起很大的安全问题。而且不光是eval,其他方式也可能引起安全问题。比如:
莫名其妙给你注入一个script src=""标签,或者一段来历不明的JSON-P请求,再或者就是Ajax请求中的eval代码…
所以啊,只要你的信息源不安全,你的代码就不安全。不单单是因为eval引起的。
你用eval的时候会在意XSS的问题,你越在意就越出问题,出的多了,eval就成噩梦了。
5、效率问题是程序逻辑问题。对于一些有执行字符串代码需求的程序中,不用eval而用其他方式模拟反而会带来更大的开销。
C语言、C++、或者java
具体怎样学编程 :
1.明确学习目的
学习编程对大多数IT业人员来说都是非常有用的。学编程,做一名编程人员,从个人角度讲,可以解决在软件使用中所遇到的问题,改进现有软件,可以为自己找到一份理想的工作添加重要得砝码,有利于在求职道路上谋得一个好的职位;从国家的角度,可以为中国的软件产业做出应有的贡献,一名优秀的程序员永远是被争夺的对象。学习编程还能锻炼思维,使我们的逻辑思维更加严密;能够不断享受到创新的乐趣,将一直有机会走在高科技的前沿,因为程序设计本身是一种创造性的工作。知识经济时代给我们带来了无限的机会,要想真正掌握计算机技术,并在IT行业里干出一番事业来,有所作为,具有一定的编程能力是一个基本条件和要求。
2.打好基础
学编程要具备一定的基础,总结之有以下几方面:
(1)数学基础 从计算机发展和应用的历史来看计算机的数学模型和体系结构等都是有数学家提出的,最早的计算机也是为数值计算而设计的。因此,要学好计算机就要有一定的数学基础,出学者有高中水平就差不多了。
(2)逻辑思维能力的培养学程序设计要有一定的逻辑思维能力,“逻思力”的培养要长时间的实践锻炼。要想成为一名优秀的程序员,最重要的是掌握编程思想。要做到这一点必须在反复的实践、观察、分析、比较、总结中逐渐地积累。因此在学习编程过程中,我们不必等到什么都完全明白了才去动手实践,只要明白了大概,就要敢于自己动手去体验。谁都有第一次。有些问题只有通过实践后才能明白,也只有实践才能把老师和书上的知识变成自己的,高手都是这样成材的。
(3)选择一种合适的入门语言 面对各种各样的语言,应按什么样的顺序学呢?程序设计工具不外乎如下几类: 1)本地开发应用软件开发的工具有:Visual Basic 、Delphi 、VC++ ( C++ Builder ) 等;数据库开发工具有:Visual Foxpro 、Oracle Developer 、Power Builder 等。 2)跨平台开发开发工具如 Java 等。 3)网络开发对客户端开发工具如:Java Script 等;对服务器开发工具如:PHP 、ASP 、JSP 、ISAPI 、NSAPI 、CGI 等。以上不同的环境下几种开发工具中 VB 法简单并容易理解,界面设计是可设化的,易学、易用。选 VB 作为入门的方向对出学者是较为适合的。
3. 注意理解一些重要概念
一本程序设计的书看到的无非就是变量、函数、条件语句、循环语句等概念,但要真正能进行编程应用,需要深入理解这些概念,在理解的基础上应用,不要只简单地学习语法、结构,而要吃透针对这些语法、结构的应用例子,做到举一反三,触类旁通。
4.掌握编程思想
学习一门语言或开发工具,语法结构、功能调用是次要的,最主要是学习它的思想。例如学习 VC 就要学习 Windows 的内在机理、什么是线程......;学习 COM 就要知道 VTALBE 、类厂、接口、idl......,关键是学一种思想,有了思想,那么我们就可以触类旁通。
5.多实践、多交流
掌握编程思想必须在编程实际工作中去实践和体会。编程起步阶段要经常自己动手设计程序,具体设计时不要拘泥于固定的思维方式,遇到问题要多想几种解决的方案。这就要多交流,各人的思维方式不同、角度各异,各有高招,通过交流可不断吸收别人的长处,丰富编程实践,帮助自己提高水平。亲自动手进行程序设计是创造性思维应用的体现,也是培养逻辑思维的好方法。
6.养成良好的编程习惯
编程入门不难,但入门后不断学习是十分重要的,相对来说较为漫长。在此期间要注意养成一些良好的编程习惯。编程风格的好坏很大程度影响程序质量。良好的编程风格可以使程序结构清晰合理,且使程序代码便于维护。如代码的缩进编排、变量命令规则的一致性、代码的注释等。
7.上网学编程
在网上可以学到很多不同的编程思想、方法、经验和技巧,有大量的工具和作品及相关的辅导材料供下载。例如网站“编程课堂”()主要以 VB 和 Delph;教学和交流为主,提供大量实用技巧;网站“现在时编程学园”()是专门介绍C、VC、VB、Delphi 等的综合编程网站;网站“ VB 编程乐园 ”()提供内容丰富而且实用的编程技术文章、精选控件、源代码下载、计算机考试、相关软件以及编程书籍推荐等等。
8.加强计算机理论知识的再学习
学编程是符合“理论→实践→再理论→再实践”的一个认识过程。一开始要具有一定的计算机理论基础知识,包括编程所需的数学基础知识,具备了入门的条件,就可以开始编程的实践,从实践中可以发现问题需要加强计算机理论知识的再学习。程序人人皆可编,但当你发现编到一定程度很难再提高的时候,就要回头来学习一些计算机科学和数学基础理论。学过之后,很多以前遇到的问题都会迎刃而解,使人有豁然开朗之感。因此在学习编程的过程中要不断地针对应用中的困惑和问题深入学习数据结构、算法、计算机原理、编译原理、操作系统原理、软件工程等计算机科学的理论基础和数理逻辑、代数系统、图论、离散数学等数学理论基础知识。这样经过不断的学习,再努力地实践,编程水平一定会不断提高到一个新高度。
7月20日消息,就在备受关注的《变形金刚3》在中国首映前一天,中文互动问答平台百度知道上一个趣味和应景“变形金刚”彩蛋被网友发现,并引发围观。
用户只要在百度知道检索“变形金刚”或“变形金刚3”,搜索结果中原本的文字链接就会组合成一个变形金刚出现在页面的右边,并且该“变形金刚”还会动态走向页面中间,伴随其脚步的停止,页面也会随之震动。
变形金刚在百度知道搜索自动变形_百度知道变形金刚3玩转变形
大量网友被这种新鲜的恶搞形式所吸引,纷纷前往围观。百度知道“变形”这一新鲜创意,也进一步激发起“刚粉”的观影热情。
腾讯科技获悉,这个创意并来团队合作,而是由百度一位“刚粉”工程师独立完成,他利用自己的周末业余时间,用整整1天时间完成开发这个代码版“变形金刚”产品。
创意由百度“刚粉”工程师一日完成
据了解,工程师文化浓郁的百度公司内部一向尊重自由独立的思考,鼓励各种奇思妙想的诞生和实现。这种宽松的氛围孕育了贴吧、知道等产品,也培育了大量充满奇思妙想工程师。黄方荣就是百度数千年轻工程师中的普通一员。
生于1978年、从事Web前端研发的黄方荣是典型的“变形金刚”粉丝。他说,“变形金刚”承载了他很多难忘的童年记忆。在《变形金刚3》上映之际,“做一个酷的东西,献给自己,献给儿子,也献给那些同为‘刚粉’的朋友们”成为黄方荣近期闲暇之余想得最多的问题。
做个什么样的产品才能让所有人眼前一亮?擅长JavaScript开发的黄方荣突发奇想:不如用JavaScript代码写一段代码,让搜索结果化身为“变形金刚”。
很多人都知道,一些用ASCII字符展现的图片画面能实现动态呈现。黄方荣的创意与此类似。他计划首先将变形金刚的动作进行分解,再将饱满的动作形象转化成可以在技术上控制的点阵,最后用JavaScript代码来实现。
想起来简单,实际却很费神。整个开发,黄方荣手绘了40多张草图,描了不计其数的点阵,这保障了最终变形金刚变身的时候,动态效果更加逼真。而在代码实现之后,更麻烦的调试过程开始了,他需要不断调整点阵和代码,让恰当的字符在恰当的时间出现在恰当的位置上。整整忙碌了一天,黄方荣终于完美实现了自己的创意。
创意获百度副总裁亲口赞赏 仅三天上线
用技术改变这个世界、改变亿万人的生活,这是每一位百度工程师的梦想。黄方荣自然个人也相信:在日常繁杂的工作中,每一个新的想法,对产品的改进,都可能产生“蝴蝶效应”,影响数亿人的体验。
7月18日,黄方荣上班就在百度hi群里把自己周末的成果分享给了技术部门的同事,负责技术的百度副总裁王梦秋立即回复了一句话:“创意很酷,上线实现吧”。三天之后,黄方荣完成了机器人呈现效果的优化。
从7月20日下午开始,来自全国各地的网友纷纷围观百度这一创意,当看到往常普通的搜索结果突然“走动”起来,甚至完成“机器人变形”,许多网友在微博上表达了惊叹。一些网友用“太炫”、“太意外”、“太激动”等词汇表达惊奇感受。
还有“刚粉”表示:“没想到在网页上,用编程可以让搜索结果组成变形金刚,会走动、会跺脚。最神奇的是连带着屏幕都能一起震动,非常好玩。”
我们在微信上24小时期待你的声音
解答本文疑问/技术咨询/运营咨询/技术建议/互联网交流