解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 相关文章推荐
JavaScript XML和string相互转化实现代码
Jul 04 Javascript
JS中的构造函数详细解析
Mar 10 Javascript
js分页工具实例
Jan 28 Javascript
JS实现CheckBox复选框全选全不选功能
May 06 Javascript
javascript框架设计之种子模块
Jun 23 Javascript
基于jQuery实现选项卡效果
Jan 04 Javascript
Bootstrap组合上、下拉框简单实现代码
Mar 06 Javascript
Vue.Js中的$watch()方法总结
Mar 23 Javascript
微信小程序实现图片预览功能
Jan 31 Javascript
纯JS实现五子棋游戏
May 28 Javascript
vue项目或网页上实现文字转换成语音播放功能
Jun 09 Javascript
9个JavaScript日常开发小技巧
Oct 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支持多种格式图片上传(支持jpg、png、gif)
2011/11/03 PHP
浅析Yii2缓存的使用
2016/05/10 PHP
thinkphp多表查询两表有重复相同字段的完美解决方法
2016/09/22 PHP
服务端 VBScript 与 JScript 几个相同特性的写法 By shawl.qiu
2007/03/06 Javascript
javascript实现的DES加密示例
2013/10/30 Javascript
jquery如何通过name名称获取当前name的value值
2013/12/20 Javascript
JavaScript获取flash对象与网上的有所不同
2014/04/21 Javascript
JS实现的生成随机数的4个函数分享
2015/02/11 Javascript
jQuery 判断图片是否加载完成方法汇总
2015/08/10 Javascript
jquery特效 点击展示与隐藏全文
2015/12/09 Javascript
实例讲解jquery中mouseleave和mouseout的区别
2016/02/17 Javascript
解析JavaScript数组方法reduce
2016/12/12 Javascript
Web前端框架Angular4.0.0 正式版发布
2017/03/28 Javascript
详解微信第三方小程序代开发
2017/06/23 Javascript
详解webpack + vue + node 打造单页面(入门篇)
2017/09/23 Javascript
angular-tree-component的使用详解
2018/07/30 Javascript
JS数组去重的6种方法完整实例
2018/12/08 Javascript
初学vue出现空格警告的原因及其解决方案
2019/10/31 Javascript
解决VUE-Router 同一页面第二次进入不刷新的问题
2020/07/22 Javascript
Vue Router中应用中间件的方法
2020/08/06 Javascript
python利用matplotlib库绘制饼图的方法示例
2016/12/18 Python
Python如何快速实现分布式任务
2017/07/06 Python
使用Numpy读取CSV文件,并进行行列删除的操作方法
2018/07/04 Python
django Admin文档生成器使用详解
2019/07/22 Python
Django如何实现密码错误报错提醒
2020/09/04 Python
python获取时间戳的实现示例(10位和13位)
2020/09/23 Python
Pycharm快捷键配置详细整理
2020/10/13 Python
医学生职业规划范文
2014/01/05 职场文书
教师师德演讲稿
2014/05/06 职场文书
个人查摆剖析材料
2014/10/04 职场文书
党的群众路线教育实践活动调研报告
2014/11/03 职场文书
安全教育第一课观后感
2015/06/17 职场文书
2016高考冲刺决心书
2015/09/23 职场文书
python字符串常规操作大全
2021/05/02 Python
python神经网络Xception模型
2022/05/06 Python
Android开发手册TextInputLayout样式使用示例
2022/06/10 Java/Android