谈Flash的破解与加密(附flash破解工具)

1. 需要一款16进制编辑工具WinHex

2. 打开含有Flash的Word文档,点击“控件工具箱”的“设计模式”按钮进入设计模式,选择Word中的Flash,复制粘贴到任意文件夹,会看到一个“片段”文件。

3. 打开WinHex,将该“片段”文件拉到WinHex中,单击下拉菜单“搜索”→“查找16进制值”,搜索“465753”,在搜索到的“465753”中的“4”位置上单击右键,选择“选块开始”。

4. 继续“搜索”→“查找16进制值”,搜索“3A5C”,然后按住F3,直到出现“3A5C未找到”,点击“是”,在最后搜索到的“3A5C”中 “C”位置上单击右键,选择“选块结尾”。(注:少数情况可能会搜索不到“3A5C”,则改为搜索“3A”或“5C”,方法相同)。

5. 在选块内任意处点击右键→编辑→复制选块→进入新文件→输入文件名 (如test.swf) →保存。

常用破解工具

谈到破解,很多朋友都会想到时下流行的闪客精灵。以下为常用的破解工具,按笔者使用的频繁程度,分别有:

* 硕思闪客精灵(Sothink SWF Decompiler)

* Action Script Viewer(ASV)

* Imperator FLA(有使用者译为“罗马统治者”)

(这是笔者最早认识的用来还原swf的工具,可惜一直在关注也没有发现2.0以上的破解版,只有1.6.9.8的破解版,这已经是3年前的版本了,只对Flash6.0以下有效。)

* 硕思闪客之锤(Sothink SWF Quicker)

以上四款,以Decompiler最为常用。ASV虽然强大,但在实用性方面却不如Decompiler,这应当也是为什么数年来 Decompiler能够长久风靡的原因。而ASV对付Flashincrypt加密过的swf却是轻而易举,这大大弥补了Decompiler的不足。不少网友知道用ASV来查看swf,但是不知道如何使用它来将swf还原成fla,以5.01版本为例,只需两步:

1. 打开等待破解的swf文件(支持拖放打开),输出重建数据(File → Export Rebuild Data (JSFL)...)到某一目录下,例如:桌面\新建文件夹。

2. 双击目录下的“rebuildcommand.jsfl”,系统将启动Flash重建fla文件。根据原swf文件的复杂程度,重建fla所需的时间将有所区别。

破解附言

破解swf,依赖的主要是现成工具,多款工具综合使用,一款不行试另一款,如果作者有意加密,视破解者自身水平,在获取 swf时将遇到规模可大可小的困难,在破解时亦将不可避免的多花些许心思。如果遇到 SWF Encrypt 加密过的作品,只能对其中的AS无奈了。前几天听闻闪客互联的猎人兄对 SWF Encrypt 有破解之法,然而似有卖关之嫌,未见其实。

二、加密篇

加密方法流传不少,此处只谈笔者所知的较为实用的方法:

更改后缀,避开 Flash Saver 等下载工具

此方法可有效避开 Flash Saver 等下载工具。使提取者不得不从缓存中查找文件,一定程度上增加了提取难度。后缀可改为 gif、jpg、txt 等等。虽然可以更改后缀,然而在插入到网页时,仍然需要以 swf 的形式插入,使用此 swf 来加载改过后缀的影片。

限制 Flash 在指定域名/网址中播放 (Flash 防盗链)

url = "http://www.it100.info";

/*

以下判断网址的前 20 个字符(字符数根据你的网址作相应修改),如果与"url"不一致则播放失败。注:swf 可以放在任意目录下,只要网址的前 20 个字符是正确的。

*/

if(_url.substring(0, 20)<>url){

gotoAndStop(2);

/*

这里可以做一些东西,例如:将发布设置中的“本地回放安全性”设为“只访问网络”,然后在这里做无数的弹窗

onEnterFrame = function(){

getURL("http://www.it100.info", "_blank");

}

*/

}else{

gotoAndPlay(3); //跳到正常播放

}

为了便于阅读,以下是没有注释的代码:

url = "http://www.it100.info";

if(_url.substring(0, 20)<>url){

gotoAndStop(2);

}else{

gotoAndPlay(3);

}

如果要允许多个域名,可以这样写:

url = "http://www.it100.info";

url2 = "http://it100.info";

if((_url.substring(0, 20)==url) || (_url.substring(0, 16)==url2)){

gotoAndPlay(3);

}else{

gotoAndStop(2);

}

注意:用此方法,设计过程中导出时的技巧:

用IE打开先打开指定目标网址,以避免在导出时频繁弹出窗口,如果无效,请将默认浏览器设置成IE,关闭导出时的player窗口即可继续编辑。有时Flash软件会因此发生错误而被强行结束,导出前请保存文档,切记!

常用加密工具

* SWF Encrypt

可有效防止目前流行的几乎所有破解工具对其所加密作品的AS查看。2006年10月更新为3.0.12,尽管加密后文件仍然有明显的增大(视原swf的复杂程度,增大幅度有所不同),然而令人振奋的是,已经支持放射状渐变,支持Flash8.0。加密技巧:分解 swf逐个加密,以尽量避免加密后单个文件体积庞大的问题。

* Flashincrypt

可轻易防止闪客精灵目前的版本对其所加密作品的AS查看,加密后的文件几乎保持原文件大小。遗憾的是不能防止 Action Script Viewer 5.0 以上的版本。

适当应用与javascript结合

加密JS,从而实现间接加密swf。相关工具及例子:

* T4nk JS混淆工具

用于javascript的混淆加密。

* Encrypt HTML

加密网页脚本,包括 HTML source code, javascript, VBScript, text, links and graphics 等。

* 从Flash到JavaScript的通讯,从JavaScript到Flash的通讯

* 控制 Flash Player 的 JavaScript 方法一览表:

·播放动画:Play()

例:(网页中的 Flash id).Play();

·停止动画:StopPlay()

·动画是否正在播放:IsPlaying()

·跳转到某帧:GotoFrame(frame_number)

·获取动画总帧数:TotalFrames()

·回传当前动画所在帧数:CurrentFrame()

·使动画返回第一帧:Rewind()

·放大指定区域:SetZoomRect(left,top,right,buttom)

·改变动画大小:Zoom(percent)

·使动画在 x,y 方向上平移:Pan(x_position,y_position,unit)

·返回动画被载入的百分比:PercentLoaded()

·加载动画:LoadMovie(level_number,path)

例:(网页中的 Flash id).LoadMovie(0, "***/***.swf");

·movie_clip 跳转到指定帧数:TGotoFrame(movie_clip,frame_number)

例:(网页中的 Flash id).TGotoFrame("_root.实例名.次实例名",帧数);

·movie_clip 跳转到指定标签:TGotoLabel(movie_clip,label_name)

例:(网页中的 Flash id).TGotoLabel("_root.实例名.次实例名","标签名");

·回传 movie_clip 当前帧:TCurrentFrame(movie_clip)

·回传 movie_clip 当前标签:TCurrentLabel(movie_clip)

·播放 movie_clip:TPlay(movie_clip)

·停止 movie_clip 的播放:TStopPlay(movie_clip)

·获取变量:GetVariable(variable_name)

·变量赋值:SetVariable(variable_name,value)

·call 指定帧上的 action:TCallFrame(movie_clip,frame_number)

·call 指定标签上的 action:TCallLabel(movie_clip,label)

·获取 movie_clip 的指定属性:TGetProperty(movie_clip,property)

·设置 movie_clip 的指定属性:TSetProperty(movie_clip,property,number)


【三湖慈鲷】鱼房建造记录贴
DNF手游删档封测多久开正式服