关于flash游戏swf文件的修改
转载请标明出处https://www.jianshu.com/p/5d36f13b3ed0
1.介绍:
在游戏修改中,很难避免的会遇到flash游戏的修改,其中assets目录下的swf格式文件是整个flash游戏的游戏逻辑资源文件。
这里简单说明一下swf文件的修改,附上修改swf文件的工具地址:http://down8.3987.com:801/2010/JPEXSFreeFlashDecompiler_3987.com.rar这里会使用到一个叫做JPEXSFreeFlashDecompiler的工具,点击下载安装之后,就可以使用这个工具打开swf文件了。2.实际操作:
这里我在拿了一个叫做史上最贱的游戏
(包名:air.com.spilgames.TrollFaceQuestStupidellaAndFailman)的游戏进行修改。这个游戏放到我们国内厂商的手机之后,由于某些原因点击去除广告的时候是会卡屏的。
![](https://img.haomeiwen.com/i8534317/1597c7276b7350a9.jpg)
![](https://img.haomeiwen.com/i8534317/68be337057a755e1.jpg)
这里弹出无连接之后,点击取消和再试一次都是无效的,我们要做的就是让这一过程不再发生。根据思路,最好的方法就是让去广告这一点击之后的事件不再发生。这个游戏又是一个flash游戏,所有我们就使用JPEXSFreeFlashDecompiler工具打开这个游戏swf文件。打开之后界面如下:
![](https://img.haomeiwen.com/i8534317/fedf9f88f82d175c.jpg)
使用这个工具,可以提取里面的资源文件,或者查看修改脚本代码。这里我们要做的就是修改去广告这个点击事件。
这里我们能发现点开脚本,都是我们熟悉的高级语言代码。
![](https://img.haomeiwen.com/i8534317/1f988240951b7580.jpg)
![](https://img.haomeiwen.com/i8534317/c24f192ea01be5b0.jpg)
这里切入点其实是这个点击图形是出现在一开始进入的页面之中的,我们翻看脚本的目录会发现一个叫做MainMenu的脚本。
不难猜测,这个就是主页面逻辑代码了。这个时候我们可以阅读一下代码,或者搜索一下remove和removead以及广告这三个关键字,因为点击事件按钮写着”去广告”。所以我们可以通过搜索这3个关键字,很遗憾都没搜索到,这个时候我们来阅读一下代码,发现里面有一些按钮的事件,并且出现了buy关键字的对象和方法,这里我们可以阅读猜测并大致确定了。
![](https://img.haomeiwen.com/i8534317/7d64618c19829b59.jpg)
这些都是点击按钮附加点击事件被移除的代码,这里我们可以看到有一个叫做bundlebuy的被移除了点击事件,我们点击这个fromMainToShop进入这个方法,我们将方法内容删除,重新编译游戏发现,点击之后果然没有任何反应了,到这里好像就修改的差不多了。可是当我们进入游戏的时候发现其他位置也还是有这个按钮图形的。
![](https://img.haomeiwen.com/i8534317/946f460352330c21.jpg)
![](https://img.haomeiwen.com/i8534317/6be4bf4e01edd0dd.jpg)
![](https://img.haomeiwen.com/i8534317/aedb8bd1923bafe7.jpg)
我们发现,其他位置有关广告的点击事件丝毫没有被影响,这是什么情况。那就说明我们去的并不干净,但是你要让我一个一个位置的寻找这些位置并修改,工程量有点大我不想这么做,所以我们换个思路,我们可以查看一开始我们去掉的主页面点击事件代码,看看还有哪些位置引用了这些代码。
![](https://img.haomeiwen.com/i8534317/8a7eaf251d928b71.jpg)
![](https://img.haomeiwen.com/i8534317/f7f7e6d69898659e.jpg)
但是查看代码一层一层的找引用,找到具体的代码实现位置,工作量也不少,我看了一眼也还是放弃了。但是这个方法里面,有一层if语句,这是个很大的突破口。
![](https://img.haomeiwen.com/i8534317/a8075123919145b4.jpg)
这个if语句里面的值英文意思是,买了,等于false的话,是说明没买,那么才执行下面的代码,那么是不是说明我们可以让这个全局变量的值恒等于true,也就是买过呢。我们ctrl+r点击进入这个值。
![](https://img.haomeiwen.com/i8534317/78ebe35a25ddd3a7.jpg)
![](https://img.haomeiwen.com/i8534317/dda09f1e6eadf8d4.jpg)
查看这个全局变量,默认是false的,那么是不是我们修改成true,以及将搜索出来把这个值赋值为false的位置全部修改成true就可以了,我们点击编辑-修改-保存-保存文件。反编译运行。
![](https://img.haomeiwen.com/i8534317/894a446d8c776ccb.jpg)
![](https://img.haomeiwen.com/i8534317/29d04b9e8c60bf20.jpg)
竟然连去广告的那个图像都隐藏了,这就是全局变量的好处,整个游戏逻辑代码都会使用到这个变量,当我们修改变量之后,全局任何一处相关的代码都会由于判断,不再执行会让游戏广告相关,会让游戏卡屏的代码,虽然修改的位置可能也挺多的,但是很明确也很效率。这是我第一次修改flash游戏的swf文件,希望可以帮到有需要的人。