CurveSoft Studio

奔三之年开始北漂的上海女婿的IT人生

« 哈,点广告看到这个了去过的地方 »

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。左边是文件列表,中间是Flash预览或脚本浏览区,右边是Flash资源列表框,其中脚本就在里面。
这个工具最实用的是脚本反编 译,可以把脚本译成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。
在中间会显示相应的脚本,这些脚本可以选择菜单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经过压缩, 现在我们来解压。再执行反编译到mota.flm文件。没有错误提示,表示我们反编译成功。这样在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文件,但会出现错误。大概意思是第一行的包括非法字符。
我们用Hex workshop打开mota.flm文件,看看第一行处的内容,这里为图6所示的内容,可以看到EFBBBF为非法内容,把它删除,再保存文件。
Icefire:记事本修改就是这样,为了保险起见,建议在Hex workshop中进行修改。

再执行“flasm –a mota.flm”,这次出现成功的提示。
至此我们的修改工作结束。现在运行一下程序,进入打斗时,是不是Flash游戏的主角的生命已经变成了50000了?

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

  • quote 2.ddpuve
  • http://www.xkdppe.com.cn
  • jlqophahp

    欣可德劳保用品是经营:安全鞋 冼眼器 水鞋 无尘鞋 标志牌 路锥 放光衣 警示带 安全绳 安全带 安全钩自锁器 安全带扣 安全网 焊接面罩 安全帽 工作帽 防尘防毒口罩 电焊面罩 耳罩 眼罩 丁晴手套 一次性手套 电焊手套 点珠手套 耐割手套 浸胶手套
    ,产品齐全,品质保证

    欣可德商行

    网址:http://www.xkdppe.com.cn
  • 2008-10-17 20:53:16 回复该留言

发表评论:

◎欢迎参与讨论,请在这里发表您的看法、交流您的观点。

日历

最新评论及回复

最近发表

图标汇集

  • MoStar 手机游戏社区
  • Firefox - Rediscover the Web
  • RainbowSoft Studio Z-Blog
  • 本站支持WAP访问
  • 订阅本站的 ATOM 1.0 新闻聚合
  • 订阅本站的 RSS 2.0 新闻聚合
  • 点击这里给我发消息
  • Post your Page Rank with WebmasterEyes.com

Powered By Z-Blog 1.7 Laputa Build 70216

沪ICP备05043298号