解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 相关文章推荐
制作高质量的JQuery Plugin 插件的方法
Apr 20 Javascript
JavaScript高级程序设计(第3版)学习笔记10 再访js对象
Oct 11 Javascript
javascript 系统文件夹文件操作及参数介绍
Jan 08 Javascript
使用jQuery插件创建常规模态窗口登陆效果
Aug 23 Javascript
Javascript 多物体运动的实现
Dec 24 Javascript
使用纯javascript实现经典扫雷游戏
Apr 23 Javascript
预防网页挂马的方法总结
Nov 03 Javascript
原生js实现验证码功能
Mar 16 Javascript
vue init webpack 建vue项目报错的解决方法
Sep 29 Javascript
微信小程序外卖选购页实现切换分类与数量加减功能案例
Jan 15 Javascript
vue excel上传预览和table内容下载到excel文件中
Dec 10 Javascript
JavaScript中EventBus实现对象之间通信
Oct 18 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
espresso double下 咖啡粉超细时 饼压力对咖啡的影响
2021/03/03 冲泡冲煮
php5 pdo新改动加载注意事项
2008/09/11 PHP
浅析PHP绘图技术
2013/07/03 PHP
PHP统计nginx访问日志中的搜索引擎抓取404链接页面路径
2014/06/30 PHP
PHP整合七牛实现上传文件
2015/07/03 PHP
Yii安装与使用Excel扩展的方法
2016/07/13 PHP
完美解决php 导出excle的.csv格式的数据时乱码问题
2017/02/18 PHP
php获取是星期几的的一些常用姿势
2019/12/15 PHP
php实现通过stomp协议连接ActiveMQ操作示例
2020/02/23 PHP
js substr、substring和slice使用说明小记
2011/09/15 Javascript
JS实现的N多简单无缝滚动代码(包含图文效果)
2015/11/06 Javascript
jquery遍历函数siblings()用法实例
2015/12/24 Javascript
利用Vue v-model实现一个自定义的表单组件
2017/04/27 Javascript
vue实现百度搜索下拉提示功能实例
2017/06/14 Javascript
Javascript ES6中对象类型Sets的介绍与使用详解
2017/07/17 Javascript
jQuery Easyui Treegrid实现显示checkbox功能
2017/08/08 jQuery
Javacript中自定义的map.js  的方法
2017/11/26 Javascript
Vue-Access-Control 前端用户权限控制解决方案
2017/12/01 Javascript
Angular2进阶之如何避免Dom误区
2018/04/02 Javascript
Nodejs 和 Electron ubuntu下快速安装过程
2018/05/04 NodeJs
如何理解Vue的v-model指令的使用方法
2018/07/19 Javascript
js中Array对象的常用遍历方法详解
2019/01/17 Javascript
vue实现固定位置显示功能
2019/05/30 Javascript
微信小程序3D轮播实现代码
2019/09/19 Javascript
JavaScript对象原型链原理解析
2020/01/22 Javascript
UEditor 自定义图片视频尺寸校验功能的实现代码
2020/10/20 Javascript
Python中进程和线程的区别详解
2017/10/29 Python
Python嵌套列表转一维的方法(压平嵌套列表)
2018/07/03 Python
python使用Thread的setDaemon启动后台线程教程
2020/04/25 Python
python IP地址转整数
2020/11/20 Python
下列程序在32位linux或unix中的结果是什么
2014/03/25 面试题
初中地理教学反思
2014/01/11 职场文书
竞选文艺委员演讲稿
2014/04/28 职场文书
抵押贷款承诺书
2014/05/30 职场文书
优秀班组申报材料
2014/12/25 职场文书
如何通过一篇文章了解Python中的生成器
2022/04/02 Python