解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检测弹出窗口是否已经关闭的方法
Mar 24 Javascript
jQuery解析XML文件同时动态增加js文件的方法
Jun 01 Javascript
js实现选中复选框文字变色的方法
Aug 14 Javascript
javascript中tostring()和valueof()的用法及两者的区别
Nov 16 Javascript
jquery获取点击控件的绝对位置简单实例
Oct 13 Javascript
bootstrap动态添加面包屑(breadcrumb)及其响应事件的方法
May 25 Javascript
vue3.0 CLI - 3.2 路由的初级使用教程
Sep 20 Javascript
Vue项目中使用WebUploader实现文件上传的方法
Jul 21 Javascript
Jquery让form表单异步提交代码实现
Nov 14 jQuery
JS获取当前时间的年月日时分秒及时间的格式化的方法
Dec 18 Javascript
react实现移动端下拉菜单的示例代码
Jan 16 Javascript
javascript遍历对象的五种方式实例代码
Oct 24 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中session退出登陆问题
2014/02/27 PHP
codeigniter显示所有脚本执行时间的方法
2015/03/21 PHP
利用PHP如何实现Socket服务器
2015/09/23 PHP
php获得刚插入数据的id 的几种方法总结
2018/05/31 PHP
node.js中的buffer.slice方法使用说明
2014/12/10 Javascript
javascript实现表单验证
2016/01/29 Javascript
JavaScript实现输入框与清空按钮联动效果
2016/09/09 Javascript
jquery动态添加文本并获取值的方法
2016/10/12 Javascript
一个非常好用的文字滚动的案例,鼠标悬浮可暂停[两种方案任选]
2016/12/01 Javascript
Bootstrap CSS组件之输入框组
2016/12/17 Javascript
详谈js使用in和hasOwnProperty获取对象属性的区别
2017/04/25 Javascript
Nodejs+angularjs结合multiparty实现多图片上传的示例代码
2017/09/29 NodeJs
在vue项目中使用sass的配置方法
2018/03/20 Javascript
详解离线安装npm包的几种方法
2018/11/25 Javascript
js实现双色球效果
2020/08/02 Javascript
JavaScript实现烟花绽放动画效果
2020/08/04 Javascript
vue浏览器返回监听的具体步骤
2021/02/03 Vue.js
[03:46]DAC趣味视频-中文考试.mp4
2017/04/02 DOTA
[51:39]DOTA2-DPC中国联赛 正赛 Magma vs LBZS BO3 第二场 2月7日
2021/03/11 DOTA
Python3遍历目录树实现方法
2015/05/22 Python
详解Django框架中用户的登录和退出的实现
2015/07/23 Python
Python MySQL数据库连接池组件pymysqlpool详解
2017/07/07 Python
Python可迭代对象操作示例
2019/05/07 Python
详解python解压压缩包的五种方法
2019/07/05 Python
关于Python中定制类的比较运算实例
2019/12/19 Python
在tensorflow中设置使用某一块GPU、多GPU、CPU的操作
2020/02/07 Python
解决tensorboard多个events文件显示紊乱的问题
2020/02/15 Python
CSS3中的Transition过度与Animation动画属性使用要点
2016/05/20 HTML / CSS
马来西亚航空官方网站:Malaysia Airlines
2017/07/28 全球购物
FC-Moto西班牙:摩托车手最大的购物场所之一
2019/04/11 全球购物
Interrail法国:乘火车探索欧洲,最受欢迎的欧洲铁路通票
2019/08/27 全球购物
大专生简历的自我评价
2013/11/26 职场文书
信息专业个人的自我评价
2013/12/27 职场文书
旅游管理专业生自荐信范文
2014/01/02 职场文书
小学安全汇报材料
2014/08/14 职场文书
快速学习Oracle触发器和游标
2021/06/30 Oracle