CSK.Blog--个人原创Weblog

简单聊下SWF的保护

所谓简单聊下,就是大致提一下,不做深入研究,毕竟自己好久没涉及Flash这一块了。这里一方面是给好友Tony(http://www.greatony.com)开发的工具做一下宣传,另外也算分享一些我之前的想法吧。

和目前炒得很火的HTML5不同的几处之一,Flash产生的最终发布格式是SWF,而非可见代码的HTML tag + js 组合。这样虽然被很多人批评诸如对搜索引擎不透明、难以做第三方扩展等问题,但却有另外一个好处:对知识产权保护比较有利。

虽然位图、声音、矢量图等信息仍旧以原先的格式打包进入了SWF文件,这部分内容还是可以轻易被各类Flash逆向工程工具获得,但是最核心的AS3源代码已经被编译成为了Bytecode,理论上,这是可以做到令逆向工程者无法获取与源代码100%相同的逆向结果的。另外,扯开点说,swf本身也作了LZ压缩,在网络通讯上,与下载等量功能的HTML5也具有优势,同时Adobe也给出了比较清晰(?)的swf specification。所以我近期还是比较看好Flash的未来的。

好了,不扯远了,这里接说说前面我提到那个“理论上,这是可以做到令逆向工程者无法获取与源代码100%相同的逆向结果的。”相信凡是做过Flash开发的朋友们都知道这条目前是不成立的,诸如ASV等逆向工具均可以得到几乎是与源代码一致的反编译结果,甚至连内部变量都可以获得。造成这样的原因主要还是Flash编译器,比如mxmlc,对Bytecode没有做过多复杂的处理。

就像我之前在Flash交流会(http://www.csksoft.net/blog/post/avm2_intro.html)提到的,该编译器并没有在编译阶段对AS3源代码做任何的优化。(Flash VM将在JIT阶段做出简单的优化) 相反,他甚至会产生比源代码更加糟糕的Bytecode,同时,也会包含很多源代码的细节。这就给反编译提供了很多的便利。

其实相同的问题在Native程序开发时就早已遇到过,搞反汇编的朋友应该很了解混淆、花指令这类的概念。简单的来说就是插入无关的指令来干扰反汇编程序,使得他崩溃或者无法得到正确结果。同时,混淆的汇编代码也会造成人工分析汇编的障碍,从而提高了软件分析的难度,最终达到了保护软件核心算法不被逆向的手段。

同样,我们也可以利用这些技术来达到保护SWF文件的办法。关于这个,Tony同学比我有更多的研究,大家不妨阅读他Blog的几篇文章以及他前不久在Flash交流会做的演讲:

演讲:《Swf文件格式和Abc代码混淆工具的开发》

http://v.ku6.com/show/MwjMgfhEgUFoiZhx.html 

SWF文件格式和ABC代码混淆工具的开发 (一) – 出发点和目标

http://www.greatony.com/?p=84

 

SWF文件格式和ABC代码混淆工具的开发(二) – SWF和ABC文件格式

http://www.greatony.com/?p=96

 

Tony也开发了一款针对AS3.0 SWF的代码混淆与分析工具 SWFSpy,目前已经支持对Bytecode进行符号名替换、插入无关代码等混淆操作,对付ASV等工具已经绰绰有余,同时可以用来观察SWF各Tag数据,比如其中的图像资源,也可以反汇编ABC代码。受他之托,这里介绍此工具给各位。我个人认为此工具虽然目前还在不断完善中,但核心的混淆和分析功能均已经实用。

他网站提供了该混淆分析器的免费版本。

SWFSpy

http://www.orandea.com/product?lang=cn

 

下面是几张截图,分别为支持的混淆选项、Tag分析和反汇编。

 

 

 

再回来文章的主题上来,其实目前Flash的保护除了Bytecode混淆还可以做更进一步的扩充,比如已经广泛用于native程序的加壳技术,不过AVM2对代码执行权限的限制可能会制约加壳的实施,但不妨作为一个有益的尝试。加壳不但可以保护代码,同时也能降低代码尺寸,这个在Scene Demo中有很好的体现,如果今后谁实现个Flash版本的kkrunchy壳(http://www.csksoft.net/blog/view.asp?id=165)进行PAQ7算法的压缩,那或许Scene Demo比赛中说不定还真有Flash影子了,当然,Adobe需要继续优化AVM2才行。这就权当一种假设吧。

虽然工作后已经很久没有使用Flash开发过完整的东西,不过我还是会时刻关注这方面的技术,回想高中时候最早接触的Flash4到目前的Flash11,变化还是很大的。另外也想到自己Flash网站好久没有更新了,现在都是AS3得天下了,当年花费我比较大心血的AS1.0的网站,或许是可以开源了...

友情宣传:9月18日 第5届 FLASH开发者交流会 暨FLASH CAMP 2010

9月18日 第5届 FLASH开发者交流会 暨FLASH CAMP 2010


议程安排

2010年9月18日 星期六

  • 12:30 ~ 13:00 参会人员签到,入场
  • 13:15 ~ 15:00 主题讨论
  • 15:00 ~ 15:15 茶歇和聊天
  • 15:15 ~ 17:30 主题讨论
  • 18:00 技术交流和讨论 

会议地点

畅星大厦•上海
地址:上海浦东新区碧波路888号畅星大厦3楼会议厅
电话:021-38984558
网站:http://www.changxing.sh.cn
交通:地铁2号线张江站(步行5-10分钟即到),161

在中国Flash开发者交流会做的演讲-AVM2虚拟机与ActionScript3性能分析

这里再次感谢活动主办方提供这样一个机会供大家交流,气氛和条件都很不错。

 

这是我于5.30号在第三次中国Flash开发者交流会(swfsh.com)活动上做的一个专题介绍。题目为《AVM2虚拟机与ActionScript3性能分析》。这里把当时的讲稿和实例代码放出供大家分享。另外主办方网站也有当时我演讲的录像(http://events.swfsh.com/2010-5-30-04/  (原链接实效,视频可通过下面地址访问: Part1 Part2),可以过去看看:-)

 

其实从工作后我好久没有使用Flash写过东西了。以前也专注在AS1/2的使用。而这次介绍的是Flash9开始引入的AS3语言所使用的虚拟机AVM2的分析,以及对ActionScript3.0开发优化方面的一些启发,以及演示了一个我自己扩充的第三方AVM2虚拟机实现ActionScript3对OpenGL和Fmod的调用。

 

可能PPT和视频中存在错误,希望大家多多包涵~ 不废话了,下面是PPT的在线预览以及下载地址。

 

PPT:

 

PPT Pdf地址:

http://www.csksoft.net/data/avm2_as3_intro_shikai_chen.pdf

 

演示代码:

http://www.csksoft.net/data/avm2_intro_samplecode.zip

 

 

其中,对Red-Tamarin的修改我用patch形式提供。

topic:开发人员眼中的RIA,基于Flash实现

请点击文章标题进入正文以下载附加信息

前不久因为不少朋友对这个主题感兴趣,就在公司组里做了这个topic。主要从软件开发人员的角度来介绍flash的最新技术以及当今一些新兴的RIA应用。

整个topic主要分为下面几个部分:

1. RIA的介绍,当前状况

2. Flash的起源,内部运作模式,AVM2虚拟机构架

3. Flash10的最新应用:Pixel Blender以及3D渲染支持以及其意义

4. AS1/2/3语法比较,AIR构架

5. OpenSource Flash,Flex sdk与FD3

6. Flash和Silverlight的比较

7. Demos. 基于FlArtoolkits库的演示、现场演示制作音乐可视化特效、编译Flash实现的人脸识别程序

 

这里就把当时做topic用的ppt以及一些demo代码公布出来,其中那个音乐可视化特效会在后面花些篇幅解释下。其实我很久没接触AS3.0的东西了,很多数据和资料也是看了相关文献得到的,如果有错误或者遗漏,希望谅解,也欢迎给出纠正。

下面贴一些该topic ppt截图:

 

 

包含的Demo介绍

1. Flartoolkits 的应用

不得不承认现在AS3.0在JIT的帮助下性能的确提高了很多。以至于处理一些简单的CV都可以了。FlArtoolkits是一个基于Flash实现的artoolkits(主页介绍)库。在目前主流的计算机配置下,使用摄像头配合浏览器任何人都可以进行虚拟现实应用。这次介绍了一个Flash的虚拟鼓的应用,如下图。有摄像头的朋友可以直接去给出的链接中亲自体验。不过之前需要打印marker到一张A4纸上。大致意思就是将虚拟的3d物件影射到现实世界中,并且能和现实世界产生些“互动”。

上图以及该DEMO来源:http://www.squidder.com/2009/03/03/augmented-reality-drum-kit/

FlArtoolkit和上面这个demo都是开源的。

2. 音乐频谱的视觉化效果器

这个是我花了1个小时写的,演示了提取当前声音输出FFT频谱的功能。程序也比较简单,100行代码。比较适合新手了解Flex sdk以及FD3的使用。另外要说明的是该demo附带的音乐出自我表弟Somnia之手的WayOutWest-Melt,给他做下宣传,呵呵。

eArts'08中作品的介绍

点击文章标题察看全部内容。

作品名称:你,或者你们,或者我们,或者我

创作时间:2008

展览: Shanghai eArts Festival 2008

展区:蓄与化——青年新媒体艺术作品展

展览时间:2008-10-18 ~ 2008-11-08
官方网站介绍页面:http://www.shearts.org/index.php/?p=591&lang=zh-cn (可能会失效)

Flv视频播放:

局部图案

 

全景图1

全景图2

Flash中共享库、atttachMovie和#initclip

好久好久没写教程了~一方面觉得最近自己也没学什么很有用的东东,不过今天这个还是要说说说的。


你是否值得看此文?

如果你遇到了下面的问题,那么此文对你可能有参考价值:

1.想了解Flash里面库元件中“连接”(Link)属性里面的为运行时共享导出、共享库URL、为运行时共享导入以及文件导入菜单中打开外部库这些功能的作用和用法

2.想实现如何让许多swf文件公用同一个swf文件中的库元件(运行的时候)

3.想实现用attachMovie加载其他swf文件库中的元件

4.想知道AS代码#initclip块的具体内涵

5.在编写用attachMovie加载其他swf文件库中的元件时遇到了问题

写本文的原因之一就是我在写自己Flash网站是也遇到了相同的困难,要让ReformUI能在外部加载的swf文件一面也使用,涉及的主要方法虽然外面也有介绍,但很多细节是没有公布的

由于时间关系,我不想讲一下细枝末节的东西,关于运行时共享的基本概念,大家如果还有不明白的就看adobe的官方教程:http://www.adobe.com/cfusion/knowledgebase/index.cfm?id=tn_14767

................... 点击标题阅读全文

新网站开始建设,重新设计了界面

今天大致作了个效果图出来(点击可看到1:1全图):


图中背景最终是可以任意换得,呵呵,是不是要说抄2ad了...

由于这个网站推得时间太久了,所以以前的设计已经不能满足现在的需要了,新的设计体系可以让flash自动充满整个屏幕,而且背景图的尺寸至少会是1440*900的,当然如果你的显示器没那么高的分辨率,两边的图就会截去。

还是受2ad很大影响的,除了ui上的变化,其内核还是没有多少改变。

现在只是做了个效果出来,其他什么都是空的,大家给点意见吧~

做了些立体图

唉,都忘了自己还开发了个Stereoic,而且还没怎么宣传的说……

就把最近做的一些立体图发上来吧,如果不会看的话,Stereoic里面有教程的~

点击察看原始图片

雷达天线

保龄球……

2张图片的源文件地址:

http://www.csksoft.net/StereoCity/Stereogram/src/satdish.rar

http://www.csksoft.net/StereoCity/Stereogram/src/bowling.rar

你可以用Stereoic连修改这些图片^_^

最后祝各位愚人节耍和被耍得开心……别来耍我……

ActiveX不再Active了……

标题说的有点夸张了,其实是M$的KB912945对今后IE的一些修改

据说是和专利纠纷有关,M$打算在不久后发布一个新的IE补丁,同时也将被IE7采用。这个补丁十分的荒唐:

After you install this update, you cannot interact with ActiveX controls from certain Web pages until these controls are enabled. To enable an ActiveX control, manually click the control.

大意是:在安装好本次更新后,除非你事先手动将页面上的ActiveX控件激活,否则无法和他们交户

直白点就是比如网页上的一个Flash游戏,你先要去点击他一下,让IE把它激活,然后开能开始进行正常操作,下面是装了这个补丁的IE的画面:

 

如果不做修改,以后我Blog上的那个Flash鼠标移上去是这样的,然后你必须去点一下激活它,而且如果页面上有3个Flash或者是MeidaPlayer控件或者是Java程序,那么每个都需要你去手动激活……

真不明白这样有什么好处……幸好只是阻断了与用户的交互,相当于调用了EnableWindow(hActiveXWin,flase);这样的API,插件的非交互性操作都是正常的,但每次要去点一下总是很不爽的。这个补丁在2个月内就会公开发表,所以还是早做准备为好

在MSDN上有一篇教开发人员如何应对此改动的文章,地址是:

http://msdn.microsoft.com/library/default.asp?url=/workshop/author/dhtml/overview/activating_activex.asp

里面最有价值的就是可以用JScript来绕过IE的阻挡,无须用户手动激活插件,大致方法就是把Object或者Applet块用document.write动态写入,同时包含此语句的JS必须是外部的.js文件,如果是该页面内的(inline)代码就无效了。

当然你也可以专门写个函数放在外部文件里,页面内再调用这个函数,以便应对不同情况,省得每个flash都要写长长的document.write了。

下面是我写的一个函数,常用的设置都包含了,不需要的项目就留空

 function WirteFlashBlock(strURL,nWidth,nHeight,strBkColor,strID,strAlignMode,strQuality,strFlashVars)
{
 var embedTxt;
 embedTxt = <embed;
 if (strURL==null)
 {
  return;
 }
 embedTxt += src=+strURL+;
 document.write(<object classid=clsid:d27cdb6e-ae6d-11cf-96b8-444553540000 codebase=http://fpdownload.macromedia.com/pub/shockwave/cabs/flash/swflash.cab#version=8,0,0,0);
 if (nHeight)
 {
  document.write( height=+nHeight+);
  embedTxt += height=+nHeight+;
 }
 if (nWidth)
 {
  document.write( width=+nWidth+);
  embedTxt += width=+nWidth+;
 }
 if (strID)
 { 
  document.write( id=+strID+);
  embedTxt += name=+strID+;
 }
 if (strAlignMode)
 {
  document.write( align=+strAlignMode+);
  embedTxt += align=+strAlignMode+;
 }
 
 document.write(>);
 document.writeln(<param name=menu value=false>);
 embedTxt += menu=false;
 document.writeln(<param name=allowScriptAccess value=always />);
 embedTxt += allowScriptAccess=always;
 if (strFlashVars)
 {
  document.writeln(<PARAM NAME=FlashVars VALUE=+strFlashVars+>);
  embedTxt += FlashVars=+strFlashVars+;
 }
 
 document.writeln(<param name=movie value=+strURL+ />);
 if (strQuality)
 {
  document.writeln(<param name=quality value=+strQuality+ />);
  embedTxt += quality=+strQuality+;
 }
 else
 {
  document.writeln(<param name=quality value=High />);
  embedTxt += quality=High;
 }
 if (strBkColor)
 {
  document.writeln(<param name=bgcolor value=+strBkColor+ />);
  embedTxt += bgcolor=+strBkColor+;
 }
 embedTxt += type=application/x-shockwave-flash pluginspage=http://www.macromedia.com/go/getflashplayer  swLiveConnect=true ></embed>;
 document.writeln(embedTxt);
 document.writeln(</object>);
}

最后提醒的是,如果IE将“禁用脚本调试”的选项勾去掉了,那么还是不会起作用,但普通用户不太可能会去调试脚本的,所以也无所谓,而且M$也承诺在后续的更新中解决此问题:

External script technique does not work when the Disable Script Debugging (Internet Explorer) check box is cleared

Microsoft is investigating this problem and plans to fix it in a future cumulative update.

好了,继续作PRP去了……

也来说说我的设计作品

其实与其说我喜欢编程,更确切的说是喜欢搞设计,当然平面设计是一个方面。但设计是包含在几乎所有领域的事情。但这里我说的还是平面设计为主的事。 因为感觉我经常发布自己的程序和破解作品,但很少有设计作品,所以就展示一下吧。 首先放出的就是我网站一直能看到的标志了,你要问这是什么我想也就只能解释的今天的地步了:-p ................
分页:[«]1[»]

日历

<< 2015-6 >>

Sun

Mon

Tue

Wed

Thu

Fri

Sat

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

19

20

21

22

23

24

25

26

27

28

29

30

Copyright Shikai Chen 2000-2012. Powered By Z-Blog(CSK Modified)