解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 相关文章推荐
数组Array进行原型prototype扩展后带来的for in遍历问题
Feb 07 Javascript
jQuery点击后一组图片左右滑动的实现代码
Aug 16 Javascript
javascript eval(func())使用示例
Dec 05 Javascript
JQuery显示、隐藏div的几种方法简明总结
Apr 16 Javascript
jQuery+AJAX实现无刷新下拉加载更多
Jul 03 Javascript
全面详细的jQuery常见开发技巧手册
Feb 21 Javascript
解决AngualrJS页面刷新导致异常显示问题
Apr 20 Javascript
vue 引用自定义ttf、otf、在线字体的方法
May 09 Javascript
JavaScript实现指定数量的并发限制的示例代码
Mar 10 Javascript
JS出现404错误原理及解决方案
Jul 01 Javascript
Vue 禁用浏览器的前进后退操作
Sep 04 Javascript
vue 全局封装loading加载教程(全局监听)
Nov 05 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
咖啡界又出新概念,无需咖啡豆的分子咖啡
2021/03/03 咖啡文化
修改php.ini以达到屏蔽错误信息并记录日志
2013/06/16 PHP
10个超级有用的PHP代码片段果断收藏
2015/09/23 PHP
javascript 写类方式之三
2009/07/05 Javascript
jQuery 版元素拖拽原型代码
2011/04/25 Javascript
js页面跳转的问题(跳转到父页面、最外层页面、本页面)
2013/08/14 Javascript
js实现带搜索功能的下拉框实时搜索实时匹配
2013/11/05 Javascript
javascript放大镜效果的简单实现
2013/12/09 Javascript
javascript 面向对象封装与继承
2014/11/27 Javascript
moment.js轻松实现获取当前日期是当年的第几周
2015/02/05 Javascript
jquery插件ajaxupload实现文件上传操作
2015/12/09 Javascript
微信小程序实现的一键拨号功能示例
2019/04/24 Javascript
微信小程序监听用户登录事件的实现方法
2019/11/11 Javascript
vue 中使用print.js导出pdf操作
2020/11/13 Javascript
Python运算符重载用法实例分析
2015/06/01 Python
Python2中的raw_input() 与 input()
2015/06/12 Python
Python在不同目录下导入模块的实现方法
2017/10/27 Python
在Pycharm中自动添加时间日期作者等信息的方法
2019/01/16 Python
Python3获取电脑IP、主机名、Mac地址的方法示例
2019/04/11 Python
Python创建或生成列表的操作方法
2019/06/19 Python
python自动下载图片的方法示例
2020/03/25 Python
django执行原始查询sql,并返回Dict字典例子
2020/04/01 Python
python求前n个阶乘的和实例
2020/04/02 Python
基于Python的Jenkins的二次开发操作
2020/05/12 Python
Python3.8安装Pygame教程步骤详解
2020/08/14 Python
python全栈开发语法总结
2020/11/22 Python
Python使用Opencv实现边缘检测以及轮廓检测的实现
2020/12/31 Python
HTML5实现Notification API桌面通知功能
2016/03/02 HTML / CSS
旷课检讨书3000字
2014/02/04 职场文书
《两只鸟蛋》教学反思
2014/02/10 职场文书
植树节活动总结
2014/04/30 职场文书
2015年毕业生个人自荐书
2015/03/24 职场文书
民事二审代理词
2015/05/25 职场文书
百年孤独读书笔记
2015/06/29 职场文书
2016高校自主招生自荐信范文
2016/01/28 职场文书
再读《皇帝的新衣》的读后感悟!
2019/08/07 职场文书