转载自:http://www.91face.com/blog/?p=206

先把工具传上来先。

http://www.91face.com/swf/entryptSwf.swf

解密的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)晚了,回家吧!!!

转载自:http://www.91face.com/blog/?p=206

【转载】swf 加密:采用byteArray 方式,增加字符串加密,可加密大文件swf相关推荐

  1. swf 加密:采用byteArray 方式,增加字符串加密,可加密大文件swf

    http://hi.baidu.com/lq01/blog/item/4aade4fe9232913d5c60081f.html Posted on 三月 2nd, 2010 admin No com ...

  2. 转载: React Native 采用Fetch方式发送跨域POST请求

    转载:http://blog.csdn.net/u012620506/article/details/52346264 小白林宇风的技术博客 关于跨域: A上的页面获取B上的资源,浏览器会检查服务器B ...

  3. python字符加密2编程_python的字符串操作和*加密解密

    一.字符串操作 1.字符串大量的系统提供的操作函数 image.png 2.字符串的编码解码处理 将计算机中的字符串按照一定的顺序表示成二进制数据的过程 python3中:字符(str):字节(byt ...

  4. 几种快速传输大文件的方式

    随着科学技术的发展,图片或视频等文件的质量越来越高,同时也意味着,文件也变得越来越大,那么快速传输大文件需求越来越明显. 在日常生活中,经常遇到需要与他人共享文件或传输到另一台电脑上的情况.传统的大文 ...

  5. 软考中级【数据库系统工程师】第1章:计算机系统知识,自学软考笔记,备考2022年5月份软考,计算机硬件系统CPU组成指令寄存器组总线输入输出的程序控制方式计算机体系结构与存储系统加密技术流水线技术

    前情提要:笔记只整理与考试相关的重点知识,也就是历年真题出现过的考点我都会记录笔记,一些不重要的内容我就不记录了,大家可以自行查看教材. 1.1计算机硬件基础知识 考点1:计算机硬件系统的组成 考点2 ...

  6. Android常用加密解密实现方式

    1.MD5,SHA1加密校验 MD5,SHA1等加密算法我们通常不用来做加密,因为解密成本非常大,我们一般用MD5,SHA1等用来做文件校验,唯一性校验等功能.常见的场景如防止别人恶意篡改我们的APP ...

  7. Java各种加密和解密方式

    加密算法 文章1:https://www.cnblogs.com/xibushijie/p/12851771.html 文章2:https://blog.csdn.net/weixin_3706959 ...

  8. JAVA各种加密与解密方式

    之前有兴趣研究了一下java的加密与解密的方法,发现市面上有好多种加密解密方式,在这里整理了一下. 目录 1.BASE64加密/解密 2.MD5(Message Digest Algorithm)加密 ...

  9. 完整记录一下Web前端直传阿里OSS大文件+采用后端临时授权传stsToken的方式

    文章目录 前言(可不看) 1. 简介 2. 必要了解项 2.1 资源术语 2.2 常用SDK 3. 准备工作 3.1 创建bucket 3.2 设置跨域规则 3.3 创建RAM子账户及配置权限 3.4 ...

最新文章

  1. 针对杂乱环境下抓取物体的机器人学习
  2. iphone个系列尺寸_iPhone 12系列、11系列尺寸对比
  3. ServiceHot告诉你美国的程序员们各编程语言薪资情况
  4. 2021 IEEE热门AI话题盘点:模仿生物大脑打造神经网络、GPT3“不当言论”惹关注…...
  5. Android 4.0 Notification
  6. c++Error:c++调用python文件提示由于找不到python3.8.dll,无法继续运行。。。
  7. SAP LIST 画框的FORM
  8. Divan and Kostomuksha (H version) dp,gcd(2300)
  9. 三大最被低估的安全技术 用户数量决定一切
  10. 红橙Darren视频笔记 builder设计模式 navigationbar 导航栏第二版
  11. python编程(动态加载)
  12. 小狗拉菲扫地机器人_小狗电器:2018年最值得入手的五款扫地机器人
  13. html链接phpayadmain数据库,无法从Xamain.iOs和Xamarin.Android使用C#连接到MySql
  14. latex中文小标题_科学网—一个较为完整的中文图书Latex模板 - 张金龙的博文
  15. 平稳信号、非平稳信号
  16. Velocity详解及demo
  17. python里面pop,remove和del 三者的用法区别
  18. 什么是socket.Io
  19. 【HCIA 03】华为静态路由配置
  20. sublime快捷键!+tab键失效

热门文章

  1. 开机冷启动和热启动简单分析
  2. 运维面试必问的中间件高频面试题(2021年最新版)
  3. IDA、X32dbg逆向分析易语言程序窗口标题、宽度、高度
  4. PaddlePaddle入门|百度零基础实践深度学习课程笔记——使用Python语言和Numpy库来构建神经网络模型
  5. python的锁机制_python互斥锁、加锁、同步机制、异步通信知识总结
  6. 高数 | 【多元函数微分学 概念篇】连续、可偏导及可微之间的关系
  7. python进行各项统计检验_运用python进行相关性统计检验
  8. (图文详细)AppServer安装及配置教程
  9. vue 加载页面时触发时间_5.6 vue更新数组时触发视图更新的方法,熟记JavaScript原生方法...
  10. sketch最强切图工具Sketch Measure(含最详细的讲解)