二、加密篇
加密方法流传不少,此处只谈我所知的较为实用的方法:
更改后缀,避开 Flash Saver 等下载工具
此方法可有效避开 Flash Saver 等下载工具。使提取者不得不从缓存中查找文件,一定程度上增加了提取难度。后缀可改为 gif、jpg、txt 等等。虽然可以更改后缀,然而在插入到网页时,仍然需要以 swf 的形式插入,使用此 swf 来加载改过后缀的影片。
限制 Flash 在指定域名/网址中播放 (Flash 防盗链)
url = "http://www.zhugao.cn";
/* 以下判断网址的前 20 个字符(字符数根据你的网址作相应修改),如果与"url"不一致则播放失败。注:swf 可以放在任意目录下,只要网址的前 20 个字符是正确的。 */
if(_url.substring(0, 20)<>url){ gotoAndStop(2);
/* 这里可以做一些东西,例如:将发布设置中的“本地回放安全性”设为“只访问网络”,然后在这里做无数的弹窗 onEnterFrame = function(){ getURL("http://www.zhugao.cn", "_blank"); } */
}else{ gotoAndPlay(3); //跳到正常播放 }
为了便于阅读,以下是没有注释的代码:
url = "http://www.zhugao.cn"; if(_url.substring(0, 20)<>url){ gotoAndStop(2); }else{ gotoAndPlay(3); }
如果要允许多个域名,可以这样写: url = "http://www.zhugao.cn"; url2 = "http://zhugao.cn"; if((_url.substring(0, 20)==url) || (_url.substring(0, 16)==url2)){ gotoAndPlay(3); }else{ gotoAndStop(2); }
注意:用此方法,设计过程中导出时的技巧: 用IE打开先打开指定目标网址,以避免在导出时频繁弹出窗口,如果无效,请将默认浏览器设置成IE,关闭导出时的player窗口即可继续编辑。有时Flash软件会因此发生错误而被强行结束,导出前请保存文档,切记!
常用加密工具
- SWF Encrypt
可有效防止目前流行的几乎所有破解工具对其所加密作品的AS查看。2006年10月更新为3.0.12,尽管加密后文件仍然有明显的增大(视原swf的复杂程度,增大幅度有所不同),然而令人振奋的是,已经支持放射状渐变,支持Flash8.0。加密技巧:分解swf逐个加密,以尽量避免加密后单个文件体积庞大的问题。
- Flashincrypt
可轻易防止闪客精灵目前的版本对其所加密作品的AS查看,加密后的文件几乎保持原文件大小。遗憾的是不能防止 Action Script Viewer 5.0 以上的版本。
适当应用与javascript结合
加密JS,从而实现间接加密swf。相关工具及例子:
- T4nk JS混淆工具
用于javascript的混淆加密。
- Encrypt HTML
加密网页脚本,包括 HTML source code, javascript, VBScript, text, links and graphics 等。
- 从Flash到JavaScript的通讯,从JavaScript到Flash的通讯
- 控制 Flash Player 的 JavaScript 方法一览表:
·播放动画:Play() 例:(网页中的 Flash id).Play(); ·停止动画:StopPlay() ·动画是否正在播放:IsPlaying() ·跳转到某帧:GotoFrame(frame_number) ·获取动画总帧数:TotalFrames() ·回传当前动画所在帧数:CurrentFrame() ·使动画返回第一帧:Rewind() ·放大指定区域:SetZoomRect(left,top,right,buttom) ·改变动画大小:Zoom(percent) ·使动画在 x,y 方向上平移:Pan(x_position,y_position,unit) ·返回动画被载入的百分比:PercentLoaded() ·加载动画:LoadMovie(level_number,path) 例:(网页中的 Flash id).LoadMovie(0, "***/***.swf"); ·movie_clip 跳转到指定帧数:TGotoFrame(movie_clip,frame_number) 例:(网页中的 Flash id).TGotoFrame("_root.实例名.次实例名",帧数); ·movie_clip 跳转到指定标签:TGotoLabel(movie_clip,label_name) 例:(网页中的 Flash id).TGotoLabel("_root.实例名.次实例名","标签名"); ·回传 movie_clip 当前帧:TCurrentFrame(movie_clip) ·回传 movie_clip 当前标签:TCurrentLabel(movie_clip) ·播放 movie_clip:TPlay(movie_clip) ·停止 movie_clip 的播放:TStopPlay(movie_clip) ·获取变量:GetVariable(variable_name) ·变量赋值:SetVariable(variable_name,value) ·call 指定帧上的 action:TCallFrame(movie_clip,frame_number) ·call 指定标签上的 action:TCallLabel(movie_clip,label) ·获取 movie_clip 的指定属性:TGetProperty(movie_clip,property) ·设置 movie_clip 的指定属性:TSetProperty(movie_clip,property,number)
在Word中插入Flash 测试环境:WindowsXP / Office2003
可用在独立文件给客户看的时候,尽管可以用前述方法从word中提取swf,然而此方法仍然具有一定防范效果。
- 新建一Word文档并保存。
- 在Word中依次单击下拉菜单“视图”→“工具栏”→“控件工具箱”。
- 在“控件工具箱”中点击“其他控件”,选择列表中的“Shockwave Flash Object”。
- 右键单击插入进来的Flash播放控件,选择“属性”。
- 在“属性”窗口的“Movie”栏输入Flash动画的路径及文件名,需要用绝对路径,可采用以下两种:
file:///C:/test/test.swf http://www.zhugao.cn/test.swf
- 将“EmbedMovie”项设置为“True”,使Flash嵌入到Word中。“Height”和“Width”分别为Flash的高和宽。“Scale”默认为ShowAll,为缩放模式,始终显示Flash中的所有内容,如果改为NoScale则始终按1:1比例,不会缩放Flash中的内容。
- 单击控件工具箱上的“退出设计模式”按钮,在Word中即可播放Flash了。再次按下该按钮则暂停播放,进入设计模式。如当时未显示Flash,请保存退出Word,再打开该Word文档,点击“退出设计模式”按钮即可看到Flash。
打包成加壳exe
用Flash的默认程序打包的exe很容易转成swf,SWFKit是一款很不错的加壳打包软件,不易被还原。
三、后记
破解时需要多种方法或工具综合使用,加密亦然,需根据用途综合加密。
对于网络用swf的推荐加密方案: 更改后缀,限制在指定域名播放,分解成多个swf并用SWF Encrypt加密。 此方案主要依赖于SWF Encrypt,重在保护作品的AS,一旦SWF Encrypt遭到破解软件的有效攻击,此方案即宣告破产。
附:加密案例:Family Player
经典论坛讨论: http://bbs.blueidea.com/thread-2713590-1-1.html
本文链接:http://www.blueidea.com/tech/multimedia/2007/4438.asp
出处:蓝色理想
责任编辑:blue
上一页 破解篇 下一页
◎进入论坛Flash专栏版块参加讨论
|