解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 相关文章推荐
同时使用n个window onload加载实例介绍
Apr 25 Javascript
jQuery操作元素css样式的三种方法
Jun 04 Javascript
js限制文本框只能输入整数或者带小数点的数字
Apr 27 Javascript
JQuery.validate在ie8下不支持的快速解决方法
May 18 Javascript
ajax 提交数据到后台jsp页面及页面跳转问题
Jan 19 Javascript
纯JavaScript实现实时反馈系统时间
Oct 26 Javascript
js中let和var定义变量的区别
Feb 08 Javascript
JS解析后台返回的JSON格式数据实例
Aug 06 Javascript
通过npm或yarn自动生成vue组件的方法示例
Feb 12 Javascript
jQuery 淡入/淡出效果函数用法分析
May 19 jQuery
Js图片点击切换轮播实现代码
Jul 27 Javascript
JavaScript架构localStorage特殊场景下二次封装操作
Jun 21 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之Smarty入门
2007/01/04 PHP
PHP 日志缩略名的创建函数代码
2010/05/26 PHP
PHP依赖倒置(Dependency Injection)代码实例
2014/10/11 PHP
laravel 去掉index.php伪静态的操作方法
2019/10/12 PHP
编写可维护面向对象的JavaScript代码[翻译]
2011/02/12 Javascript
jQuery之选项卡的简单实现
2014/02/28 Javascript
用Jquery.load载入页面后样式没了页面混乱的解决方法
2014/10/20 Javascript
javascript里使用php代码实例
2014/12/13 Javascript
基于JavaScript代码实现随机漂浮图片广告
2016/01/05 Javascript
对称加密与非对称加密优缺点详解
2017/02/06 Javascript
使用vue框架 Ajax获取数据列表并用BootStrap显示出来
2017/04/24 Javascript
ionic3实战教程之随机布局瀑布流的实现方法
2017/12/28 Javascript
对vux点击事件的优化详解
2018/08/28 Javascript
vuejs+element UI table表格中实现禁用部分复选框的方法
2019/09/20 Javascript
layui table 复选框跳页后再回来保持原来选中的状态示例
2019/10/26 Javascript
2019最新21个MySQL高频面试题介绍
2020/02/06 Javascript
jQuery实现异步上传一个或多个文件
2020/08/17 jQuery
vue项目配置同一局域网可使用ip访问的操作
2020/10/23 Javascript
利用Python生成文件md5校验值函数的方法
2017/01/10 Python
利用Python爬虫给孩子起个好名字
2017/02/14 Python
浅谈使用Python变量时要避免的3个错误
2017/10/30 Python
PyCharm代码提示忽略大小写设置方法
2018/10/28 Python
python学生管理系统
2019/01/30 Python
python整小时 整天时间戳获取算法示例
2019/02/20 Python
基于Python计算圆周率pi代码实例
2020/03/25 Python
在tensorflow下利用plt画论文中loss,acc等曲线图实例
2020/06/15 Python
西班牙在线宠物商店:zooplus.es
2017/02/24 全球购物
Myprotein荷兰官网:欧洲第一运动营养品牌
2020/07/11 全球购物
Linux Interview Questions For software testers
2013/05/17 面试题
电气自动化大学生求职信
2013/10/16 职场文书
党员应该树立反腐倡廉的坚定意识思想汇报
2014/09/12 职场文书
党性分析材料格式
2014/12/19 职场文书
超市采购员岗位职责
2015/04/07 职场文书
会计手工模拟做账心得体会
2016/01/22 职场文书
MySQL多表查询机制
2022/03/17 MySQL
Python用any()函数检查字符串中的字母以及如何使用all()函数
2022/04/14 Python