[转] swf文件加密基础

本来打算下班回来就写这个东西,一方面算是对今天学习的一个笔记记录,另外一方面,给一些朋友普及一些swf文件加密基础知识。之所以说是基础,那是因为我也是刚学习了一点,灰常的基础。不过晚上看了一会我是传奇的视频耽误了,话说郭德纲老是调戏谢楠,难道有基情?不解释,呵呵……
    在说明加密解密方法之前,先解释一些理论方面的东西,很草根。
    swf加密的目的。其实无论是flash的swf文件加密,还是其他各种加密,目的都是很简单,就是私心,不想泄露具体文件细节。当然这也是大环境趋势,在中国很多拿来主义,大家懂得。swf文件的加密,主要目的我分为两个:
      1.flash代码加密,比如商业游戏的代码,被盗用总是不好。
      2.flash素材加密,防止被一些工具破解盗用,用flash做动画的朋友应该深有体会。
    文件格式。什么是文件格式,百度百科是这样介绍:文件格式(或文件类型)是指电脑为了存储信息而使用的对信息的特殊编码方式,是用于识别内部储存的资料。简单点理解,所有的文件都是二进制数据,而特定格式的文件(比如图片文件、视频文件等)都是按照              一定规律排列的二进制数据,只不过后面会加类似“.swf”这样的后缀加以辨识。
      这样的话,针对上面swf加密目的,加密的理论方法自然就诞生了。
    swf加密的方式
      如果是加密代码,那么就用一些工具做代码混淆,降低可读性,即使破解了,也看不懂,那就白破解了。网上有一些工具比较适用,比如doswf。
      如果是加密素材,那就需要破坏文件,让破解工具无法解析数据,这样就能保护文件。破坏文件,就是破坏二进制数据,破坏上面所说的文件格式。当然也不能随便破坏,因为一旦文件破坏,不但别人无法破解你的文件,自己的文件也无法正常运行,就本末倒置           了。所以,需要有规律性的破坏,这个破坏方式也就是一些加密算法
      那么,现在自己的文件是被加密被破坏了,但是也没法用了,为了达到正常使用的目的,我们需要另外一个程序,即是解密算法。解密算法是跟加密算法正好相逆,一个破坏文件,一个修复文件,以达到正常使用的目的。

(注:前面的几段还是上周六写的,后来不小心,脚被石头砸了一下,虽说没有血肉模糊,但还是比较疼,这里也提醒各位朋友,怀里揣着石头的,该放的时候早放,放晚了,就砸脚了……继续接着写吧)

所以,目前我能想到的加密方法是,子文件要同时做混淆代码和加密文件两个步骤,而主文件内,要带有解密代码,同时要混淆这一段代码,防止被破解。

用一个小例子演示一下。这里我先用flash随便做个小动画,里面是一张图,生成的文件我命名为“未命名-1.swf”。这里,这个小动画就是子文件,现在我要对它加密。
    现在新建一个类EncryptTool.as,他的作用就是对这个动画加密。这里要注意的是,因为要加密文件,就会涉及本地文件读写操作,普通flash player是不支持的,需要建立AIR工程运行。
    摘取部分代码解释一下加密过程。

  1. _urlLoader = new URLLoader();
  2. _urlLoader.dataFormat = URLLoaderDataFormat.BINARY;

复制代码

(不知道怎么回事,代码放上去总是会自动去掉后面的,我就直接写外面吧)     _urlLoader.addEventListener(Event.COMPLETE, loaded);
     _urlLoader.load(new URLRequest("未命名-1.swf"));

上面这段代码意思就是把这个动画以二进制数据方式加载读取,然后加载完成后,会触发下面这个方法。

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

复制代码

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

  1. _urlLoader = new URLLoader();
  2. _urlLoader.dataFormat = URLLoaderDataFormat.BINARY;
  3. _urlLoader.addEventListener(Event.COMPLETE, bytesLoaded);
  4. _urlLoader.load(new URLRequest("mc.swf"));

复制代码

加载完成后,触发下面这个方法。

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

复制代码

(不知道怎么回事,代码放上去总是会自动去掉后面的,我就直接写外面吧)

  1. _loader = new Loader();
  2. _loader.contentLoaderInfo.addEventListener(Event.COMPLETE, loaded);
  3. var lc:LoaderContext = new LoaderContext();
  4. lc.allowCodeImport = true;
  5. _loader.loadBytes(data, lc);

复制代码

(刚才代码居然变成Q表情,太无语了,这样一段一段凑合看吧)
     上面读取数据完成后,继续出发下面的这个方法。

  1. private function loaded(e:Event):void
  2. {
  3. _loader.contentLoaderInfo.removeEventListener(Event.COMPLETE, loaded);
  4. var mc:MovieClip = _loader.content as MovieClip;
  5. addChild(mc);
  6. }

复制代码

上面的这个程序就是从二进制数组中,通过Loader,得到一个影片剪辑,此时,程序中的动画可以正常播放了,说明解密成功。

加密解密的基础思路就是这样,当然,别忘了对解密代码做混淆操作,要不然,无用功都白做了。如果不混淆也行,只要不懂代码,只靠一个闪客精灵,是破解不出子文件的素材。
     代码混淆,暂时还未实验,不做演示了,下载工具自行摸索吧。

加密不是万能的,肯定会有大牛能解出来。不过,利用这点基础,防防小菜鸟跟个别破解工具还是可以的。道高一尺,魔高一丈,加密之路永无止境。

顺便吐槽一下新浪博客,没有插入代码的功能,结果自己手动排版代码浪费很多时间。
     代码排版真难受,这个也是,总是出问题

转载自:http://bbs.9ria.com/forum.php?mod=viewthread&tid=172529&page=1&extra=#pid1654416

时间: 2024-10-23 12:33:00

[转] swf文件加密基础的相关文章

swf文件加密基础(转)

本来打算下班回来就写这个东西,一方面算是对今天学习的一个笔记记录,另外一方面,给一些朋友普及一些swf文件加密基础知识.之所以说是基础,那是因为我也是刚学习了一点,灰常的基础.不过晚上看了一会我是传奇的视频耽误了,话说郭德纲老是调戏谢楠,难道有基情?不解释,呵呵…… 在说明加密解密方法之前,先解释一些理论方面的东西,很草根. swf加密的目的.其实无论是flash的swf文件加密,还是其他各种加密,目的都是很简单,就是私心,不想泄露具体文件细节.当然这也是大环境趋势,在中国很多拿来主义,大家懂得

[AS3]as3用ByteArray来对SWF文件编码加密实例参考

[AS3]as3用ByteArray来对SWF文件编码加密实例参考,简单来说,就是将 swf 以 binary 的方式读入,并对 ByteArray 做些改变,再重新存成 swf 档.这个作业当然也可能应该是由 Server 进行 步骤一,随便建立一个 swf 当作要被加密的内容档案,怎么做不管,假设档名 asset.swf. 步骤二,做一个用来进行加密工作的 flash: var ul:URLLoader = new URLLoader(); ul.dataFormat = URLLoader

Linux安全与加密基础(一)

Linux安全与加密基础(一) 常见的加密算法 SSL: Openssl与CA认证 ssh服务 dropbear AIDE sudo 常见的加密算法 密码学古以有之,尤其是在中国古代的战争中,在现在科技中,密码学不得不说是一门高深的学问,普通人知其一二足矣:本文要讨论的是关于加密与解密的基本原理与应用,以及关于Linux系统中的一些安全管理问题,如ssh服务,监控系统关键文件是否被篡改,sudo提权等. 1.对称加密 所谓对称加密,就是同一个密钥可以同时用作信息的加密和解密. 常见的对称加密算法

Linux安全与加密基础(二)

Linux安全与加密基础(二) 常见的加密算法 SSL: Openssl与CA认证 ssh服务 dropbear AIDE sudo gpg gpg亦可用于对称加密与文件检验. 文件完整性的两种实施方式 被安装的文件     MD5单向散列     rpm --verify package_name (or -V) 发行的软件包文件     GPG公钥签名     rpm --import /etc/pki/rpm-gpg/RPM-GPG-KEY-redhat*     rpm --checks

java将office文档pdf文档转换成swf文件在线预览

java将office文档pdf文档转换成swf文件在线预览 第一步,安装openoffice.org   openoffice.org是一套sun的开源office办公套件,能在widows,linux,solaris等操作系统上执行. 主要模块有writer(文本文档),impress(演示文稿),Calc(电子表格),Draw(绘图),Math(公式),base(数据库) 笔者下载的是openoffice.org 3.3.0.下载完直接安装即可.      但是,我们还需要启动openof

如何实现SP文档库类似百度文档库的效果 (副标题:如何在SP2013文档库的SWF文件用FlexPager显示)

如何实现SP文档库类似百度文档库的效果 (副标题:如何在SP2013文档库的SWF文件用FlexPager显示) 1. 编辑文档库列表显示页面,如下图: 2. 添加内容编辑器,如下图: 3. 添加如下在[内容编辑器中]-[编辑源],添加如下JS代码,如下图: ?  代码如下: <scrip type="text/javascript" src="/SiteAssets/jquery-1.4.1.js"></script> <script

手机文件加密软件

手机文件加密软件 给手机文件进行加密你会怎么做?有的人会说这个很简单,直接对手机屏幕进行锁屏就可以了,这个真的是太low了,稍微亲近一点的人或是有心人看过一次就会知道你的开机密码.所以一定要找一个专业的文件加密软件,这样才能够对文件起到加密作用. 现在的我们无时无刻都离不开电脑以及网络,手机更是必备携带之物.那么这样也就有了对数据安全的要求,怎么对手机文件进行加密呢?护密文件夹加密软件,提供高级别的移动数据加密.真正起到文件夹加密的作用,才会让所想要保存的文件绝对的没有任何后顾之忧.毕竟,我们对

PE文件解析 基础篇

PE文件解析 基础篇 来源 https://bbs.pediy.com/thread-247114.htm 前言 之前学习了PE格式,为了更好的理解,决定写一个类似LoadPE的小工具. 编译器是VS2015,采用MFC框架. 此系列文章采用边介绍知识点,边写代码的形式,以免变的无聊丧失兴趣. PE知识请参照<加密与解密>第10章 文章有错误或则不清楚的地方还请您指出. PE文件格式 1.PE文件基本概念 PE文件是windows系统中遵循PE结构的文件,比如以.exe   .dll为后缀名的

MAC电脑如何播放.SWF文件

很简单,不需要专门的播放器,只需要将.swf文件直接拖拽到浏览器页面就可以播放了. 亲测safari , 谷歌chrome浏览器,火狐浏览器 ,都是可以的 下面是图示 step1 电脑上找到swf文件 step2 打开safari浏览器 选中swf 拖到safari浏览器 step3 如果是safari默认界面,那么就会出现如step2中所示图 注意到多出了001.swf图标,点击那个图标就可以了 step4 经过step3就可以观看swf视频文件了