解js的混淆加密
来源:互联网 发布:php程序员 编辑:程序博客网 时间:2024/05/01 05:23
今天硬着头皮去搞一段混淆过的js代码,因为源码丢了。。。
本来打算要在js引擎那一层去获取代码的,发现根本不需要。
直接手工解密,比想象中的要简单不少,花了不到半个小时就搞出来了。
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最简单也最弱智,但实际上这个方法对我们的影响却最大,尝试阅读没有注释、格式混乱并且有着一堆乱七八糟名称的标识符的代码,对任何一个正常人来讲都是噩梦。不过估计是因为“内部”这个标准不太好判断,有些混淆工具并不提供这样的功能。
另:解网页加密(转的)
http://hi.baidu.com/zqzer/blog/item/04cc25d1e61c0fd1562c8465.html
破解所谓的“网页源代码加密”
2007-09-02 22:24
在地址栏或按Ctrl+O,输入:
javascript:s=document.documentElement.outerHTML;document.write('<body></body>');document.body.innerText=s;
源代码就出来了。不论加密如何复杂,最终都要还原成浏览器可以解析的html代码,而documentElement.outerHTML正是最终的结果。
- 解js的混淆加密
- JS 加密和混淆
- js 混淆加密/解密
- js混淆加密工具
- js 之混淆加密
- js混淆压缩加密分析
- js压缩混淆加密工具,解密工具
- eMule 的 通信协议加密混淆功能
- .net代码安全的加密、混淆、压缩软件
- 一分钟 搞定你的混淆加密
- Python程序的混淆和加密
- Python程序的混淆和加密
- js混淆遇到的问题
- XenoCodeXenoCode 加密加密 .NET混淆.NET混淆
- C# MD5加密+混淆
- JAVA 代码混淆,加密。
- 如何混淆加密源码
- php代码混淆加密
- 彻底卸载Oracle
- Pattern-Oriented Software Architecture, Patterns for Concurrent and Networked Objects, Volume 2, 详细读书笔记 2
- sofsip学习系列--GLib学习笔记二,事件循环2
- DRIVER_UNLOADED_WITHOUT_CANCELLING_PENDING_OPERATION error
- 纯属意外(FLASH歌曲)
- 解js的混淆加密
- 今天才有开通blog
- .net学习路线
- #pragma指令使用简介
- 与网页内容抽取相关的文献
- 动态加载JS脚本的4种方法
- pb利用数据窗口查询重复记录
- 使用bm算法进行字符串匹配的例子.
- MS SQL的一些经典常用操作语句汇总