本来打算下班回来就写这个东西,一方面算是对今天学习的一个笔记记录,另外一方面,给一些朋友普及一些swf文件加密基础知识。之所以说是基础,那是因为我也是刚学习了一点,灰常的基础。不过晚上看了一会我是传奇的视频耽误了,话说郭德纲老是调戏谢楠,难道有基情?不解释,呵呵……

在说明加密解密方法之前,先解释一些理论方面的东西,很草根。
swf加密的目的。其实无论是flash的swf文件加密,还是其他各种加密,目的都是很简单,就是私心,不想泄露具体文件细节。当然这也是大环境趋势,在中国很多拿来主义,大家懂得。swf文件的加密,主要目的我分为两个:
1.flash代码加密,比如商业游戏的代码,被盗用总是不好。
2.flash素材加密,防止被一些工具破解盗用,用flash做动画的朋友应该深有体会。
文件格式。什么是文件格式,百度百科是这样介绍:文件格式(或文件类型)是指电脑为了存储信息而使用的对信息的特殊编码方式,是用于识别内部储存的资料。简单点理解,所有的文件都是二进制数据,而特定格式的文件(比如图片文件、视频文件等)都是按照一定规律排列的二进制数据,只不过后面会加类似“.swf”这样的后缀加以辨识。
这样的话,针对上面swf加密目的,加密的理论方法自然就诞生了。
swf加密的方式
如果是加密代码,那么就用一些工具做代码混淆,降低可读性,即使破解了,也看不懂,那就白破解了。网上有一些工具比较适用,比如doswf。
如果是加密素材,那就需要破坏文件,让破解工具无法解析数据,这样就能保护文件。破坏文件,就是破坏二进制数据,破坏上面所说的文件格式。当然也不能随便破坏,因为一旦文件破坏,不但别人无法破解你的文件,自己的文件也无法正常运行,就本末倒置了。所以,需要有规律性的破坏,这个破坏方式也就是一些加密算法
那么,现在自己的文件是被加密被破坏了,但是也没法用了,为了达到正常使用的目的,我们需要另外一个程序,即是解密算法。解密算法是跟加密算法正好相逆,一个破坏文件,一个修复文件,以达到正常使用的目的。
(注:前面的几段还是上周六写的,后来不小心,脚被石头砸了一下,虽说没有血肉模糊,但还是比较疼,这里也提醒各位朋友,怀里揣着石头的,该放的时候早放,放晚了,就砸脚了……继续接着写吧)
所以,目前我能想到的加密方法是,子文件要同时做混淆代码和加密文件两个步骤,而主文件内,要带有解密代码,同时要混淆这一段代码,防止被破解。
用一个小例子演示一下。这里我先用flash随便做个小动画,里面是一张图,生成的文件我命名为“未命名-1.swf”。这里,这个小动画就是子文件,现在我要对它加密。
现在新建一个类EncryptTool.as,他的作用就是对这个动画加密。这里要注意的是,因为要加密文件,就会涉及本地文件读写操作,普通flash player是不支持的,需要建立AIR工程运行。
摘取部分代码解释一下加密过程。
_urlLoader = new URLLoader();
_urlLoader.dataFormat = URLLoaderDataFormat.BINARY;
_urlLoader.addEventListener(Event.COMPLETE, loaded);
_urlLoader.load(new URLRequest("未命名-1.swf"));
上面这段代码意思就是把这个动画以二进制数据方式加载读取,然后加载完成后,会触发下面这个方法。
private function loaded(e:Event):void
{

_urlLoader.removeEventListener(Event.COMPLETE, loaded);
var data:ByteArray = _urlLoader.data as ByteArray; //用二进制数组保持读取的数据
var key:String = "this is a test"; //我们设定密码key为这串字符
var keyBytes:ByteArray = new ByteArray();
keyBytes.writeObject(key); //把这串字符转换为二进制数组
//下面就是加密算法
var p:int  = data.length / 2; //获取原始数据中间的位置索引
var b1:ByteArray = new ByteArray();
for(var i:int = 0; i < keyBytes.length; i ++){
b1.writeByte(data[i + p] ^ keyBytes[i])
}
//上面的这段循环,主要意思是,把密码数据跟原始数据做一次运算,即从原始数据中间位置,取跟密码数据相同字节数的数据,他们做一次异或运算,然后把运算结果存储到一个二进制数组中。
//不知道什么是异或运算的,百度一下,其实我也是刚查的……
data.position = p; //把原始数据位置调整到中间位置
data.writeBytes(b1); //从中间位置,把刚才运算后的数据全部替换进去
//上面中间就是加密的过程,这个稍微有点麻烦了。也有更简单的,比如把首位字节对调等等。
//上面数据加密过了,现在需要把这串加密后的数据保存成一个文件,为了方便,依然保存为swf文件。
var file:File = new File("C:/Documents and Settings/user/桌面/加密解密/DecryptTool/src/mc.swf");
var fs:FileStream = new FileStream();
fs.open(file, FileMode.WRITE);
fs.writeBytes(data);
fs.close();

}
好了,上面已经保存一个加密后的文件了,也就是对应文件夹里面的“mc.swf”,虽然看起来还是普通的swf动画文件,但是如果你直接打开,会发现,什么都没有,一片空白。这个时候,再尝试用闪客精灵之类的破解软件破解这个动画,会弹出“文件被破坏”的提示。没错,文件被破坏了,被加密,当然无法破解。
文件被加密了,但是也没法正常运行了,这个时候,就需找在使用的地方对它进行解密了。新建一个类DecryptTool.as,这个不需要AIR工程,普通正常就行。现在假定这里需要使用这个动画,那么,解密开始。
同样,首先得把加密后的文件以二进制数据方式加载进来。
_urlLoader = new URLLoader();
_urlLoader.dataFormat = URLLoaderDataFormat.BINARY;
_urlLoader.addEventListener(Event.COMPLETE, bytesLoaded);
_urlLoader.load(new URLRequest("mc.swf"));

//加载完成后,触发下面这个方法
private function bytesLoaded(e:Event):void
{
_urlLoader.removeEventListener(Event.COMPLETE, bytesLoaded);
var data:ByteArray = _urlLoader.data as ByteArray; //同样,保存读取的数据,这是加密后的
//下面的解密运算,跟加密运算方式一样,原因是异或运算,逆向运算跟之前的看起来没有任何区别
var key:String = "this is a test";
var keyBytes:ByteArray = new ByteArray();
keyBytes.writeObject(key);
var p:int  = data.length / 2;
var b1:ByteArray = new ByteArray();
for(var i:int = 0; i < keyBytes.length; i ++){
b1.writeByte(data[i + p] ^ keyBytes[i])
}
data.position = p;
data.writeBytes(b1);
//上面得到的是解密后的数据,这是完整的数据,跟之前读取的"未命名-1.swf"的数据时一模一样的,因为这个步骤就是还原数据的作用。这个时候,如果你把这段数据保存为一个swf文件,会发现这个文件能正常使用,位图什么都正常显示,跟之前的源文件没有任何区别。
//得到完整数据后,用Loader读取这段二进制数据,注意下面加粗的这几行代码,很重要,否则会报错说不支持swf。
_loader = new Loader();
_loader.contentLoaderInfo.addEventListener(Event.COMPLETE, loaded);
var lc:LoaderContext = new LoaderContext();
       lc.allowCodeImport = true;
_loader.loadBytes(data, lc);
}

上面读取数据完成后,继续出发下面的这个方法。
private function loaded(e:Event):void
{
_loader.contentLoaderInfo.removeEventListener(Event.COMPLETE, loaded);
var mc:MovieClip = _loader.content as MovieClip;
addChild(mc);
}

上面的这个程序就是从二进制数组中,通过Loader,得到一个影片剪辑,此时,程序中的动画可以正常播放了,说明解密成功。
加密解密的基础思路就是这样,当然,别忘了对解密代码做混淆操作,要不然,无用功都白做了。如果不混淆也行,只要不懂代码,只靠一个闪客精灵,是破解不出子文件的素材。
代码混淆,暂时还未实验,不做演示了,下载工具自行摸索吧。
加密不是万能的,肯定会有大牛能解出来。不过,利用这点基础,防防小菜鸟跟个别破解工具还是可以的。道高一尺,魔高一丈,加密之路永无止境。
顺便吐槽一下新浪博客,没有插入代码的功能,结果自己手动排版代码浪费很多时间。

转载于:https://www.cnblogs.com/qshuyan/p/3974392.html

swf文件加密基础(转)相关推荐

  1. SWF文件加密、混淆

    简单说下SWF文件的混淆原理,(已经明白的请跳过本段):我们的AS源代码被编译完成后,SWF内部会形成一个字符串映射表,包含源码里出现的所有字符串(类名,包名,成员变量名,常量等).一个数字(相当于地 ...

  2. 如何保护swf文件,加密代码(译)

    在我的培训课程中我常常被问到有关保护SWF影片的问题.这里有两种方法:一种是加密代码,让它难以被别人反编译和使用:另一种方法是限制SWF文件在哪些地方可用,这样别人就不能随意将你的SWF影片放在他们的 ...

  3. swf文件二进制数据流加密基础

    现在新建一个类EncryptTool.as,他的作用就是对这个动画加密.这里要注意的是,因为要加密文件,就会涉及本地文件读写操作,普通flash player是不支持的,需要建立AIR工程运行. 在说 ...

  4. 《Swf文件的那些事》—as函数跨平台的交互详解

    as函数调用交互 随着2020年的到来,flash也逐渐不被各大平台所使用,今天就来讲讲swf文件的交互使用方式 这篇文章纯属技术探讨,请勿用于非法用途.转载请说明来处 写在前面 先说说我为什么会写这 ...

  5. python怎样打开加密的文件_python基础教程如何用Python 加密文件

    生活中,有时候我们需要对一些重要的文件进行加密,Python 提供了诸如 hashlib,base64 等便于使用的加密库. 但对于日常学习而言,我们可以借助异或操作,实现一个简单的文件加密程序,从而 ...

  6. Java基础篇之利用IO流给文件加密、解密

    目标:给文件加密.解密(最基础版) 注意: a.加密过程:先读取整个目标文件,然后将目标文件写入一个新的文件中,在写入的过程中,每隔几个字符插入一个加密符号(随意定),此时这个新的文件就是加密文件 b ...

  7. 介绍几种swf文件的加密方法

    目前几种流行的加密方法: 第一种是使用"swf encrypt".或者doSWF软件加密,个人认为swf encrypt 的加密不太好,原因不是它算法不够强或者什么的,而是闪客精灵 ...

  8. Linux(debian7)操作基础(十二)之文件加密使用指南

    ⑴ 普通文件加密 ① OpenSSL ② GnuPG 缺点:只适合加密保存,不适合运行. 请参考原文:https://blog.gtwang.org/linux/how-to-encrypt-data ...

  9. 破解加密过的SWF文件

    Flash制作的文件格式是swf,有些人在制作时都会加上输入保护,然后转成EXE文件.这样我们就不能用Flsah程序打开来编辑这个文件了,这样做可以维护作者的版权,但如果你不是出于商业用途,而只想获得 ...

最新文章

  1. OpenGL拾取操作流程
  2. 动态规划--最长公共子序列
  3. 一、华为云ModelArts环配置
  4. RocketMQ中的Topic和JMS的queue有什么区别?
  5. 奇异值值分解。svd_推荐系统-奇异值分解(SVD)和截断SVD
  6. SuperSocket源码解析之开篇
  7. 如何使用插件生成自定义Java 8代码
  8. php 获取key的位置,PHP获取当前所在目录位置的方法
  9. 同方挑战惠普 大打“惠民”牌
  10. 微信登录画面_微信登录界面改版,美炸了!
  11. android qq钱包接入,QQ
  12. oracle dsi 培训,DSI学习笔记
  13. ACCV2020国际细粒度网络图像识别亚军方案总结
  14. 云呐|加强固定资产设备信息化管理工作
  15. video视频设置第一帧为封面
  16. 夜暗方显万颗星,灯明始见一缕尘
  17. 计算机硬件 软件和用户的关系,大家都知道计算机包含硬件和软件,那这两者之间区别是什么呢?...
  18. MAXHUB开启系统恢复
  19. python3实用小工具--wifi路由器厂商查看器(附源码)
  20. ToDesk 远程桌面控制

热门文章

  1. ssh + oracle 项目总结
  2. 项目实战一 建立坐标系
  3. ALVA Systems 入选 2021 中国工业软件年度企业排行100
  4. 投资界百年老店,巨头之友,现在它来中国买起了茅台
  5. 第六章、Zigbee模块组网实例
  6. 左神算法笔记(一)时间复杂度
  7. matlab v4是什么意思,train.m · Song_Yuqi/yolov3-yolov4-matlab - Gitee.com
  8. 60页智慧城市运营管理平台解决方案
  9. java毕业设计血库系统Mybatis+系统+数据库+调试部署
  10. 基于JavaWeb的高校医疗报销管理系统