注册 登录  
 加关注
   显示下一条  |  关闭
温馨提示!由于新浪微博认证机制调整,您的新浪微博帐号绑定已过期,请重新绑定!立即重新绑定新浪微博》  |  关闭

超级菜芽人的博客

游戏王(遊☆戯☆王Yu-Gi-Oh!)

 
 
 

日志

 
 

菜鸟玩转Flash游戏修改  

2009-08-30 16:44:26|  分类: 绿色破解 |  标签: |举报 |字号 订阅

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

 

工具介绍

工具:Sothink SWF Decompiler MX2005Flasm V1.52Hex workshop十六进制工具

对象:魔塔Flash游戏

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

1

这个工具最实用的是脚本反编译,可以把脚本译成ActionScript的格式,非常方便阅读,或者译成P-code的格式,这个格式是FlashActionScript脚本生成的中间代码, 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游戏的目的。

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

 

实例修改Flash游戏魔塔

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

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

2

在中间会显示相应的脚本,这些脚本可以选择菜单Code项查看ActionScriptP-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.exec:\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改成5000010改成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了?

 

 

本文转自:http://www.05112.com/Article/200908/27044.html

  评论这张
 
阅读(444)| 评论(0)
推荐 转载

历史上的今天

评论

<#--最新日志,群博日志--> <#--推荐日志--> <#--引用记录--> <#--博主推荐--> <#--随机阅读--> <#--首页推荐--> <#--历史上的今天--> <#--被推荐日志--> <#--上一篇,下一篇--> <#-- 热度 --> <#-- 网易新闻广告 --> <#--右边模块结构--> <#--评论模块结构--> <#--引用模块结构--> <#--博主发起的投票-->
 
 
 
 
 
 
 
 
 
 
 
 
 
 

页脚

网易公司版权所有 ©1997-2017