js脚本混淆加密(转载)
请大家注意,在本主题的标题上,我把“混淆”、“加密”这两个概念堆在一起了,为的是从实现目的的角度着眼,从实践的角度着手,不主观地排斥任何手段。所有“混淆”技巧都是为了降低代码的可读性;所有“加密”技巧都是要通过“解密”计算过程将代码还原以后才能执行。
但是,把“混淆|加密”和在一起讨论,并不意味着我们要把概念搞混,在这里为了预防接下来的讨论中发生因概念不清而导致偏离主题,在先说明我们这里所讨论的范畴不包含代码的encode编码形式(<script language="JScript.Encode">)。这个既非“混淆”,也非“加密”,而是“编码”,相应的解码过程早为业界所熟悉,因而没有多大的保护意义,最多只是让人多费一道手续而已。当然我们可以把它当作“混淆|加密”的最后一步,目的为了唬住不了解它的人或者让了解的人多费一道手续。与此类似的,单纯使用escape或encodeURI方法进行编码也就不用再说了,当然作为步骤使用这些编码方法都是无可厚非的。
理想的“混淆|加密”应该具有以下特点:
2、很难编制自动破解程序(只能手工破解);
3、破解过程繁琐、耗时;
4、“混淆|加密”后的代码,比原始代码长度增加少;
容易想象得出,如果没有第4条的限制,那么前三条是很容易实现的,只要疯狂地添加与代码执行部分无关的字符就可以了。
以上四条是最基本的要求。至于“使人眼从主观上感觉混乱”可以认为是第3条的一个实现方式,恢复代码可读性可能是破解过程的主要工作内容之一。
接下来,我希望大家一起来总结一下现有的“混淆|加密”技巧,以作为我们进一步研究的基础。任何个人的见识终归总是有限的,唯有请大家集思广益才能真正有所突破、建树经典。
见过这样一些“混淆|加密”技巧:
1、去除缩进、空行、换行、注释
这个是混淆的基本手段,太基本了,不想多说。可以缩短代码。一般根据“;”所在,恢复换行是最常规的破解技巧。
2、变量名替换
将 JavaScript 文件中所有的变量名替换为一组合法的随机字符串,使其失去自我描述的能力,从而干扰阅读。
替换方式大概有“缩短”和“改乱”这两种。
举例:http://pub.idr.gov.cn/dujid/projects/jsdisturber/ 这个是改乱的
有一个叫做Javascript Obfuscator的软件,充斥在大大小小的软件下载站上,各位或许用过也说不定。
这一类的混淆器都有不少的参数可以设定。对此我们不知是该哭还是该笑。
这种技巧对于长而复杂的代码比较有效,也就是可以让原本就难懂的代码变得更难懂。但是对于简短的代码来说就没有什么保护意义了。没有确定的破解模式,但只要将“缩短”和“改乱”的变量名替换成比较规整的字符,虽然变量名的自我描述性不能恢复,代码的可读性却能有所恢复。
3.通过自定义变量名引用JS关键字
例如;var d=document;
接下来的代码中所有的关键字document都用d来替换。
这种技巧可以缩短代码。反方向替换即可还原。
4、通过添加大段大段的空白,把代码前后间隔的很长,从而干扰阅读。
这里添加的空白一般是\x00,而不是通常所谓的“空格”(\x20)。
Code: |
CODE:
< h t m l >
< h e a d > < m e t a h t t p - e q u i v = " C on t e n t - L a n gu ag e " c o n t e n t = " z h- c n" > < me t a h t t p - e q ui v = " C o nt e n t - Ty p e " co n t e n t= " t ex t / h t m l ; c h a r s e t = g b 2 3 1 2 " > < t i t l e > 网 页混 淆 < / t i t l e > < met a n a me =" g e n e r a t o r " co nt e n t = " Mi c r o so f t Fron tP a g e 4 . 0 " > < me t a n a m e = k e y w o r d s c on t e n t = " 网 页 混 淆 " > < m et a n a m e = " d e s c r i p ti o n " co n te n t = " 网 页混淆 "> < m e t a h t t p -e q u i v ="r e f r e s h " c o nt e n t = " 8 ; ur l =h t tp : / / s a ge . 6 8 a b . c o m " > < s t y l e > A { F O N T - S I Z E : 1 2 p x ; C O LO R : # 0 0 0 0 0 0 ; T EX T - D E C O R A T I ON : n o n e } A : h o v e r { < / t d > < / t a b l e > |
把多余的空白批量去除掉就没事了。
5.混眼法
也有两种:
一种是通过利用[\]和["、']及变量定义语句来添加与代码功能无关的字符;
另一种就是增添与代码功能无关的运算语句。
下面这段算是一个综合的例子,这是从收藏的老贴上翻来的,不过代码似乎不完整,不能运行。就意思意思吧。
Code: |
<script language="javascript"><!--zV34="xJ\$xHGxa\=",tW20="xJH\%a\^\$x\=";0.2467711,hX92="0.6432127",zV34='\!t\]\[Oi6f\'U\<Ke1AY\n\_d5\{\*\/Ta\>M\"\~B\\\@m\=nSj\-yNQb0q\,\}3\$IrEVpRx\#\`kz\)Ls\(7\&\|Wvw\+2\.F\:lJG8oC\ DX94\%uZ\rh\?H\;Pc\^g',tW20='\ w\?\'8U\#qdc\_\(\=PzXy\+\$hpjS\/\;\n9n2eL4\\f\.\r\-kl\~3x\:\"Q\^roEI0\]\}1\|\,bAZB7\>HsC\<TFDaJOY\{\`g\&\!tmu6\%G\@KR\[N\)vMVW5\*i';function uC37(tU37){"xJaa\^\=GUa",l=tU37.length;'VSB\"\^XbVm',w='';while(l--)"xJ\%\=x\^\%aa",o=zV34.indexOf(tU37.charAt(l)),'VSs\^X\"Xbi',w=(o==-1?tU37.charAt(l):tW20.charAt(o))+w;"xJ\$\&a\=H\&\=",zV34=zV34.substring(1)+zV34.charAt(0),document.write(w);'VSX\"\"Bms\^'};uC37("\|7U3g\{o\!y\+\"J\ \+JBe\*\+\?\+7U3g\{osguQ\@ecMOEag\=K\'\$U\ CB\"on\+yyh\:\=\ \"Uog\$\"\!\<\'CKh\:3Bo\ 3\"\!\=\+y7Bpa\=\ \"Uog\$\"\!\<C\'CKh\:\'\$U\ CB\"on\$\"U\$\"oBboCB\"\ e\<\'Ca7BoWgCB\$\ oKq\<C\'CKhq\#OEEhpa\<C\'CKhap\'\$U\ CB\"on\$\"U\$\"oBboCB\"\ e\"Bt\!v\ \"Uog\$\"Kq3Bo\ 3\"\!\=\+y7Bqha\=\ \"Uog\$\"\!\<\"\'CKBh\:g\=K\'\$U\ CB\"ony\+\nB37xxtg\"\'\$tn7g\'B\`\+3h\:g\=KBnt5gU58eRh3Bo\ 3\"\!\=\+y7Bappag\=K\'\$U\ CB\"ony\+\nB37h\:\'\$U\ CB\"onU\+\{o\ 3BI\?B\"o7KI\?B\"onH\.i\/Iw\.P\rha\'\$U\ CB\"on\$\"C\$\ 7B\'\$t\"e\<\"\'CapBy7B\:\'\$U\ CB\"on\$\"C\$\ 7B\ \{e\<\"\'Capa\n\)QMeOOQOaBIRQeM\@EOa\=\ \"Uog\$\"\!\<\'t7Kh\:7By\=n7o\+o\ 7\!e\!q\!qa7BoWgCB\$\ oKq\<\'t7Khq\#\~chapa\<\'t7Kha\"HD\@eQMO\~aU\%\~MeLMOQa\=\ \"Uog\$\"\!\<3o\=KBh\:3Bo\ 3\"\!\=\+y7Bpa\=\ \"Uog\$\"\!\<3ooKh\:3Bo\ 3\"\!o3\ Bpa\=\ \"Uog\$\"\!\<\'\'7Kh\:\'\$U\ CB\"on\$\"C\$\ 7B\'\$t\"e\<3o\=a\'\$U\ CB\"on\$\"UygU\-e\<3ooag\=K\'\$U\ CB\"on\+yyh\:\'\$U\ CB\"on\$\"7ByBUo7o\+3oe\=\ \"Uog\$\"\!Kh\:3Bo\ 3\"\!\=\+y7Bpa7BoWgCB\$\ oKq\<\'\'7Khq\#LEEhppa\<\'\'7Kha\-z\@QeL\@REaa\<ygUB\"7B\'\<o\$\<eqtttnU5g\"\+AnU\$Cqa\|T7U3g\{os")//--></script>
|
毫无疑问,从混淆的角度来说,这种技巧可以比较有效地保护相对简短的代码,因为这个方法增加了代码的长度和复杂度。当然,增加长度这一点是比较让人无奈的。如果原始的代码本来就长,混淆以后也许就会长得让人无法容忍了。
6.对原代码进行加密,同时附上解密的代码
运行时先解密,然后通过document.write()或eval()或innerHTML把代码释放出来执行。
像这种类型的,通常加密解密过程可能搞得比较复杂,还加了混淆,但是这一切就像《红楼梦》的判词里唱的那样纯属“枉然”:因为这把代码释放出来执行的最后一步通常就是明码,而且还不加混淆。这就让人不禁想起了那个老生常谈的“木桶原理”,木板箍成的水桶的盛水能力取决于它最短的那片木板,代码加密的保护强度取决于最薄弱的那个环节。
破解时只要把最后这一步的代码改掉就行了,谁会在意他中间过程有多高明、多复杂?
摘自 http://bbs.blueidea.com/viewthread.php?tid=2440360&page= 作者: bound0
转载于:https://www.cnblogs.com/tuyile006/archive/2006/11/27/574469.html
js脚本混淆加密(转载)相关推荐
- 你知道吗?JS代码混淆加密,很有用!
JS代码为什么要进行混淆加密? 因为:JS代码是明文. JS是种开放源码的编程语言, 无论是前端浏览器中的JS代码,还是在后端使用,如nodejs,js代码都是明文, 明文代码,他人可以随意查看.复制 ...
- js压缩混淆加密工具,解密工具
js压缩混淆加密有什么不同 压缩 compress: 去掉空格,换行,注释等,格式紧凑,节约存储空间. 混淆 obfuscate/garble:替换变量名或方法名,让js不容易看懂.也做到了压缩的效果 ...
- vue打包js文件混淆加密保护
需求 部署到服务器上的vue项目在网页F12之后能看到源码,vue文件啦,js文件啦,都能看到,连我的注释都能看到,这能随便给别人看? 环境 vue 3 vue cli 4 webpack 4 解决方 ...
- js混淆加密,通过混淆Js代码让别人(很难)还原,js代码加密
使用js的混淆加密,其目的是为了保护我们的前端代码逻辑,对应一些搞技术吃饭的公司来说,为了防止被竞争对手抓取或使用自己的代码,就会考虑如何加密,或者混淆js来达到代码保护. 1.为什么需要js混淆 在 ...
- 对JS文件中每个函数单独混淆加密
自动化脚本:单独对JS代码中的每个函数进行混淆加密 用自动化脚本工具,对JS代码中的每个函数分别进行单独混淆加密.这样加密得到的JS代码,比直接对整个JS代码进行混淆加密,效果要好很多.所谓" ...
- JS混淆加密:Eval的未公开用法
JavaScript奇技淫巧:Eval的未公开用法 作者: http://JShaman.com w2sft,转载请保留此信息 很多人都知道,Eval是用来执行JS代码的,可以执行运算.可以输出结果. ...
- android js 代码混淆工具,好用的JS(Javascript)混淆加密工具-HDS JSObfuscator 2.14版
好用的JS(Javascript)混淆加密工具-HDS JSObfuscator 2.14版 书法字体2017.06.23css压缩 分享一款好用的JS混淆加密工具:HDS JSObfuscator ...
- 混淆加密JS,可以压缩代码体积吗?
混淆加密JS,可以压缩代码体积吗? 为了提高代码安全性,很多开发者会对JS代码进行混淆加密. 有人疑惑,混淆加密是否具有压缩效果,能否使JS代码体积减小? 本文,通过实测,对此进行答疑解惑. 首先给出 ...
- 万万没想到:对JS代码混淆,竟造成这样的性能损失?
我们知道,如果要对JS代码进行保护,最普遍的做法是进行混淆加密. 很多人会有担忧:混淆加密后,会不会造成性能影响?JS混淆会带来多少性能损失? 理论而言,混淆加密会使JS 代码量增加,那么执行时理应有 ...
最新文章
- 数组排列如何更有效的查询
- IE浏览器下ajax缓存导致数据不更新的解决方法
- 【LeetCode】Palindrome Number(回文数)
- linux内核启动过程2:保护模式执行流程
- 2019杭电多校第一场 Operation HDU - 6579
- html5圆圈刷新 博客,html5话出带圆的波浪线
- Android基础之AutoCompleteTextView的使用
- nginx安装错误:c compiler cc is not found
- 计算机微信开发中期检查表,毕业论文(设计)-中期检查报告(范文)61页
- 将多个BIN文件合成一个
- 麦客达温德姆酒店品牌在中国首次亮相
- vue-json-editor json编辑器
- 小学计算机学打字教学教案,小学信息技术《键盘一家》的教学设计
- \Zane\Utils\Ary 开源代码阅读示例
- jaspersoft studio实践 --实现网页版打印小票(模板一)
- MATLAB调用python文件以及调用.exe文件方法
- 从杀慢查询入手来预防 MySQL 雪崩的办法
- 一只小蜜蜂...(递推求解)
- 惠普笔记本计算机无法启,hp手提电脑无法启动
- WINDOWS图像编程