swf加密解密工具

加密:
DoSWF:不错的加密工具,选项也很丰富,可对SWF进行加密、混淆、注入随机代码、水印等,非常强大,推荐使用。
SWF Encrypt:老牌的加密工具,没有多余的选项可用,一键加密后被硕思搞定了。

解密:
Sothink SWF Decompiler:老牌的SWF破解工具,最新版本破解的能力还是非常强大,唯一不好地方就是加密工具注入随机代码后会导致崩溃,其他都能应付自如。
SWiX:通过XML的形式看FLASH,也可以直接进行修改,前提是你要看得懂。。。可以用这款软件查看或修改一些诸如帧率、颜色等常规,容易的内容。
AVR:也是满老的一个工具,破解的能力比硕思弱很多,不过多一个工具多一条路,硕思不行的时候可以用它试试。

Flash解析带命名空间XML的问题

问题描述:Hennessy项目,在Flash中调用Linq通过WebService返回的数据时,用AS3中E4X语法失败。只有使用AS2中.children()[0]的写法才能访问到数据。

问题分析:删除XML命名空间后,可以使用E4X语法。即在附中XML中删除:xmlns:xsi=http://www.w3.org/2001/XMLSchema-instance xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns="http://tempuri.org/"

问题解决:在Linq中没有找到可以配置命名空间,所以只有在Flash端做处理,有如下几种解决方案:
1.删除所有命名空间,通过E4X语法或者正则表达式删除,操作起来比较麻烦
2.默认命名空间指定为空命名空间,default xml namespace=new Namespace("");,可能会遇到#1025错误,不知道怎么解决,可能是Flash的bug
3.使用带命名空间的E4X语法,所有字段前需加,namespace::,代码太繁琐

附:
<?
xml version="1.0" encoding="utf-8" ?>
<ArrayOfUserInfo xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns="http://tempuri.org/">
......
</ArrayOfUserInfo>

AS2中Flash传参问题

今天,一个简单的传参,搞了大半天。一直在<noscript>加参数,怎么试都没用,Flash原来默认调用的是JS段:<script language="JavaScript" type="text/javascript">。

AS2源代码:

_root.aaa或者this.aaa

HTML源代码:

<script language="JavaScript" type="text/javascript">
 AC_FL_RunContent(
  'codebase', 'http://download.macromedia.com/pub/shockwave/cabs/flash/swflash.cab#version=8,0,0,0',
  'width', '500',
  'height', '280',
  'src', 'Record',
  'quality', 'high',
  'pluginspage', 'http://www.adobe.com/go/getflashplayer',
  'align', 'middle',
  'play', 'true',
  'loop', 'true',
  'scale', 'showall',
  'wmode', 'window',
  'devicefont', 'false',
  'id', 'Record',
  'bgcolor', '#ffffff',
  'name', 'Record',
  'menu', 'true',
  'allowFullScreen', 'false',
  'allowScriptAccess','sameDomain',
  'movie', 'Record',
  'flashvars', 'aaa=aaa',
  'salign', ''
  ); //end AC code
</script>
<noscript>
 <object classid="clsid:d27cdb6e-ae6d-11cf-96b8-444553540000" codebase="http://download.macromedia.com/pub/shockwave/cabs/flash/swflash.cab#version=8,0,0,0" width="500" height="280" id="Record" align="middle">
 <param name="allowScriptAccess" value="sameDomain" />
 <param name="allowFullScreen" value="false" />
 <param name="movie" value="Record.swf?aaa=aaa" />
    <param name="quality" value="high" />
    <param name="flashvars” value="aaa=aaa″ />
    <param name="bgcolor" value="#ffffff" />
    <embed src="Record.swf?aaa=aaa" flashvars="aaa=aaa" quality="high" bgcolor="#ffffff" width="500" height="280" name="Record" align="middle" allowScriptAccess="sameDomain" allowFullScreen="false" type="application/x-shockwave-flash" pluginspage="http://www.adobe.com/go/getflashplayer" />
 </object>
</noscript>

AS2的this

  引用对象或影片剪辑实例。

  1、在附加到按钮的 on 事件处理函数动作中,this 引用包含该按钮的时间轴。

 
  实例1-1:在舞台上放一个按钮。在跟时间轴上定义一个变量var i:Number=0 ,在按钮上输入下列语句
on(press){
trace(this)//输出的结果将是_level0,就是说这里的this就是对根时间轴的引用
trace(this.i)//输出的将是0
}
  实例1-2:在舞台上放一个MC。并且输入实例名my_mc ,在该MC中放一个按钮,在跟时间轴上定义一个变量var i:Number=0 ,在按钮上输入下列语句
on(press){
  trace(this)//输出的结果将是_level0.mc,就是说这里的this就是对根时间轴的mc对象的时间轴的引用。
trace(this.i)//输出的将是undefined,因为该MC的时间轴没有定义i
}
  强调:在附加到按钮的 on 事件处理函数动作中,this 引用包含该按钮的时间轴
  2、在附加到影片剪辑的on() onClipEvent()事件件处理函数动作中,this 引用该影片剪辑自身的时间轴。
  实例2-1:在舞台上放一个MC,并且输入实例名my_mc,为该MC附加以下动作:
on(press){
trace(this)//输出的的将是_level0.mc,说明this是MC本身,而非_level0说明附加到MC的on()句柄与附加到button的on()句柄是不同的
}
  实例2-2:在舞台上放一个mc,并且输入实例名为my_mc ,为该MC附加以下动作:
onClipEvent(load){
trace(this)//输出_level0.mc,说明现在的this是MC本身
}
//继续输入下列语句
onClipEvent(enterFrame){
this._x+=2//现在MC向右运动了,何也?因为this是mc本身
}
  3、按钮事件写在桢上。{}中的thsi指向按纽本身
  实例3-1 在舞台上放一个按钮,并且输入实例名button,在桢上输入以下动作:
button.onPress=function(){
trace(this)//输出的是_level0.button,而非_level0,说明写在桢上与写在按钮上是不同的
}
  实例3-2 在舞台上放10个按钮,并且输入实例名button0....10,在桢上输入以下动作:
this["button"+i].onPress=function(){//最前面的这个this指根时间轴_level0, 用this的原因是因为要引用button, 这个是必须的,而实例3-1也可以this.button.onPress=function(),但往往我们可以省略.
trace(this)//现在是点击哪个MC,输出哪个MC,因为this是指向this["button"+i]
}
  4、MC事件写在桢上。同按钮事件写在桢上是一样的。
  5、定义的函数中的this,指向函数所在的时间轴。
  实例5-1 在桢上输入下列动作
function go(){
var i=0
trace(this)//输出的将是_level0,因为函数go就在跟时间轴
trace(this.i)// 输出的将是undefined,因为i是局部变量,只在本语句块有效,不可以访问
}
go()