当前位置: 首页 > 图文教程 > 网络编程 > Javascript > 解javascript 混淆加密收藏

Javascript
javascript innerText和innerHtml应用
图像替换新技术 状态域方法
JavaScript 判断判断某个对象是Object还是一个Array
Extjs 几个方法的讨论
JavaScript 学习笔记(十五)
javascript 匿名函数的理解(透彻版)
Jquery 常用方法经典总结
jquery 批量上传图片实现代码
javascript中的array数组使用技巧
详细讲解JS节点知识
javascript让setInteval里的函数参数中的this指向特定的对象
javaScript 关闭浏览器 (不弹出提示框)
对字符串进行HTML编码和解码的JavaScript函数
javascript 三种编解码方式
js左侧多级菜单动态的解决方案
JavaScript 学习笔记(十六) js事件
JavaScript面向对象之静态与非静态类
javascript两段代码,两个小技巧
js中鼠标滚轮事件详解(firefox多浏览器)
js实现的仿Photoshop鼠标滚轮控制输入框取值(修正兼容Chrome)

Javascript 中的 解javascript 混淆加密收藏


出处:互联网   整理: 软晨网(RuanChen.com)   发布: 2009-09-12   浏览: 219 ::
收藏到网摘: n/a

今天硬着头皮去搞一段混淆过的js代码,因为源码丢了。。。 本来打算要在js引擎那一层去获取代码的,发现根本不需要。 直接手工解密,比想象中的要简单不少,花了不到半个小时就搞出来了。
Js解混淆最关键的部分:
l eval或者document.write、VBS的EXECUTE、execScript之类的可以运行js的函数
l unescape
js的混淆一般有几种方法:
1. 把代码通过escape转换成hex形式的代码,让人看不懂
2. 把代码进行简单的可逆加密,然后提供一个解密函数,通过解密函数把代码解出来,并用eval之类的调用将代码串交给js引擎运行。
3. 过滤掉代码中的注释和空格,修改js代码中的内部函数/内部变量的名称,修改成非常难懂的数字或者很容易混淆的串比如数字0和字母O混合的串,让人很难辨认。
高级一点的办法,自然是把以上几个方法结合起来使用。
因此,还原的办法就是
1.把可见的%XX的字符串用unescape解出来
2.找到eval或者类似的解释函数入口
3.把传入eval的参数字符串找出来
4.如果这些字符串也是hex形式的,用unescape解出来
5.循环2-4的过程,直到找出所有的代码
6.这个时候很可能会发现还有一些变量在解出来的函数中使用,并且这些变量是一些大字符串,这种情况下,这些字符串应该就是被加密了的源码了。在使用他们的函数的最后的适当位置插入代码,显示出他们解密后的字符串,即可得源码。
这里面最需要注意的就是要看清楚变量名称,解密部分的代码很多都是通过类似000O、0O00之类的名称相加而成的,看清楚这些变量的真正名称。
注意要保留函数和变量声明和定义的顺序,避免由于移动位置而导致找不到函数或变量。
另外,混淆工具还会在代码里面添加不少垃圾代码,可以删除之。
如果更强一点的混淆工具,还可以在产生的类似垃圾代码的代码中插入一些有用的代码,用于为下面紧接着的乱码函数提供一些变量,比如解密的key之类,因此要注意不能打乱代码的顺序,如果确认不了是不是垃圾代码,留着先。
看上去方法3最简单也最弱智,但实际上这个方法对我们的影响却最大,尝试阅读没有注释、格式混乱并且有着一堆乱七八糟名称的标识符的代码,对任何一个正常人来讲都是噩梦。不过估计是因为“内部”这个标准不太好判断,有些混淆工具并不提供这样的功能。
另:解网页加密
在地址栏或按Ctrl+O,输入:
复制代码 代码如下:

javascript:s=document.documentElement.outerHTML;document.write('<body></body>');document.body.innerText=s;

源代码就出来了。不论加密如何复杂,最终都要还原成浏览器可以解析的html代码,而documentElement.outerHTML正是最终的结果。