什么都不说:先把工具传上来先。
解密的fla:http://91face.com/swf/loader.fla
使用方法:1.把cba.swf用“abcdef”密文加密,生成abc.swf。2.打开loader.fla(与加密后的abc.swf目录一致),就可以解密,并看到正常的swf文件了。
今天需要用到swf加密,其实我个人来说不是很喜欢加密,flash的精彩源于社区高手的贡献,很多珍贵的代码都可以免费使用,我现做的项目有很多是采用第三方的类库。今天既然项目需要加密的话就加吧,于是试用了好几种现在流行的加密方法:
第一种是使用”swf encrypt”、或者doSWF软件加密,个人认为swf encrypt
的加密不太好,原因不是它算法不够强或者什么的,而是闪客精灵等破解软件会专门针对它的加密算法进行破解。这会导致您加密不久的swf又遭人破
了,doSwf是国人写的,还真不错,我试了下加密得很好,连movieClip都看不到。还真想了解下doSwf的加密原理(^.^),现在doSwf
是要收费的一年200元,其实钱不是问题(不是我吹牛,至少对于公司来说是这样),钱能解决的问题都不是问题。但是…..(来了:)!
,dowSwf加密大文件的swf有问题,我用我们公司的游戏项目,一个1M左右的swf,加密会出错。所以这种方法对于现有的项目不可行。
第二种方法是采用byteArray二进制加密,此种方法不会使swf变大,只是在原有的字节流中做混淆,对闪客精灵等软件可以起到很好的防破解作用。网上又有源码可以很好地做研究。网址:http://bbs.blueidea.com/thread-2900310-1-97.html
。但是此方法有一个弊端,就是需要一个解密的swf(下面会说到),解密中的密文还是会暴露。
衡量了两种方法后准备用第二种,因为简单又可以达到效果。使用后觉得写此加密方法的作者应该是在flash
player9是写的,采用的还是用php来生成加密后的swf文件,这样使用起来非常的不便,因为还要布置php的运行环境。因为flash10
的:FileReference类可以本地获取与保存二进制数据了。所以决定对其进行改进。
说得此,我先分析下byteArray的加密原理:
byteArray的加密原理是,先用:URLLoader把swf文件加载进来,得到
URLLoader的data属性(byteArray类型),然后把这个byteArray数组进行分解,得到一个8位的字节流。然后对这个字节流进行位移(也就是加密的数字,文章中用的是+13),最后得到一个新的字节流数组,进行保存。
解密的方法也是如此:先把文件导入进来,得到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加。这样生成的加密文件就无穷多了。解密的方法也只有拿到密文才能进行解密。
下面公布加解密方法:
//加密函数
private function compress(byte:ByteArray):ByteArray{
var key:String = password.text; //得到密文
var flag:int = 0;
var newByte:ByteArray = new ByteArray();
/* */
for(var i:int = 0; i<byte.length ; i++ ,flag++){
if(flag >= key.length){
flag = 0;
}
newByte.writeByte(byte[i] + key.charCodeAt(flag));
//newByte.writeByte(byte[i] + 256);
}
//输出
fileByteArray = newByte;
saveBtn.visible = true;
return newByte;
}
//解密函数
private function uncompress(byte:ByteArray):ByteArray{
var key:String = password.text; //得到密文
var flag:int = 0;
var newByte:ByteArray = new ByteArray();
/* */
for(var i:int = 0; i<byte.length ; i++ ,flag++){
if(flag >= key.length){
flag = 0;
}
newByte.writeByte(byte[i] – key.charCodeAt(flag));
//newByte.writeByte(byte[i] + 256);
}
//trace(newByte);
fileByteArray = newByte;
saveBtn.visible = true;
return newByte;
}
源文件(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)晚了,回家吧!!!
分享到:
相关推荐
例如,`Convert.ToBase64String(byteArray)`将返回一个表示`byteArray`的Base64编码字符串。 3. **Base64解码**:如果需要将Base64字符串转换回原来的字符串或字节数组,可以使用`Convert.FromBase64String()`方法...
在Flash开发过程中,为了保护SWF文件中的源代码不被轻易地反编译查看或者为了保护文件中的资源不被盗用,开发者通常会采用各种手段对SWF文件进行加密。这样可以有效提高SWF文件的安全性。 #### 1.2 使用AS3.0进行...
### Python 实现字符串加密成纯数字 #### 概述 本文详细介绍了一种使用Python语言将字符串加密为纯数字的方法。这种加密方式虽然简单且安全性有限,但对于初学者来说,不失为一个很好的学习案例,能够帮助理解基本...
# PNG加密解密工具 此工具可以加密和解密PNG图片,保护您的隐私。 ## 加密 1. 选择要加密的PNG图片。 2. 输入密码并确认。 3. 点击“加密”按钮。 4. 保存加密后的PNG图片。 ## 解密 1. 选择要解密的PNG图片。 ...
var swf:SWF = new SWF(); // 添加文件属性标记 swf.add(new FileAttributes(true, false, false, false, false)); // 添加背景颜色设置标记 swf.add(new SetBackgroundColor(0xffffffff)); // 添加场景和...
在VB6.0编程环境中,字节数组和字符串之间的转换是常见的操作,尤其是在处理二进制数据和文本数据之间转换的场景。本教程将详细解释如何在VB6.0中进行这两种数据类型的转换,并通过实际示例进行演示。 1. 字符串转...
以上步骤完成之后,ByteArray中的音频数据就成功转化成了可播放的Sound对象。如果需要,还可以通过SoundChannel对象来控制音频的播放,如暂停、停止、调整音量等。 总结起来,将ByteArray转换为Sound涉及了Flex的...
4. **还原字符串**:将截取的字节数组再转换回字符串,可以使用`new String(byteArray, charset)`构造函数。确保使用的字符集与原始字符串相同,以避免乱码问题。 在SliceByByte.java这个文件中,我们可以看到实现...
在Python编程中,字符串加密和解密是保护数据安全的重要手段。本文将分享三种方法,包括基础的base64和更高级的win32com.client,以及自定义的加密算法。 1. **Base64加密解密** Base64是一种简单的编码方式,而非...
相反,`bytearray` 或 `char`数组更适合处理二进制文件,因为它们不关心数据的解释方式,只需按字节读取和写入。 在机器视觉应用中,数据通常是图像或视频帧,这类数据以二进制形式存在。因此,`bytearray` 或 `...
Base64是一种常见的数据编码方式,它将任意的字节序列转换为可打印的ASCII字符序列,常用于在网络上传输二进制数据。在JavaScript中,Base64的加密和解密是通过特定的库或者自定义函数实现的。本文将深入探讨Base64...
这种方式适合在网络上传输,因为Base64编码后的字符串包含的字符都是ASCII可打印字符。 - PNG/JPEG编码:Bitmap可以被直接保存为PNG或JPEG格式的字节数组,再转换为String。这种方式生成的字符串通常较短,但不可读...
AES加密算法,全称为Advanced Encryption Standard,是一种广泛应用于现代数据加密的标准,为保证信息安全提供了强大的保护。本主题将深入探讨AES加密算法在Java、ActionScript(AS)和JavaScript(JS)三种不同编程...
此程序接收一个字符串,对其进行MD5加密,并打印出加密后的哈希值。 在提供的压缩包文件“200582911227087”中,可能包含了上述VB源程序或相关示例,你可以解压后查看具体代码和使用方法。通过学习和理解这个源程序...
在Java中,一个byteArray是一个固定大小的数组,每个元素都是一个字节(8位),可表示从-128到127之间的整数值。由于其大小固定,它们通常比其他类型的数组更节省内存。此外,由于字节是计算机存储和处理数据的基本...
然后,它将加密后的字节数组转换为十六进制字符串,这是MD5散列值的常见表示形式。 #### MD5的局限性与安全性 虽然MD5在很多场景下非常有用,但它并非完美无缺。随着时间的推移,研究人员发现了针对MD5的碰撞攻击...
ByteArray则提供了一种在内存中存储和操作二进制数据的方式。通过将Bitmap转换为ByteArray,我们可以更有效地进行位图的缩放、裁剪等操作,尤其是在处理大量或大尺寸图片时,可以降低内存消耗。 实现9-slice Bitmap...
接下来,使用`md5.digest(byteArray)`计算输入字符串的MD5摘要,这将返回一个字节数组。最后,将字节数组转换为32位的16进制字符串,以便于阅读和比较。 MD5算法本身是不可逆的,这意味着从MD5摘要无法恢复原始数据...
bytearray2string 方法将 byte 数组转换为字符串,使用默认的编码方式来解码 byte 数组。string2bytearray 方法则将字符串转换为 byte 数组,返回的 byte 数组长度可能小于原始字符串的长度。 3. 字符串与 byte ...
字符串输入和16进制输入是常见的数据格式处理方式,它们在实际应用中有着广泛的用途,特别是在嵌入式系统和工业自动化领域。理解并熟练掌握这些技术,对于进行串口通信相关的软件开发至关重要。