解javascript 混淆加密收藏


Posted in Javascript onJanuary 16, 2009

直接手工解密,比想象中的要简单不少,花了不到半个小时就搞出来了。
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正是最终的结果。
Javascript 相关文章推荐
父窗口获取弹出子窗口文本框的值
Jun 27 Javascript
JavaScript 学习初步 入门教程
Mar 25 Javascript
IE8下关于querySelectorAll()的问题
May 13 Javascript
浅谈JS读取DOM对象(标签)的自定义属性
Nov 21 Javascript
详解jQuery停止动画——stop()方法的使用
Dec 14 Javascript
vue调用高德地图实例代码
Apr 28 Javascript
Javasript设计模式之链式调用详解
Apr 26 Javascript
vue项目中使用vue-i18n报错的解决方法
Jan 13 Javascript
js校验开始时间和结束时间
May 26 Javascript
微信小程序实现多图上传
Jun 19 Javascript
vue swipeCell滑动单元格(仿微信)的实现示例
Sep 14 Javascript
ES6的循环与可迭代对象示例详解
Jan 31 Javascript
js 浮动层菜单收藏
Jan 16 #Javascript
jquery中常用的SET和GET
Jan 13 #Javascript
JavaScript 私有成员分析
Jan 13 #Javascript
js利用Array.splice实现Array的insert/remove
Jan 13 #Javascript
JavaScript delete操作符应用实例
Jan 13 #Javascript
在网页里看flash的trace数据的js类
Jan 10 #Javascript
捕获关闭窗口的脚本
Jan 10 #Javascript
You might like
PHP网上调查系统
2006/10/09 PHP
PHP的FTP学习(四)
2006/10/09 PHP
个人站长制做网页常用的php代码
2007/03/03 PHP
PHP实现支持GET,POST,Multipart/form-data的HTTP请求类
2014/09/24 PHP
php多个文件及图片上传实例详解
2014/11/10 PHP
php将数组存储为文本文件方法汇总
2015/10/28 PHP
php+html5实现无刷新图片上传教程
2016/01/22 PHP
Laravel框架数据库迁移操作实例详解
2020/04/06 PHP
用jQuery简化JavaScript开发分析
2009/02/19 Javascript
javascript改变position值实现菜单滚动至顶部后固定
2013/01/18 Javascript
Jquery基础教程之DOM操作
2015/08/19 Javascript
jquery中ajax处理跨域的三大方式
2016/01/05 Javascript
JavaScript继承模式粗探
2016/01/12 Javascript
全面了解javascript三元运算符
2016/06/27 Javascript
JS简单实现移动端日历功能示例
2016/12/28 Javascript
JavaScript获取ul中li个数的方法
2017/02/13 Javascript
seajs模块压缩问题与解决方法实例分析
2017/10/10 Javascript
关于Vue的路由权限管理的示例代码
2018/03/06 Javascript
layui结合form,table的全选、反选v1.0示例讲解
2018/08/15 Javascript
nodejs实现范围请求的实现代码
2018/10/12 NodeJs
Bootstrap 按钮样式与使用代码详解
2018/12/09 Javascript
详解JS深拷贝与浅拷贝
2020/08/04 Javascript
python 调用HBase的简单实例
2016/12/18 Python
python 实现自动远程登陆scp文件实例代码
2017/03/13 Python
Python中表达式x += y和x = x+y 的区别详解
2017/06/20 Python
Python基础练习之用户登录实现代码分享
2017/11/08 Python
用python的requests第三方模块抓取王者荣耀所有英雄的皮肤实例
2017/12/14 Python
Python随机生成均匀分布在三角形内或者任意多边形内的点
2017/12/14 Python
基于windows下pip安装python模块时报错总结
2018/06/12 Python
Python socket实现的简单通信功能示例
2018/08/21 Python
django框架模板中定义变量(set variable in django template)的方法分析
2019/06/24 Python
python常用库之NumPy和sklearn入门
2019/07/11 Python
python同义词替换的实现(jieba分词)
2020/01/21 Python
手把手教你从PyCharm安装到激活(最新激活码),亲测有效可激活至2089年
2020/11/25 Python
日本最大的彩色隐形眼镜销售网站:CharmColor
2020/09/09 全球购物
英文自荐信常用句子
2014/03/26 职场文书