flash

本文介绍如何使用特定工具修改Flash游戏中的脚本,实现游戏属性的调整,包括改变全屏显示为窗口显示,以及修改角色的生命值和攻击力。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

Icefire:这段时间忙里偷闲,在网上Down了几个Flash游戏来玩,想不到有些游戏难度有点大,但偶又不想花太多时间来冲关,自然就要请出游戏修改的工具:金山游侠,但像游侠这类工具并不能对Flash游戏进行修改,
读者:Game爱好者、Flash爱好者、Crack爱好者

前置知识:无

Icefire:这段时间忙里偷闲,在网上Down了几个Flash游戏来玩,想不到有些游戏难度有点大,但偶又不想花太多时间来冲关,自然就要请出游戏修改的工具:金山游侠,但像游侠这类工具并不能对Flash游戏进行修改,后来拿出系统调试器SoftIce,跟了一会弄得我头晕眼花,竟然找不到任何有价值的东西。其实我的要求并不高,为什么那么难搞?后来查了网上的一些资料,并看到网上有很多人问修改Flash游戏的问题,再和几个喜欢破解的朋友一起切磋,所以就产生此文。本文将由浅入深地系统介绍Flash游戏的反汇编及修改等问题,以解众惑。

菜鸟玩转Flash游戏修改

文/图 逆枫

   Flash是Macromedia 公司开发的矢量图形动画编辑工具。Flash的优点是它独立于浏览器之外,只要给浏览器加入相应的插件就可以观看Flash动画,占用带宽小,比标准的GIFs和JPEGs更灵活,体积更小,且Flash播放时还可以带声音,所以Flash非常适合用于网页上表示多媒体的内容。Flash内含了ActionScript技术,可以让程序员应用其编辑动画的脚本,从Flash5.0开始程序和动画的技术结合正式应用到了Flash编辑的网络动画中,ActionScript脚本的简单易学和易用性使初级爱好者也能快速的掌握其应用法则,创作出简单的带有程序的动画。Flash游戏正是利用Flash的交互性及ActionScript脚本控制来制作的。而今天我们的目标,就是来破解这样的Flash,也算是挑战一下破解技术中的难题吧!

 

工具介绍

工具:Sothink SWF Decompiler MX2005、Flasm V1.52、Hex workshop十六进制工具

对象:魔塔Flash游戏

古语曰:“工欲善其事,必先利其器”(Icefire:好象每个文章开头都是用的这句话?),在对Flash游戏修改前,必须找几个好工具。我们知道Flash游戏是利用脚本来控制的,这些脚本是有点像VB程序一样,由Flash播放器边解释边执行的,所以用普通的调试器如SoftIce来跟踪会跟不到核心的内容,必须找到相应的反编译工具。本文介绍两个Flash反编译工具。一个是Sothink SWF Decompiler MX2005,界面如图1所示。左边是文件列表,中间是Flash预览或脚本浏览区,右边是Flash资源列表框,其中脚本就在里面。

 

 

图1

这个工具最实用的是脚本反编译,可以把脚本译成ActionScript的格式,非常方便阅读,或者译成P-code的格式,这个格式是Flash由ActionScript脚本生成的中间代码, P-code可以由播放器直接解释执行。另外Sothink SWF Decompiler MX2005还可以把SWF格式的文件转译成Fla格式的文件,这样在Flash MX编辑器中就可以直接打开Fla文件进行修改。

另一个工具是Flasm,就是Flasm asm的简称,这个工具是运行在DOS命令提示符下的,它可以把Flash文件中的脚本反编译出来,形成一个脚本文件,也可以把修改后的脚本文件编译进Flash文件,后面的实例就我们就是使用这个方法的。

 

Flash游戏修改思路

普通单机游戏程序一般是VC编译生成的PE格式程序,这些代码可以在内存中直接执行,生命值等数据可以直接放到内存中,而Flash游戏程序是由一些中间代码来组成,在Flash播放器里执行的,生命值等只会在播放器中出现,所以不要直接搜索内存,也不要偿试制作内存补丁什么的。我这里采用的方法是用Flash反编译工具,由于生命值及程序流程等内容都会在脚本中出现,所以只要对脚本进行修改,再改修改后的脚本编译进Flash程序中就可以达到修改Flash游戏的目的。

可能有人会问,为什么不用调试器,如Ollydbg、softice等来跟踪,定位要修改的数据?用过Ollydbg跟踪过VB的P-code格式程序的读者可能对这个印象较深,用调试器跟入那些中间代码,往往只会在播放器的代码中转来转去,而并没有跟入我们的Flash游戏代码中间。所以目前比较简便的方法就是修改Flash的脚本来达到修改游戏的目的。

 

实例修改Flash游戏:魔塔

这次出场的主角是经典RPG游戏:魔塔,这个是类似迷宫式的游戏。我们现在要来修改两处:一是把全屏显示改成窗口显示,另外一处是修改生命值及攻击防御力。

首先用Sothink SWF Decompiler MX2005载入mota.swf程序,展开右边栏的资源框,找到Action/MainMovie,如图2所示。

 

 

图2

在中间会显示相应的脚本,这些脚本可以选择菜单Code项查看ActionScript或P-code或原始数据。ActionScript简单易懂,我们来看看关键的地方。

fscommand("fullscreen", "true");这一句是设置全屏,只要修改为False就可以设成窗口方式了。再往后看看其它脚本语句,看看有什么感兴趣的,大约在352行,发现在如下语句:

Now_life = 1;

Now_hp = 1000;

Now_gong = 10;

Now_fang = 10;

Now_money = 0;

这些就是主角的数据了,如Now_hp表示主角现在的生命,Now_gong为攻击力,Now_fang为防御力。由于后面我们的Flasm只能对Flash反编译成P-code的代码,所以可以现在来看看上面这些脚本的P-code格式的代码:

    _push "Now_life" 1

    _setVariable

    _push "Now_hp" 1000

    _setVariable

    _push "Now_gong" 10

    _setVariable

    _push "Now_fang" 10

    这和上面的代码是等价的。有了这些信息,现在要用Flasm来进行修改mota.swf文件了。假设Flasm.exe在c:/flasm15win,为了方便,把mota.swf文件也拷贝到Flasm15win下。打开命令提示符,进入Flasm.exe所在的目录,由于这个mota.swf经过压缩,现在我们来解压,如图3所示。

 

 

图3

再执行反编译到mota.flm文件,如图4所示。没有错误提示,表示我们反编译成功。

 

 

图4

这样在C:/flasm15win文件夹下会生成mota.flm脚本文件,现在我们用记事本来打开它,查找Fullscreen字符串,只找到一个,把它后面的True改成False,游戏刚开始时生命是1000,所以查找字符串:1000,定位下面语句:

push 'Now_life', 1

    setVariable

    push 'Now_hp', 1000

    setVariable

    push 'Now_gong', 10

    setVariable

push 'Now_fang', 10

这里就是设置主角初始值的地方(和Sothink SWF Decompiler MX2005反编译的内容有点区别,不过内容一样)。现在我们把1000改成50000,10改成500,然后保存文件。切换到命令提示符下,输入“flasm –a mota.flm”,把修改后的脚本编译进mota.swf文件,但会出现如图5所示的错误。大概意思是第一行的包括非法字符。

 

 

图5

我们用Hex workshop打开mota.flm文件,看看第一行处的内容,这里为图6所示的内容,可以看到EFBBBF为非法内容,把它删除,再保存文件 (如图6所示)。

 

 

图6

 

Icefire:记事本修改就是这样,为了保险起见,建议在Hex workshop中进行修改。

 

再执行“flasm –a mota.flm”,这次出现成功的提示,如图7所示。

 

 


图7

至此我们的修改工作结束。现在运行一下程序,进入打斗时,是不是Flash游戏的主角的生命已经变成了50000了?

 

其实Flash的游戏修改并不难,关键是以前其它修改游戏的定势思维的影响,使人觉得很难修改Flash游戏,其实有时换一个角度来解决问题可以很快解决一些“难题”。

(文中涉及的Flash游戏的原版和修改版已收录到杂志配套光盘“杂志相关”栏目,按文章名查找即可)
 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值