解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 相关文章推荐
用XMLDOM和ADODB.Stream实现base64编码解码实现代码
Nov 28 Javascript
$.getJSON在IE下失效的原因分析及解决方法
Jun 16 Javascript
解析JavaScript中的标签语句
Jun 19 Javascript
js中如何复制一个对象并获取其所有属性和属性对应的值
Oct 24 Javascript
深入学习JavaScript中的Rest参数和参数默认值
Jul 28 Javascript
JavaScript中数组去除重复的三种方法
Apr 22 Javascript
jQuery简单注册和禁用全局事件的方法
Jul 25 Javascript
AngularJS基础 ng-click 指令示例代码
Aug 01 Javascript
Laravel中常见的错误与解决方法小结
Aug 30 Javascript
js遍历json的key和value的实例
Jan 22 Javascript
详解基于element的区间选择组件校验(交易金额)
Jan 07 Javascript
JavaScript执行机制详细介绍
Dec 06 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面向对象全攻略 (八)重载新的方法
2009/09/30 PHP
YUI 读码日记之 YAHOO.util.Dom - Part.1
2008/03/22 Javascript
用正则表达式 动态创建/增加css style script 兼容IE firefox
2009/03/10 Javascript
jQuery-serialize()输出序列化form表单值的方法
2012/12/26 Javascript
jquery select多选框的左右移动 具体实现代码
2013/07/03 Javascript
BootStrap的Datepicker控件使用心得分享
2016/05/25 Javascript
JS仿淘宝搜索框用户输入事件的实现
2017/06/19 Javascript
Bootstrap按钮组实例详解
2017/07/03 Javascript
Angular弹出模态框的两种方式
2017/10/19 Javascript
js实现购物车功能
2018/06/12 Javascript
Angular6 用户自定义标签开发的实现方法
2019/01/08 Javascript
[01:22:10]Ti4 循环赛第二日 DK vs Empire
2014/07/11 DOTA
[52:41]OG vs IG 2018国际邀请赛小组赛BO2 第二场 8.18
2018/08/20 DOTA
Python 遍历子文件和所有子文件夹的代码实例
2016/12/21 Python
Python爬虫工程师面试问题总结
2018/03/22 Python
PyQt5每天必学之日历控件QCalendarWidget
2018/04/19 Python
Python实现随机生成手机号及正则验证手机号的方法
2018/04/25 Python
Python中 CSV格式清洗与转换的实例代码
2019/08/29 Python
服务器端jupyter notebook映射到本地浏览器的操作
2020/04/14 Python
Python 处理日期时间的Arrow库使用
2020/08/18 Python
印尼在线精品店:Berrybenka.com
2016/10/22 全球购物
澳大利亚墨尔本的在线时装店:LORETA
2018/09/14 全球购物
应聘收银员个人的求职信
2013/11/30 职场文书
企业统计员岗位职责
2013/12/13 职场文书
煤矿班组长岗位职责
2013/12/29 职场文书
商场拾金不昧表扬信
2014/01/13 职场文书
大学生活动策划方案
2014/02/10 职场文书
校园公益广告语
2014/03/13 职场文书
优秀学生评语大全
2014/04/25 职场文书
2015年公务员工作总结
2015/04/24 职场文书
学校党支部公开承诺书
2015/04/30 职场文书
草房子读书笔记
2015/06/29 职场文书
2016年中秋节晚会领导致辞
2015/11/26 职场文书
Python中X[:,0]和X[:,1]的用法
2021/05/10 Python
一篇文章带你搞懂Python类的相关知识
2021/05/20 Python
Python Matplotlib库实现画局部图
2021/11/17 Python