`

“Magic Zoom V3图片放大镜特效”脚本的分析

阅读更多

      最近想试用一个图片放大镜特效,网上(国内)引用最多可能就是名为”Magic Zoom “的jQuery插件了。该插件是商业软件,试用版会在放大框底部或顶部加上一行提示升级到完整版本的提示(Please upgrade to full version of Magic Zoom)。其实该演示版功能是完整的,只是多了这行提示而已。

      网上搜了一下,还没发现有人对该组件进行较全面的分析,只找到有人采用暴力的方法去掉那行提示信息。具体做法大家可以到这个地址(http://www.5icool.org/a/201004/379.html)去看,我就省了Ctrl+C And Ctrl+V操作了。

      这个组件至今没有人去分析(或者是没分析出来),这勾起了我的兴趣,看看这个JS防盗到底有多强。于是就有了这次分析过程及本文。

      首先,从官网下载本组件的DEMO版,打开magiczoom.js,搜索一下”Please upgrade to full version of Magic Zoom“这句话中的关键词,没找到。这在我意料之中,如果这几个词都不藏一下,那还防什么盗啊。

       再看整个脚本,外面套了一个eval,那一般来说,eval中间的东西处理后肯定得到一段正常JS脚本,只要想办法把那段脚本给弄出来,基本就算成功了。按照这个思路,把eval暂时去掉,剩下的东西,有一大块是字符串,把那块字符串抽掉,剩下的东西就不多了,整理一下格式,如下:

function(p,a,c,k,e,d){
	e=function(c){
		return(c<a?'':e(parseInt(c/a)))+((c=c%a)>35?String.fromCharCode(c+29):c.toString(36));
	};
	if(!''.replace(/^/,String)){
		while(c--){
			d[e(c)]=k[c]||e(c);
		}
		k=[
			function(e){
				return d[e]
			}
		];
		e=function(){
			return'\\w+';
		}
		c=1;
	};
	while(c--){
		if(k[c]){
			p=p.replace(new RegExp('\\b'+e(c)+'\\b','g'),k[c]);
		}
	}
	return p;
}( STR1, 62,639, STR2.split('|'),0,{});

 

其中: STR1, STR2就是抽出去的两个长字符串的位置。

 

分析一下这段代码,就比较清楚了,定义了一个匿名函数,然后传入6个参数执行,得到一个结果,最后由eval方法来执行一下。

      接下来,我只要写一段代码,把这个函数返回的结果输出就可以了,我在EditPlus中写了一个HTML页面,把上面函数的执行结果输出到一个textarea:

<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN">
<html>
 <head>
  <title> New Document </title>
  <meta name="Generator" content="EditPlus">
  <meta name="Author" content="">
  <meta name="Keywords" content="">
  <meta name="Description" content="">
<script language="JavaScript">
<!--

var s1 = <省略>;

var s2 = <省略>;


function decode(p,a,c,k,e,d){
	e=function(c){
		return(c<a?'':e(parseInt(c/a)))+((c=c%a)>35?String.fromCharCode(c+29):c.toString(36));
	};
	if(!''.replace(/^/,String)){
		while(c--){
			d[e(c)]=k[c]||e(c);
		}
		k=[
			function(e){
				return d[e];
			}
		];
		e=function(){
			return'\\w+';
		};
		c=1;
	};
	while(c--){
		if(k[c]){
			p=p.replace(new RegExp('\\b'+e(c)+'\\b','g'),k[c]);
		}
	}
	return p;
}

window.onload=function(){
  var srcTxt = decode(s1,62,650, s2.split('|'),0,{});
	document.all.src.value = srcTxt;
}

//-->
</script>
 </head>

 <body>
<textarea name="src" rows="20" cols="100"></textarea>
 </body>
</html>

 在EditPlus中Ctrl+B,就得到了执行结果,整理一下,就是一段比较清晰的代码了,现在只要找到其中的那句提示语句,再想办法处理掉就完工了。

      找那个字符串不算很麻烦的事。记得那行提示文字是红色的粗体字,我就直接找输出红色粗体字的地方,没费什么工夫就找到了:

if(i.indexOf(MagicZoom.x7("coigmzaablav mac"))==-1){
      a=["^bko}k.{~i|ojk.za.h{bb.xk|}ga`.ah.Coigm.Taac(-6:6<5","#ff0000",10,"bold","center","100%"];
}

作者对字符串作了加密处理,具体的算法也懒得去分析了,直接把这三行注释掉,再测试一下,提示文字没有了。

 

 

=================================

另外再说一句,使用www.xieda.org 的JavaScript Analyser2.0 Alpha版软件直接就可以得到解密后的脚本,跟我手工分析出来的差不多。

分享到:
评论
2 楼 wdmsyf 2010-10-15  
楼上的这位兄弟,我把钓鱼方法都说了,难道还一定要我钓的鱼么?

       
1 楼 cocopig 2010-10-11  
压缩包是加密的?

相关推荐

Global site tag (gtag.js) - Google Analytics