有时候给别人做
flash,客户总说要先给fla
文件才支付报酬。这种事总让人郁闷,所以就想了一个鬼主意来保护自己的
作品。既可以把fla
文件给客户,又可以让客户拿到fla之后只能在一个有效期之前使用发布出来的
swf。
简单介绍一下我的思路吧,就是把一些重要的类或者Sprite打包成swc文件,这样客户就不能修改这些封装过的资源了,然后可以在这个swc中加入日期校验,如果过期那么就停止系统的功能。所以fla就算到了客户手上,他发布出来的swf也只能在作者限制的日期之前使用。如果swc中日期校验是静态的,也就是只能设定一个不可变的过期日期,检验当前日期是否在此日期之前,使用上会有些不方便,过期后客户还要找你重新要fla文件。受到软件注册的启发,我做了一个License类,可以实现输入注册码后延长有效期。分享给大家希望抛砖引玉。
例子和相关文件都在压缩包中。我自简单说明一下例子吧。
例子中有两个文件夹,封装前和封装后,封装前就是指我做的的这个TestSprite还没有打包成swc,封装后就是已经把TestSprite做成了swc放到fla中了。当然给客户的应该是封装后的。但是为了让大家看明白怎样使用License类,所以把封装前的fla也发出来。(抱歉我比较啰嗦)
从封装前的TestSprite.as中可以看到,这个类首先
创建一个License对象,
创建的时候给它一个名字和一个有效期。为了保证License类不被客户非法替换了,所以需要
创建后进行一个id校验。这个id是根据之前输入的名字用keygen.swf生成的。因为封装后客户就不知道你输入了什么名字,所以可以保证如果他替换License类的话,你这里获得的id就不会是keygen.swf中生成的那个,这时就可以禁止系统功能。这里也建议名字尽量给长点,那样不容易被
破解。
如果License类是正常,那么就可以初始化系统了。初始化的时候就通过License类的validate方法校验是否在有效期内,当返回true的时候就表示还在有效期,则可以进行相应操作,如果返回false就表示已经过期,这时又可以进行禁止系统功能的操作了。
在TestSprite中嵌入了License校验之后,如果需要延长有效期,那么可以通过License类register方法进行注册,如果注册成功则有效期延长。注意License的register方法应该在validate方法之前被
调用,这样才保证校验时候时使用注册之后的有效期。TestSprite中的Liecense对象应该对客户封闭,这样以免他非法使用,因此需要TestSprite提供一个方法来隐藏License的register方法。
封装以后库里只看到一个TestSprite的影片
剪辑,如果在初始化系统之前,使用了register方法注册成功,那么有效期就延长了。见第一帧上的as代码,如果不注册,那么点按钮初始化时,会看到License过期,因为生成License时设定的有效期是20080512,如果注册了,那么有效期将被延长。
ps:
AS3的保护方法,似乎现在破解
AS3的工具还不多,AS2以前的话基本保护也没用了。但愿对大家有点用
[
本帖最后由 rkuke 于 2008-5-29 22:16 编辑 ]