解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 相关文章推荐
High Performance JavaScript(高性能JavaScript)读书笔记分析
May 05 Javascript
javascript:;与javascript:void(0)使用介绍
Jun 05 Javascript
js获取鼠标点击的位置实现思路及代码
May 09 Javascript
js常用数组操作方法简明总结
Jun 20 Javascript
js实现仿阿里巴巴城市选择框效果实例
Jun 24 Javascript
JS实现的通用表单验证插件完整实例
Aug 20 Javascript
JavaScript常用本地对象小结
Mar 28 Javascript
BootStrap表单验证实例代码
Jan 13 Javascript
javascript设计模式之模块模式学习笔记
Feb 15 Javascript
微信小程序 两种为对象属性赋值的方式详解
Feb 23 Javascript
javascript数组拍平方法总结
Jan 20 Javascript
vue路由缓存的几种实现方式小结
Feb 02 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垃圾回收机制简单说明
2010/07/22 PHP
php更新mysql后获取影响的行数发生异常解决方法
2013/03/28 PHP
php 文件下载 出现下载文件内容乱码损坏的解决方法(推荐)
2016/11/16 PHP
yii插入数据库防并发的简单代码
2017/05/27 PHP
PHP基于DateTime类解决Unix时间戳与日期互转问题【针对1970年前及2038年后时间戳】
2018/06/13 PHP
PHP结合jquery ajax实现上传多张图片,并限制图片大小操作示例
2019/03/01 PHP
js中单引号与双引号冲突问题解决方法
2013/10/04 Javascript
textarea不能通过maxlength属性来限制字数的解决方法
2014/09/01 Javascript
JavaScript动态检验密码强度的实现方法
2016/11/09 Javascript
JS实现点击li标签弹出对应的索引功能【案例】
2019/02/18 Javascript
一看就会的vuex实现登录验证(附案例)
2020/01/09 Javascript
[02:43]DOTA2英雄基础教程 圣堂刺客
2013/12/09 DOTA
python冒泡排序算法的实现代码
2013/11/21 Python
使用Python编写Linux系统守护进程实例
2015/02/03 Python
基于python实现微信模板消息
2015/12/21 Python
编写Python小程序来统计测试脚本的关键字
2016/03/12 Python
html5录音功能实战示例
2019/03/25 HTML / CSS
FOREO斐珞尔官方旗舰店:LUNA露娜洁面仪
2018/03/11 全球购物
香港家用健身器材、运动器材及健康美容仪器专门店:FitBoxx
2019/12/05 全球购物
硕士研究生自我鉴定
2013/11/08 职场文书
物流仓管员岗位职责
2013/12/04 职场文书
生产车间班组长岗位职责
2014/01/06 职场文书
和平主题的演讲稿
2014/01/12 职场文书
双语教学实施方案
2014/03/23 职场文书
关于环保的演讲稿
2014/05/10 职场文书
文明礼仪演讲稿
2014/05/12 职场文书
乡镇保密工作责任书
2014/07/28 职场文书
初中优秀教师事迹材料
2014/08/18 职场文书
学生党员批评与自我批评
2014/10/15 职场文书
2014年幼儿园教学工作总结
2014/12/04 职场文书
慈善募捐倡议书
2015/04/27 职场文书
幼儿园园务工作总结2015
2015/05/18 职场文书
如何用 Python 子进程关闭 Excel 自动化中的弹窗
2021/05/07 Python
【海涛教你打DOTA】死灵飞龙第一视角解说
2022/04/01 DOTA
动态规划之使用备忘录来改进Javascript函数
2022/04/07 Javascript
SpringCloud Function SpEL注入漏洞分析及环境搭建
2022/04/08 Java/Android