欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页  >  网络运营

SWF加密之隐藏密钥篇

程序员文章站 2022-07-10 09:52:00
本片博文介绍的加密方式为最基础的隐藏密钥的加密方式,当然目前来说这样的加密方式也是可以被破解的,也只是防君子不能放小人,加密最终极的办法还是混淆。(在swf文件个公开的情况下,如果adobe不...
本片博文介绍的加密方式为最基础的隐藏密钥的加密方式,当然目前来说这样的加密方式也是可以被破解的,也只是防君子不能放小人,加密最终极的办法还是混淆。(在swf文件个公开的情况下,如果adobe不提供支持,大部分情况下对swf的加密都是徒劳的),本篇只是对swf加密方式的一个整理,分享一种思路。如果您是swf加密高手很期待和您交流,
密钥隐藏
破环swf标准文件头是最简单也是最常用的方法。 向swf的二进制文件的文件头写入无意义的数据,这样就可以导致破解软件无法正常解析swf

SWF加密之隐藏密钥篇


如图所示,向core.swfByteArray开始位置写入无意义的数据,
这样做的原理是Swf文件的前几位表示这个swf的版本信息,以及解析swf需要的参数数据,把它修改为无意义的数据,反编译程序自然也就无法解析了, 当然如果你这样做了之后,也会造成在运行时flashPlayer无法解析core.swf
    正所谓加密和解密是必定会是同时存在的一对好基友。所以我们就需要在core.swf加载好之后把破环的文件头还原回来,你就需要如一个正常的loader.swf来加载被加密的swf,并且把加载的swf文件头还原回来。如下代码
SWF加密之隐藏密钥篇
由于总所周知的原因,这样做只能防君子不能防小人,只是增加了破解者一点点工作量而已,破解者不能直接反编译core.swf、但是他可以破解loader.swf来找到解密代码(如上图红框的数字7是明文存在在loader.swf里的),来还原core.swf的文件头。然后继续用反编译软件进行反编译,
 
参考资料 (摘自不知出处的地方)
SWF文件头
       所有的SWF文件均以以下头部开始:
SWF文件头
字段 类型 * 说明
签字标识 UI8 标识字符:
F”表示未压缩
C”表示已压缩(版本6或后续版本)
签字标识 UI8 此标识通常为“W
签字标识 UI8 此标识通常为“S
版本 UI8 单字节文件版本数(例如,0x06表示版本6
文件长度 UI32 整个文件的字节长度
帧尺寸 RECT 单位帧的尺寸
帧率 UI16 每秒的帧数,其16个位是按照8.8的格式表示的
帧数 UI16 影片的总帧数
* 此类型在基本数据类型一节中定义

 

文件头部是由一个三字节的标识符开始,为0x460x570x53(“FWS”)或者0x430x570x53(“CWS”)其中之一。“FWS”标识符说明该文件是未压缩的SWF文件,“CWS”标识符则说明该文件前8个字节之后(即文件长度字段之后)的全部数据为开源的标准ZLIB方式压缩。
 
上述方法仅仅只能防止一些对swf不了解的外行人,
 
SWF加密之隐藏密钥篇
 
如上图红框的数字7是明文存在在loader.swf里的。 那现在的思路就很清晰了,要做的就是把好个明文的数字7给隐藏起来,达到让破解者无法还原core.swf文件头。由于swf文件格式是公开的,毫无保密性,所以任何用AS实现的加密算法都是耍流氓(没用的),那我们有没有办法用其他方法来隐藏数字7呢。答案是有的:
2种方法
1.alchemy
  Alchemy 能够编译C/C++代码为AS3字节码(运行在AVM2)能够运行在Flash或者Flex平台,并且Adobe宣传Alchemy能够为计算密集型任务提升性能(但是比原生C/C++)
介绍完毕,我可以看到adobealchemy吹的神呼其神,事实上好像确实不错^_^。但是我们今天要用到的不是alchemy执行C/C++代码飘逸的效率,而是利用alchemy暂时(我只能说暂时,鬼知道以后asv会不会也能把alchemy给还原成C)无法被反编译的特性,有点旁门左道了,我想adobe捣鼓alchemy的初衷肯定不是让开发者用来加密自己的swf。但谁让adobeswf格式公开了呢(这里扯个淡,任何东西都可能是双刃剑,破解使开发的劳动成果被瞬间复制的同时也间接间或一部分成就了flash的遍地开花,山寨起来容易啊,在天朝山寨才是王道,个人观点仅供参考,不要纠结flash真正火的原因)
 
SWF加密之隐藏密钥篇

如上图为alchemy的一个HelloWorld的示例程序,你可以在Calcnemy)返回我们解密用到的数字7,或者你觉得用数字其不放心。可以用个公式算一个数字出来返回。Alchemy的性能,我想再复杂的运算都是轻松搞定的。
 SWF加密之隐藏密钥篇
 
如上图所示。 我仅仅写了个helloworld的程序。Alchemy就给我编译出几百个AS类来(截图只是一部分),你能找出还原算法在哪个文件里面吗。反正我是找不出,
 
还原时你要做的就是。 把alchemy编译的swc放到工程库里,执行如下代码,用返回的数字来欢迎core.swf的文件头。

SWF加密之隐藏密钥篇


   
 
 
二:Pixel Bender
    Pixel Bender是Adobe开发的一种编程语言,用户可以使用该语言创建自定义滤镜、效果和混合模式,以用于FlashAEAfter Effects)和Photoshop
  Pixel Bender与硬件无关,可高效地运行于各种GPU和CPU体系结构之上。Pixel Bender开发人员通过编写Pixel Bender代码来创建滤镜。 欲知道详情请点击度娘
alchemy一样。Adone 捣鼓Pixel Bender的初衷肯定也不是让开发者用来加密自己的程序。但是没办法,被adobe逼的呀、 
SWF加密之隐藏密钥篇
 
如图所示,你可以在pixelBender的返回值里,返回我们还原core.swf需要的用到的数字7
pixelBneder解密的过程过程可能有点复杂,不能直接调用方法并返回值。需要监听渲染成功事件。
SWF加密之隐藏密钥篇
SWF加密之隐藏密钥篇

如图fuckNum(罪过粗口了)就是我们的还原core.swf文件头需要用到的数字了
=======================================
    好了。回到开始,以上介绍的加密方式目前来说都是可以被破解的,只增加了点破解的难度,加密最终极的办法还是混淆。这里只是对swf加密方式的一个整理,分享一种思路。如果您是swf加密高手很期待和您交流