分页: 3/5 第一页 上页 1 2 3 4 5 下页 最后页 [ 显示模式: 摘要 | 列表 ]
在flash内制作两个mc(测试比较用)
a_mc内有动画,在某个帧设置标签 #p
b_mc内有两个帧,在时间轴设置b_mc为隐藏

设置6个按钮作为不同方式的打印用,脚本

//a_mc 设置了 #p,打印a_mc则只打印该帧
a1.onRelease = function() {
print(a_mc, "bmovie");
};
a2.onRelease = function() {
print(a_mc, "bmax");
};
a3.onRelease = function() {
print(a_mc, "bframe");
};
//隐藏的mc可以作为打印的内容,但是设置alpha=0则不行,需要打印的内容可以把它做到一个mc里面,并且设置该mc隐藏
//b_mc 未设置了 #p,打印b_mc则打印全部帧
b_mc._visible = false;
b1.onRelease = function() {
print(b_mc, "bmovie");
};
b2.onRelease = function() {
print(b_mc, "bmax");
};
b3.onRelease = function() {
print(b_mc, "bframe");
};


文件及打印效果:up/1159164191.rar

代码说明:
引用
bmovie 将影片剪辑中某一特定帧的边框指定为该影片剪辑中所有可打印帧的打印区域。为要将其边框用作打印区域的帧分配一个 #b 帧标签。
bmax 将所有可打印帧的所有边框的合并区域指定为打印区域。如果影片剪辑中可打印帧的大小各不相同,请指定 bmax。
bframe 指示应使用每个可打印帧的边框作为该帧的打印区域,这将为每个帧更改打印区域,并缩放对象以适合打印区域。
如果在每个帧中有不同大小的对象,而您希望每个对象都充满打印的页面,请使用 bframe。
//
默认情况下,打印目标实例中的所有帧。
如果要打印影片剪辑中的特定帧,请将 #p 帧标签分配给这些帧。
//
打印效果可以通过打印pdf文件检查,请安装acrobat professional版本
效果见pdf文件
a1.pdf a2.pdf a3.pdf b1.pdf b2.pdf b3.pdf
自己测试比较决定用何种方式

让mc变成一个按钮就可以屏蔽里面所有的按钮了

//剪刀石头布

记录结果为数组,通过查找结果来出结论

Macromedia 被 Adobe 收购后,原来的拳头产品 Flash 在新的一年里将会如何发展呢? Lynda.com 及 the Flashforward Conference & Film Festival 创始人Lynda Weinman 对2006年 Flash 的走势进行了5大预测。   1、Flash很可能被整合到PDF中 Flash很可能被整合到PDF之中,这将大大增强PDF格式的功能=换ナ絇DF文档正是当前所缺乏的功能。它将成为分发桌面应用程序的好方法。最近在会议中的公告,在Macromedia Blogs以及在Macromedia Labs上描述的一种代号Apollo的新产品,看起来就像是下一代PDF/Flash产品的基本原型。

  2、Adobe软件有望直接输出FLA文件

  将来Adobe应用程序除了SWF文件外,还有望输出FLA文件。这意味着flash项目能够在Photoshop, Illustrator, After Effects, Audition或 Premiere中生成,并完全能够在Flash编辑。而Adobe工具当前只能输出SWF文件,如果能够输出FLA文件将会更加通用和强大。此外,Macromedia与Adobe工具之间的协同工作能力应该也会得到大大改进。以前困扰专业Flash设计者和开发者之间的问题将会随之消逝。

  3、轻松开发Flex RIA

  ActionScript已经内建到Macromedia Flex之中。现有的Flash用户将能够轻松运用他们掌握的Flash技巧进行Flex应用程序的开发。Flex能够让开发者创建运行于桌面、互联网以及移动设备中的RIA(富互联网应用程序)。这些应用程序还能跨平台以及与其他标准技术互动。

  4、全新的代码执行引擎

  下一代Flash Player 8.5,结合ActionScript 3,拥有一个完全重写的,比以前版本更快的全新代码执行引擎。这将是一个受开发者欢迎的改变,并将吸引到原来对它的执行效率不满意的开发人员。

  5、成为视频发布的首选格式

  Flash将赶超QuickTime和Windows Media Player成为Web,桌面应用程序和device delivery的首选视频格式。Flash视频提供了Quick和Windows Media所不具有的丰富的交互性,加上它独特的程序运行时Alpha合成功能,自然会令许多视频发布者采用Flash而放弃其他的选择。

Tween 类允许您轻松地在舞台上移动、缩放和淡入淡出影片剪辑。mx.transitions.Tween 类的构造函数有以下参数名称和类型:

function Tween(obj, prop, func, begin, finish, duration, useSeconds) {
// 代码……
}

obj Tween 实例的目标影片剪辑对象。

prop obj 中值要补间的属性的字符串名称。

func 为补间对象的属性值计算缓动效果的缓动方法。

begin 一个指示 prop(要补间的目标对象属性)的开始值的数字。

finish 一个指示 prop(要补间的目标对象属性)的结束值的数字。

duration 一个数字,指示补间动画的时间长度。如果省略,duration 会默认设置为 infinity。

useSeconds 与您在 duration 参数中指定的值相关的一个布尔值,如果该值为 true,则指示使用秒,如果为 false,则使用帧。

例如,假设您想让一个影片剪辑通过舞台。您可以向主时间轴上添加关键帧,并在这些帧之间插入补间动画或补间形状;可以在 onEnterFrame 事件处理函数中编写一些代码实现;或者可以使用 setInterval() 函数每隔一段时间就调用一个函数而加以实现。如果您使用 Tween 类,则可以通过另外一种方法来修改影片剪辑的 _x 和 _y 属性。您还可以添加前面介绍的缓动方法。若要利用 Tween 类,可以使用下面的 ActionScript:

new mx.transitions.Tween(ball_mc, "_x", mx.transitions.easing.Elastic.easeOut, 0, 300, 3, true);

此 ActionScript 代码片断创建了 Tween 类的一个新实例,它使 ball_mc 影片剪辑在舞台上沿 x 轴(从左到右)运动。该影片剪辑在 3 秒钟的时间内从 0 像素移动到 300 像素,并且 ActionScript 应用了一种弹性缓动方法。这意味着在以流畅的效果向回移动之前,球沿着 x 轴运动了 300 像素。

使用方法:

如果在您的 Flash 文档中的不止一处地方要使用 Tween 类,则可以选用 import 语句。它允许您导入 Tween 类和缓动方法,而不用每次使用它们时都给出完全限定类名,如下面的过程所示。

导入和使用 Tween 类:

·六种easing class类

*Back:在一个或两个结束点过渡范围之外的扩展动画,类似溢出效果.
*Bounce:在一个或两个结束点过渡范围内加入回弹效果,回弹的多少决定于duration延持时间的多少.长的延持回弹的次数就相对多.
*Elistic:发生在一个或两个结束点过渡范围之外的弹性效果,弹性的力度不受duration的影响.
*Regular:在一个或两个结束点加入减速动作.这个特性可以帮你做出超速可减速的效果.
*Strong: 在一个或两个结束点加入减速动作,这个效果有些类似Regular.不同的地方在于比较明显.
*None:从开始点到结束点加入恒定的运动,没有效果.

·以上六种easing class类每个又包含有三种easing method方式.
easeIn:在过渡的开始阶断产生easing效果.
easeOut:在过渡的结束阶断产生easing效果.
easeInOut:在开始和结束阶断均产生easing效果.

创建一个新文档,并将其命名为 easeTween.fla。
在舞台上创建一个影片剪辑。
选择影片剪辑实例,并在属性检查器的"实例名称"文本框中键入 ball_mc。
在时间轴中选择第 1 帧,在"动作"面板中,添加下面的代码:

import mx.transitions.Tween;
import mx.transitions.easing.*;
new Tween(ball_mc, "_x", Elastic.easeOut, Stage.width, 0, 3, true);

此代码示例使用两个 import 语句。第一个语句只导入 mx.transitions.Tween 类,第二个 import 语句使用通配符 (*) 快捷方式通过使用单行代码导入六个缓动类。第二个语句可导入整个类包。

选择"控制">"测试影片",以查看动画。
Flash 文档将包 定义为"包含一个或多个类文件并位于指定的类路径目录中的目录"。在本例中,包位于 C:Program FilesMacromediaFlash 8语言First RunClassesmx ransitionseasing 文件夹中 (Windows),或位于 HD:Applications:Macromedia Flash 8:First Run:Classes:mx:transitions:easing 中 (Macintosh)。导入整个包比分别导入六个类好得多,您想必也同意这一点。ActionScript 可以直接引用 Tween 类,而不必引用 mx.transitions.Tween 类。同样,对于缓动类而言就不必使用完全限定类名,如 mx.transitions.easing.Elastic.easeOut,您可以在 ActionScript 代码内键入 Elastic.easeOut。有关更多信息,请参见使用滤镜包。

通过使用类似的代码,您可以设置 _alpha 属性(而非 _x 属性)来淡入淡出实例,如接下来的过程所示。

使用 Tween 类淡化实例:

创建一个新文档,并将其命名为 fadeTween.fla。
在舞台上创建一个影片剪辑。
选择影片剪辑实例,并在属性检查器的"实例名称"文本框中键入 ball_mc。
在时间轴中选择第 1 帧,在"动作"面板中添加下面的代码:

import mx.transitions.Tween;
import mx.transitions.easing.*;
new Tween(ball_mc, "_alpha", Strong.easeIn, 100, 0, 3, true);

现在,ball_mc 不在舞台上移动了,而是在三秒钟内从 100% 可见淡化为完全透明。若要使元件更快地淡出,请将 duration 参数从 3 更改为 1 或 2。

选择"控制">"测试影片",以查看动画。
如果更改文档的帧频,动画将播放得更平滑。有关动画和帧频的信息,请参见关于动画和帧频。

除了使用秒之外,您还可以通过几个帧来淡化元件。若要在 Tween 类中将持续时间设置为帧数而不是秒数,可以将最后一个参数 useSeconds 从 true 更改为 false。将该参数设置为 true 时,就告诉 Flash 指定的持续时间以秒为单位。若将该参数设置为 false,则持续时间是您希望用于补间的帧的数量。接下来的过程演示如何将补间设置为帧数而不是秒数。

将持续时间设置为帧数而不是秒数:

创建一个新文档,并将其命名为 framesTween.fla。
在舞台上创建一个影片剪辑。
选择影片剪辑实例,并在属性检查器的"实例名称"文本框中键入 ball_mc。
在时间轴中选择第 1 帧,在"动作"面板中,添加下面的代码:

import mx.transitions.Tween;
import mx.transitions.easing.*;
new Tween(ball_mc, "_alpha", Strong.easeIn, 100, 0, 24, false);

此代码使用 Strong.easeIn 缓动方法淡出 ball_mc 实例。不是在三秒内淡化实例,而是通过 24 个帧淡化实例。

选择"控制">"测试影片",以查看动画。
稍等,实例将通过 24 个帧淡出。

返回到创作环境,打开属性检查器。
将文档的帧频更改为 24 fps。
如果增加 FLA 文件的帧频,您将看到实例以更快的速度淡出。有关动画和帧频的信息,请参见关于动画和帧频。

使用帧数而不是秒数来计算持续时间提供了更大的灵活性,但请记住,持续时间与当前 Flash 文档的帧频相关。如果 Flash 文档使用的是 12 帧/秒 (fps) 的帧频,那么上面的代码片断就可以在两秒内淡化实例(24 帧/12 fps = 2 秒)。但是,如果帧频是 24 fps,同样的代码就可以在 1 秒内淡化实例(24 帧/24 fps = 1 秒)。如果您使用帧数来计算持续时间,则在更改文档的帧频时可以明显地改变动画速度,而不需要修改 ActionScript。

Tween 类还有几种更有用的功能。例如,可以编写一个在动画完成后触发的事件处理函数,如接下来的过程所示。

在动画完成时触发代码:

创建一个新文档,并将其命名为 triggerTween.fla。
在舞台上创建一个影片剪辑。
选择影片剪辑实例,并在属性检查器的"实例名称"文本框中键入 ball_mc。
在时间轴中选择第 1 帧,在"动作"面板中,添加下面的代码:

import mx.transitions.Tween;
import mx.transitions.easing.*;
var tween_handler:Object = new Tween(ball_mc, "_alpha", Strong.easeIn, 100, 0, 3, true);
tween_handler.onMotionFinished = function() {
trace("onMotionFinished triggered");
};

如果在 FLA 文件中测试此 ActionScript 代码,当 ball_mc 在舞台上完成淡化后会在"输出"面板中显示"onMotionFinished triggered"的消息。

选择"控制">"测试影片",以查看动画。
稍等片刻,实例将淡出。当补间完成时,您将在"输出"面板中看到消息。

1、tween类
flash现在支持一些特殊的过渡(Tween/Easing)效果类,其用法如下:
someTweenID = new mx.transitions.Tween(object, property, function, begin, end, duration, useSeconds)
参数说明如下:


object :用来产生Tween效果的movieClip的引用名;
property :一个字符串值,应用Tween效果的MovieClip属性名,比如"_x","_y","_alpha"等
function :调用的easing类
begin :数字,属性的初始值
end:数字,属性的末值
duration :过渡持续的桢数或者秒数
useSeconds :布尔值,说明duration的单位是帧(false)还是秒(true)。如果没有指定,默认值为false(帧)

2、easing类
MXk24支持16种easing效果(准确的说,应该是19种)。
6种easing类别:
Strong
Back
Elastic
Regular
Bounce
None
每一种包括4种easing类型
easeIn
easeOut
easeInOut
easeNone

None和easeNone只能和其他的类别/类型搭配。easing函数用法如下:
mx.transitions.easing.Bounce.easeOut

3、showTime ,:)
现在,让我们将tween和easing结合起来实践一下。
假设stage上有一个名为ball_mc的movieClip,我们希望ball_mc水平运动,在半秒钟内从x坐标为20处运动到380处,并轻轻的弹跳两下。其写法如下:
ballTween = new mx.transitions.Tween(ball_mc, "_x", mx.transitions.easing.Bounce.easeOut, 20, 380, .5, true);
更加规范的写法如下:
function tweenBall() {
easeType = mx.transitions.easing.Bounce.easeOut;
var begin = 20;
var end = 380;
var time = .5;
var mc = ball_mc;
ballTween = new mx.transitions.Tween(mc, "_x", easeType, begin, end, time, true);
}

下面的函数增加了一个参数:easing类型
function tweenBall(easeType) {
var begin = 20;
var end = 380;
var time = 20;
var mc = ball_mc;
ballTween = new mx.transitions.Tween(mc, "_x", easeType, begin, end, time);
}
调用的示例:
tweenBall(mx.transitions.easing.Bounce.easeOut);

4、附加的技巧
Macromedia为tween类设置了一个事件:onMotionFinished,另外还有两个方法:yoyo() 和rewind()。
还是用例子来说明:
function tweenBall(easeType) {
var begin = 20;
var end = 380;
var time = 20;
var mc = ball_mc;
ballTween = new mx.transitions.Tween(mc, "_x", easeType, begin, end, time);
ballTween2 = new mx.transitions.Tween(mc, "_y", easeType, begin, end, time);
ballTween.onMotionFinished = function() {
this.yoyo();
};
ballTween2.onMotionFinished = function() {
this.yoyo();
};
}

from : http://www.riacn.com/bbs/showthread.asp?threadid=619

原文:http://www.gotoandplay.it/_articles/2004/04/swfProtection.php

这篇文章的标题所提出的问题的答案是"不可能"。至少对我来说是不可能的。借助适当的工具,我们可以反编译任何SWF文件。所以,不要将重要的信息置于SWF文件中。SWF文件中不要包含个人的帐号或者密码。

我将简要的论述"保护"技术的历史,和他们是如何失败的,接着我将说明我们能尽的最大努力。中国古语有云,"规则只能防君子,不能仿小人"。


公开的文件格式


在讨论之前,我们先要知道,SWF的文件格式是公开的。公开的文件格式,意味着SWF文件并不是只能由Flash生成。其他公司也能制作可以在SWF播放器上播放的SWF文件。公开的文件格式意味着从什么位置获取什么信息是众所周知的,也就意味着每个字节都是众所周知的。因此,如果我有时间来一个字节一个字节的检查SWF文件,我可以了解所有的细节。

当然,对于一个2M大小的SWF文件,我没有时间来逐个字节的检查。因此,我就借助软件来完成这个工作。如果软件遇到问题,我会暂时接管这个工作,检查发生问题的字节。修正它,然后继续。所以,没有什么东西能够掩藏的住,其限制只是我的时间和我的耐性。如果反编译一个SWF文件的酬劳是数百美元的话,我想我会花上数年时间来逐个字节的读取它。

好了,以下是反编译和保护技术之间的战争历史。

防止被导入

伴随着Flash的出现,Macromedia提供给开发者一个"防止导入的口令保护"功能。如果你给SWF文件加上导入口令的话,这个SWF文件就不能被导入了(知道倒入密码除外)。SWF文件不加保护的话,其中的矢量图形可以被导入到fla文件中。这种保护没有什么用处,仅仅是假想的安全。

试想一下,你的SWF被用户的播放器来播放的,你不可能利用用户的播放器来保护你的SWF文件。因此,它是如何来保护SWF文件的呢?很简单,这种保护存在于你所买的Flash开发工具中。Flash开发工具不能导入有(导入)密码的SWF文件。没关系,对吧?我可以用十六进制编辑打开那个SWF文件,删除保护密码,从而也就移除了保护功能。

如此简单,所以忘记导入保护功能吧。

转换成放映机文件并且压缩

如果我将它转化成exe格式的放映机文件,还可以被反编译吗?答案:是的,SWF文件仍然存在其中。借助软件可以很容易的将SWF文件从exe文件中释放出来。压缩可以使SWF文件不能被十六进制编辑器读取,压缩是一种保护措施吗?压缩算法类似于zip算法,很容易被破解。

FLASM AND THE P-CODE

在flash5的时代,出现了两种流行的工具,免费的"Flasm"和商业的"ASV 2.0"。Flasm就是"Flash asm",它将SWF中的字节码解释成可理解的简短代码(p-codes)。比如"a=3"显示为"push 'a', 3", "setVariable";SWF中的字节码是:"96 08 00 00 61 00 07 03 00 00 00 1D"。如果想学习"SWF格式结构"的话,这是个非常有价值的工具。

程序员喜欢用高级语言(比如:C、C++)来开发软件,但是当讲求效率的时候,他们会在其中混合使用低级的汇编语言。因此,有时候开发者会利用Flasm编写低级别的p-codes来增加效率。所以,Flasm编辑SWF中的actionscript是强有力的。你可以参考例子,了解如何利用这种技术来优化3D代码,但是怀有恶意的用户能够"编辑"SWF文件,SWF中的任何保护措施都可以不费力的移除。我们不需要知道密码就可以移除保护措施。

这儿有个通用、知名的技术来保护我们的影片不被偷窃并在其它的范围内显示。我们编辑脚本来检查_url属性,如果_url不是我们(合法)的范围,就使功能失效并显示一条"You are thief"的消息。可是,借助Flasm可以很容易删除这条脚本语句。不需要1分钟便可以破解这种保护措施。

ACTIONSCRIPT VIEWER AND "void (a)<=b>"c" || 0(!1 && !0)"

ASV(ActionScript Viewer)能够从SWF中提取出角色,例如::声音、形状和位图等都可以被窃取。

它同样可以提取actionscript字节码,ASV 2尝试将p-codes匹配成高级别的actionscript。当遇到"push 'a', 3", "setVariable";时显示"a=3"这样的等同于actionscript的语言。然而我们能够创造没有任何模式来匹配的代码,从而破坏ASV的解析。利用Flasm,可以容易的编写不同于标准模式的代码,从而使ASV不能进行匹配工作。扰乱ASV 2工作的一句有名的代码是";",这是一条jung代码。它不做任何事,但是能搞乱ASV 2的工作。

但是,当保护脚本众所周知时,ASV的作者(Burakk)当然不会放过它。这种保护技术对于ASV 3来说就失效了。

飞速发展的反编译工具


之后是MX时代的到来,许多反编译工具的出现,加快了Flash厄运的速度。

现行版本的ASV 4除了显示得到匹配的actionscript代码,得不到匹配的代码以p-codes形式显示。如果解释成p-codes发生问题,将显示SWF中的字节码。它同样能够显示代码在SWF文件中所处的偏移量,这意味着它不会失效。你不可能扰乱它的工作,因为,至少它能显示SWF文件中的"字节码"。

更甚的是,Flash MX2004提供通过JavaScript API来生成"fla"文件。那使它能够建立发布成SWF格式的fla文件。此刻,所有的东西都在那边了。

更不用说声音、形状和位图了,偷窃者不喜欢这些东西,因为它们套容易取得了。偷窃者喜欢切的actionscript,因为其中隐藏着密码,因为其中有阻止此影片正常播放的脚本代码,

如果ASV只能将脚本反编译成字节码,那么它对于大多数偷窃者是没有用处的。因此很多人进他们的最大努力来阻止ASV 4将脚本反编译成actionscript或者p-codes。实际上,对于大多数反编译者来说,脚本得不到匹配,反编译工具就无用了。

这是曾经用过的一些技术,当它们在因特网上发布并且被反编译组织揭示之后,每种技术的保护效果最终都会变得非常薄弱和气数将尽。

依据数据尺寸(句子)分块反编译

大多数之所以能够成功的迷惑或者破坏反编译器,原因在于播放器和反编译器的不同行为。播放器逐个的执行字节码,就像现实世界中的读书一样,一个单词,接着下一个单词。然而反编译器通常将字节链分成有意义的片断,犹如现实世界中的读书一样,一个句子,接着下一个句子。

反编译器的行为如此简单的原因在于大多数的p-code都是遵循数据大小规律的。对于字节码("96 08 00 00 61 00 07 03 00 00 00 1D"),反编译器遇到代表"push"操作的0x96时会想"push什么呢"?下个字节(0x0008)指示的内容:接下去8个字节中的内容压入堆栈,即把("00 61 00 07 03 00 00 00")压入堆栈。所以,通常反编译器依据数据大小将简短的片断切成一块一块的,这样便会解释成"push something"。因此,("96 08 00 00 61 00 07 03 00 00 00")就成为一个句子。下一个字节是下一个句子的开始,就是代表"setVariable"的0x1D。这样8个字节的"something",将被更进一步解释成一个字符串"a"和一个数字"3"。

让我们来看一下字节码:("99 02 00 05 00 96")。0x99意味着分支(或者跳转),在哪里分支呢?接下去的是(0002),因此数据存储在机下去的两个字节中,将它在下面两个字节处截断。总之,我们知道"99 02 00 05 00"是个句子。接下去的是0x96,代表下个句子的开始。

再看第三个例子,字节码:("88 08 00 03 00 63 00 62 00 61 00 96 07 00")。0x88代表定义常数,定义的常数内容是什么呢?后续字节(0008),表明常数内容存储在后继的8个字节中。所以,句子就是:("88 08 00 03 00 63 00 62 00 61 00")。代表下个句子开始的("96 07 00 ...),意味着将7个字节的数据压入堆栈。

因此,字节码砍成单独的句子。每个句子由命令和数据组成,并且以命令打头。因此,每个句子都是一个基本的单元。理论上来说,对于这种方法没有什么错误。

使播放器从句子中间开始读数据


让我们开始讨论"是播放器从句子中间读数据"的破坏反编译器的技术。

首先,我举一个现实世界的例子:

John says good morning.
Mary says thank you.

现在生成SWF文件:

skip 9 words
Tom says John says good morning. skip 3 words
back 7 words
Mary says thank you.

如果逐个字读的话,结果和原来一样,然而反编译器按句子来读取,自然发生错误。第一,它知道Tom说了什么,但语法不对,汇报出错;第二,它没有看到第二个"skip"命令,因为它处于句子中间;第三,当它被迫退回7个字后,感到迷惑,认为应该从"Tom said"开始执行整个句子;第四,这个错误使它在第二行和第三行之间陷入无限循环之中。

总之,我们增加了"Tom said"这句垃圾代码,并提供整个句子长度的错误数据大小信息。这个错误的长度覆盖了"skip"命令。

来看个真实的例子,请注意,这些技术需要操作字节码,纯actionscript不能够实现。


1 :

向前跳转的包含无效尺寸数据的死代码。

push True
branchifTrue label2
constants ''
label2:
push 'a',3
setVariable
 
你仔细看的话,会发现"constants ''"这行是垃圾代码,它不可能被执行到。然而,理论上,当第二行的结果为"not True"时,它将被执行。因此,反编译器尝试对它进行反编译。 

让我们来增大"0x88 - constants"后面的"sentence size",从而包括知道脚本结尾的所有字节。你知道,反编译器将把字节码砍成像这样的3个句子:

push True
branchifTrue label2
constants label2: push 'a',3 setVariable

如果你试图反编译此SWF文件,根据我前面提到的4个错误,一些反编译器将碰壁。仍旧有些反编译器幸存,但只是显示:"if(false){};"。ASV 3也不能显示此脚本,但是ASV 4能够显示。为了破解这个SWF,我们移除死代码"constant xxxx", (0x88和随后两个字节),然后所有的东西都得到反编译。

这儿是zip格式的文件,将详细解释怎样制作这样的受保护文件。


2:

先后跳转的包含无效尺寸数据的死代码。

push 'b'
label1:
push 'a',3
setVariable
branch label2
branch label1
label2:

push 'b'是句垃圾代码,我们将修改它,用来使ASV 4碰壁。让我们来修改push 'b'的"length of sentence"。修改"0x96"后面的2个字节的数据,使句子的长度增长到分支Label1之前。这样,反编译器将把字节码作为3个句子:

push label1: push 'a',3 setVariable branch label2
branch label1
label2:

现在,反编译器不知道将把什么压入堆栈,同样它将在第一个句子和第二个句子之间形成死循环。这种技术将使大部分反编译器碰壁。Flasm、ASV 4同样也无效。为了破解这个SWF,我们手工删除"push b" (0x96和后随的2个字节),这样所有的东西都可反编译了。

当这个技术流传后,burakk将修改ASV 4,使它能正确处理死循环。这样下个版本的ASV就可对付这种技术了。

这儿是zip格式的文件,将详细解释怎样制作这样的受保护文件。

水平有限,敬请批评指正。 E-mail:xmanceo@yahoo.com.cn

From: http://dev.csdn.net/develop/article/27/27285.shtm

分页: 3/5 第一页 上页 1 2 3 4 5 下页 最后页 [ 显示模式: 摘要 | 列表 ]

阅读推荐

服务器相关推荐

开发相关推荐

应用软件推荐