如何限制flash只能在服务器上观看?也算加密SWF方法吧!
声明 本文转自:
http://www.flashbank.cn/article.asp?id=91
第一种:
在第一帧中加入如下代码:
fscommand ("allowscale", "0");
url = "http://www.fllashbank.cn";
if (_url.substring(0, 22)<>url) {
gotoAndPlay (2);
} else {
gotoAndPlay (3);
}
actions for frame 2
stop ();
actions for frame 3
stop ();
可以看到,在这几行代码里我将url定义为网站的地址,而在后面进行了一个if判断
注意:
在此判断中利用了substring来截取了前22个字符的内容(即我的网址),然后与前面输入的url地址作以比较,如果符合的,则跳到相应的帧,不同的则跳到相应的帧
好了,操作方法就是这样简单,至于你自己需要如何的去判断影片的运行与停止就由你自己去想吧^_^
第二种:
使用flashcommunication server mx服务器,将信息制作成remote sharedobject文件放在服务器,使用getremote方法下载,信息只会停留在内存,而且,rtmp服务器可能存在于任何一个文件夹,不必就放在网站目录下,我想比较安全了吧???当然,漏洞还是有的,就是用loadmovie方法将movie(例如:face.swf)载入flash中(在联网状态下),然后在调试模式下使用显示变量命令可以看到变量值。假如fso文件中存放信息就是你要防止下载的文本,很不幸,虽然swf可以防止选中,trace窗口可以复制。如果fso文件信息是另一个movie(例如example.swf)地址,加上URL信息,程序如下:
for face.swf:
so=sharedObject.getremote("secret",false);
address=so.data.address;
url=so.data.url;
_root.loadmovie(address+"example.swf?var1=url",0); //传递参数给另一个swf
for example.swf
localaddress=_root._url;
if(localaddress==var1){ //判断参数是否与当前ip一致,一致则联机,否则不联
nc=new netconnection();
nc.connect("rtmp://yourhostname");
so=sharedobject.getremote("args"); //好象so还要connectnc,不管了。
so.call(remotemethod); //呼叫服务器方法,将返回真实url,做这一个二次判断是防止用loadmovie方法载入swf后,在用_levelx._root.var1=你定义的值 的方法强行赋值。
if(trueurl==_root._url){ //_root_url是只读属性,trueurl有点麻烦,因为同样可以强行赋值,不妨考虑将return 值的函数代替trueurl,这样就让人没机会下手了,不过要考虑网络异步传输问题。
setinterval("1000/12",myplay);
}else{
fscommand("quite");
}
}
function myplay(){
_root.gotoandStop(_root_currentframe+1);
if(_root._currentframe==_root.totalframe){
gotoandstop(1);
}
}
for main.asa
不熟,忘记怎么写了,原则是返回一个值trueurl,可以用call方法,也可以return。
在其余每一个frame上加上stop();
相信一般人是破解不了了。
程序乱写的,因为一直在一般模式下写,函数名之类的记不清,凑合看吧,也没实验过,应该可以成功。
当前共有0条评论,我也要发表: