swf 加密:采用byteArray 方式,增加字符串加密,可加密大文件sw
http://hi.baidu.com/lq01/blog/item/4aade4fe9232913d5c60081f.html
Posted on 三月 2nd,2010 No comments 什么都不说:先把工具传上来先。 解密的fla:http://91face.com/swf/loader.fla 使用方法:1.把cba.swf用“abcdef”密文加密,生成abc.swf。2.打开loader.fla(与加密后的abc.swf目录一 致),就可以解密,并看到正常的swf文件了。 今天需要用到swf加密,其实我个人来说不是很喜欢加密,flash的精彩源于社区高手的贡献,很多珍贵的代码都可以免费使用,我现做 的项目有很多是采用第三方的类库。今天既然项目需要加密的话就加吧,于是试用了好几种现在流行的加密方法: 衡量了两种方法后准备用第二种,因为简单又可以达到效果。使用后觉得写此加密方法的作者应该是在flash player9是写的,采用的还是用php来生成加密后的swf文件,这样使用起来非常的不便,因为还要布置php的运行环境。因为flash10 的:FileReference类可以本地获取与保存二进制数据了。所以决定对其进行改进。 说得此,我先分析下byteArray的加密原理: 解密的方法也是如此:先把文件导入进来,得到byteArray,分解成8位的字节流,(解密方法就是对字节流进行反位移,也就是加密 是+13,解密就是-13),这样生成新的字节流数组就是可以使用的swf文件了。说到此我不得不佩服原文作者对byteArray机制的理解,不知是否 是自己对加密了解甚少,我就是觉得能这样加密就是强(o_o)!(肯定有人笑我了,哈哈)。 这样加密也暴露了只能采用数字加密的问题,后来我又发现一个比较大的问题,就是:加密最核心的原理是对字节流(8位)的加密,因为是8 位的,范围只能是:0~255之间,那么你采用超过255的数字加密也是会取余成255的,不信你用256这个数字加密看看,得到的是什么?竟然是加密后 的swf,和原来的swf是一致的,原因就是256会变成0,你位移+0,那当然是等于没有变啦。因为这种加密方式生成的加密文件只能有256种,那么我 麻烦点在0~255间一个个地试就能得到解密的swf。 为此我改进了加密算法,使用字符串作为密文。把字符串转为一个ASCII数组(如”abc”,对应的ASCII数组为 97,98,99),然后与文件的字节流数组进行循环加密。如一个1K的swf,那么它有1024个字节流,第一个字节流与97进行位移,第二个与98位 移,第三个与99,第四个又循环与97加。这样生成的加密文件就无穷多了。解密的方法也只有拿到密文才能进行解密。 下面公布加解密方法: //加密函数 var flag:int = 0; //解密函数 var newByte:ByteArray = new ByteArray(); 源文件(flex):http://www.91face.com/swf/entryptSwf.mxml 最后问题是解密的swf,还是会暴露代码。如a.swf把encrypt.swf加载进来后,虽然这个encrypt.swf看不到 了,但a.swf还是未加密的,好在此时a.swf会比较小,可以用doSwf加密。doSwf未授权版本也可以绕过,删除其水印与删除其定时弹出的链 接。为尊重作者劳动成果,故不公布代码。大家还是去doSwf的网站上购买吧,真希望有一天doSwf也能公布其加密方法,到那时swf加密又会上一个新 的台阶了! 最后说句,本人因为平时极少写博客,文字组织能力太差,错别字太多。(555)晚了,回家吧!!! (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |