欢迎光临
我们一直在努力

【游戏漏洞】Flash小游戏无敌版制作原理

致力于分享游戏安全技术,提供专业的游戏安全资讯

经常玩Flash小游戏的都知道,很多小游戏都有无敌、无限金币等修改版,玩的非常爽。但那这些修改版是怎么诞生的呢?

我很早就想知道这个问题的答案,但国内关于Flash逆向的资料少之又少,苦苦搜寻终没有结果。但我没有气馁,经过一番自学和摸索,终于让我找到了答案。就让我来为大家揭秘吧!

我们知道,Flash小游戏的文件格式是SWF,主要由AS代码来与Flash和交互。

AS代码则被编译为bytecode,运行在AVM虚拟机中。AVM虚拟机和Java虚拟机差不多,有一套自己的指令集。

我们要做的就是反编译SWF,然后修改AS代码(反编译为bytecode)达到目的。

需要的工具: JPEXS Free Flash Decompiler(强大的Flash反编译工具,自带修改字节码功能,非常方便,但是这个是JAVA程序,需要安装Java环境才能运行。)首先找一款小游戏: xx小游戏网 我小时候就经常来这里玩小游戏,来这里找一个下手吧。看看热门的小游戏:

排名第一的全民摩托,应该挺好玩的,就拿他下手了!先试玩一下, 看看有什么可以改的东西:

发现点击BIKE后可以升级配件 ,左上角显示当前钱的数量,升级则需要很多钱,我们就先改钱的数量吧!首先把游戏下载下来, 然后用前面提到的软件“FFDec”打开在左边就会显示这个Flash中的所有资源,我们要修改的是AS脚本这里有两个思路,一是搜索和钱有关的单词,如Money、 cash、coin等等 定位定义钱变量的地方二是分析游戏的类,找到存储这些数据的地方我就先用第二种方法试试

可以看到 data 是数据的意思,应该在里面。先展开,然后有shop,MoneyData,很幸运,一次就找到了。这里是定义钱的初始值的地方,我们改为9(不要太大)当然直接改反编译出的as的话也行,但这是实验性的功能,可能导致Flash无法正常运行,我们还是改字节码,比较稳妥。字节码显示在右边,点击Edit 把pushbyte 0 改为 pushint 再保存即可

然后保存修改后的Flash,再用Flash Player打开看看效果:

瞬间变土豪了有木有! 然后进游戏爽一把:

第一名妥妥的。游戏完成后会到这里:

可以看到有很多关卡供选择,但都是锁定的,需要一关一关去打,完成才能解锁。当然游戏这样设定是有道理的,但我不管,我想直接玩最后一关,我们直接把关卡全部解锁! 还是一样的,把游戏拖入FFDec,这次没法搜索什么,所以分析他的结构我们一般从游戏的入口类开始分析,找到Main类:

按照编程习惯init里应该是类的初始化, 我们进去看看都初始化了什么(TIPS:按住CTRL点击init就能定位到该方法)

没什么需要的东西。再往下看看:

这个方法应该是写这个游戏的人为了方便测试留下,大致功能如下:关卡全部完成 解锁所有成就 解锁所有等级  升级  钱=99999 这样一来我们直接调用这些方法就可以达到我们想要的效果了。 添加方法代码到进入游戏的地方(通过之前的分析,可以确定这里就是开始游戏设置名称之前的地方):

就在这一句前面,修改bytecode,添加下面一段:

getlex Qname(PackageNamespace(""),"Main")

getproperty Qname(PackageNamespace(""),"main")

callpropvoid Qname(PackageNamespace(""),"money") 0

getlex Qname(PackageNamespace(""),"Main")

getproperty Qname(PackageNamespace(""),"main")

callpropvoid Qname(PackageNamespace(""),"allPlayed") 0

getlex Qname(PackageNamespace(""),"Main")

getproperty Qname(PackageNamespace(""),"main")

callpropvoid Qname(PackageNamespace(""),"allAchivs") 0

getlex Qname(PackageNamespace("ui"),"BoxLibrary")

getproperty Qname(PackageNamespace(""),"instance")

getproperty Qname(PackageNamespace(""),"crossMenu")

callpropvoid Qname(PackageNamespace(""),"addGallery") 0保存。他的as代码就变成了这样:

保存修改好的swf。进游戏看效果:  关卡和成就已经全部解锁 !

Flash游戏的修改过程大致就是这样,是不是很简单呢?

如果你还想详细了解反编译过程,可以去学习Flash文件格式和内部机制以及AVM原理。

另外,还有一种方法不修改Flash文件也能达到作弊的效果,而且非常简单!

我们下次再为大家介绍这种全新方法!

声明:本文仅供学习交流,请勿用于非法用途!

来源:Sp软件服务-投稿

*转载请注明来自游戏安全实验室(GSLAB.QQ.COM)

近期精品文章:

赞(37)
分享到: 更多

评论 抢沙发

  • 昵称 (必填)
  • 邮箱 (必填)
  • 网址