解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 相关文章推荐
javascript操作cookie的文章(设置,删除cookies)
Apr 01 Javascript
Jquery AJAX 用于计算点击率(统计)
Jun 30 Javascript
把字符串按照特定的字母顺序进行排序的js代码
Jan 28 Javascript
开源的javascript项目Kissy介绍
Nov 28 Javascript
js实现星星打分效果的方法
Jul 05 Javascript
ajax+jQuery实现级联显示地址的方法
May 06 Javascript
js中跨域方法原理详解
Jul 19 Javascript
vue.js实现价格格式化的方法
May 23 Javascript
vue路由拦截及页面跳转的设置方法
May 24 Javascript
JavaScript实现tab栏切换效果
Mar 16 Javascript
详解javascript void(0)
Jul 13 Javascript
vue中组件通信详解(父子组件, 爷孙组件, 兄弟组件)
Jul 27 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中防止SQL注入方法详解
2014/12/25 PHP
ThinkPHP 3.2 版本升级了哪些内容
2015/03/05 PHP
PHP中常用的魔术方法
2017/04/28 PHP
Laravel中encrypt和decrypt的实现方法
2017/09/24 PHP
javascript 面向对象编程 function也是类
2009/09/17 Javascript
JavaScript自定义DateDiff函数(兼容所有浏览器)
2012/03/01 Javascript
jQuery中:not选择器用法实例
2014/12/30 Javascript
EasyUI中实现form表单提交的示例分享
2015/03/01 Javascript
javascript相关事件的几个概念
2015/05/21 Javascript
jQuery实现鼠标滑向当前图片高亮显示并且其它图片变灰的方法
2015/07/27 Javascript
Ajax清除浏览器js、css、图片缓存的方法
2015/08/06 Javascript
使用RequireJS库加载JavaScript模块的实例教程
2016/06/06 Javascript
关于Vue.js一些问题和思考学习笔记(2)
2016/12/02 Javascript
AngularJS开发教程之控制器之间的通信方法分析
2016/12/25 Javascript
js实现鼠标拖动功能
2017/03/20 Javascript
javascript实现循环广告条效果
2017/12/12 Javascript
Angularjs中的$apply及优化使用详解
2018/07/02 Javascript
Angularjs 根据一个select的值去设置另一个select的值方法
2018/08/13 Javascript
关于RxJS Subject的学习笔记
2018/12/05 Javascript
微信小程序实现弹出菜单动画
2019/06/21 Javascript
[01:00:10]完美世界DOTA2联赛PWL S2 FTD vs Inki 第二场 11.21
2020/11/24 DOTA
Python和Ruby中each循环引用变量问题(一个隐秘BUG?)
2014/06/04 Python
详解python的ORM中Pony用法
2018/02/09 Python
Python中字符串String的基本内置函数与过滤字符模块函数的基本用法
2019/05/27 Python
python中for循环把字符串或者字典添加到列表的方法
2019/07/20 Python
解决导入django_filters不成功问题No module named 'django_filter'
2020/07/15 Python
css3实现的下拉菜单效果示例
2014/01/22 HTML / CSS
语文教学感言
2014/02/06 职场文书
供货协议书范本
2014/04/22 职场文书
查摆剖析材料范文
2014/09/30 职场文书
介绍信样本
2015/01/31 职场文书
业务员年终工作总结2015
2015/05/28 职场文书
详解TS数字分隔符和更严格的类属性检查
2021/05/06 Javascript
Go 语言中 20 个占位符的整理
2021/10/16 Golang
linux目录管理方法介绍
2022/06/01 Servers
java.util.NoSuchElementException原因及两种解决方法
2022/06/28 Java/Android