逆向工程第001篇:解锁FIFA07传奇模式

        FIFA07传奇难度的解锁,能够说是全部FIFA07玩家的终极目标。可是若是想以正常方式对其进行解锁,绝对是一件耗时耗力的工做。因此在这里我打算经过分析游戏存档文件的十六进制代码的方式,一步一步地找到解锁传奇难度的钥匙。在这一过程当中,也实现了对游戏全部隐藏项目的完全解锁。工具

图1  FIFA07游戏封面测试

1、收集游戏中必要的信息

        在这里先不着急分析游戏的十六进制代码,须要先对游戏须要解锁的内容有一个大概的了解。首先游戏须要解锁的有两个大项的内容,一个是游戏中的“球迷商店”,另一个是“FIFA07挑战”。其中“球迷商店”包含70个子项,是游戏中的隐藏内容,它们分别是:额外(4项)、足球(23项)、第三方球衣(35项)、建立中心(2项)、练习体育场(4项)以及赛季集锦(4项)。全部的这70个子项,是须要使用必定的游戏点数才可以换取的。而游戏点数的获取,则须要完成“FIFA07挑战”中的挑战项目才可以得到。不一样的挑战项目,依据其难易程度,挑战成功后会获得不一样的游戏点数,越困难的挑战项目,那么成功后所得到的游戏点数也就越多。“FIFA07挑战”中包含102个子项,它们分别是:英国(12)项、西欧(12项)、南欧(12项)、中欧(12项)、美洲(11项)、斯堪的纳维亚半岛(12项)、其他区域(9项)、世界(10项)以及世界2(12项)。而最终目标,也就是解锁传奇模式,它属于“世界2”的第12项解锁项目,若要解锁传奇模式,那么须要完成任两个大区的挑战才能够。到如今为止,在游戏中须要收集的信息基本已经收集完毕,那么分析的第一阶段就能够告一段落。spa

2、了解游戏存档信息

        通常来讲,相似于FIFA07这样的单机版的游戏,其设置信息还有各项的解锁及成就信息会保存在游戏的存档文件中。所以咱们只须要对游戏的存档文件进行修改便可,并不须要对游戏的主程序或动态连接库之类的文件进行修改。而具体对FIFA07来进行分析,每当游戏新创建一个玩家信息,那么系统会自动创建一个默认名称为Profiles的文件,其默认路径为“C:\XXXX\XXXX\Documents\FIFA 07\”,用于保存全局设置以及相应的解锁信息。之因此可以肯定Profiles文件的功用,是由于在FIFA07默认文件夹内,除了这个文件,其它的文件要么是用于存储录像信息,要么是存储由玩家建立的比赛信息。那么咱们接下来的工做重点就是分析Profiles文件。对象

图2  FIFA07存档文件夹blog

3、粗略观察存档文件的十六进制代码

        接下来可使用十六进制代码查看软件对Profiles文件进行粗略的观察。固然如今不要期望通过这一轮的观察就可以直接定位到传奇模式的关键代码位置,这一步骤的目的在于对于文件内容各个区段有一个大体的了解。这里选用的查看软件最好同时也可以对文件的十六进制代码进行修改,以方便接下来的工做。须要说明的是,查看文件的十六进制代码,每每会发现大量的数字00的存在,通常来讲,这些大段的00每每用于文件相应区段的对齐,也就是并无实质的做用,但有时也会有其它的做用,所以具体问题要具体分析。在此,我将整个Profiles文件分为三个区段:游戏

        区段一(相对地址0x0000至0x002f):这个区段能够理解为是Profiles文件的头部,用于识别本文件是否为合法的FIFA07存档文件,通常不对其进行分析,在此将其略过。字符串

图3 Profiles文件的头部基础

        区段二(相对地址0x0160至0x0348):因为经过本区段的十六进制代码基本上没法推断出有意义的ASCII码对应的字母,所以能够暂时将这个区段列为重点怀疑的对象,也许本区段包含着解锁的关键。软件

图4  Profiles文件的中部(部份内容)file

        区段三(相对地址0x0368至0x0e24):这个区段能够理解为用于存储全局设置,从将本区段的十六进制代码转换为ASCII码就能够看出来,通常不须要进行分析,暂时将其略过。

图5 Profiles文件全局设置部分

        因为在区段三以后就是大量的数字00,有理由相信这些00都是无心义的,仅仅做为填充对齐之用。而通过本步骤的粗略分析,咱们对Profiles文件就有了一个大体的了解,那么接下来就到了实质分析推理并修改的阶段。

4、完全解锁“球迷商店”

        正如以前所分析的,球迷商店的内容须要使用游戏点数来换取,那么能够考虑采用经过修改游戏点数的方式来将“球迷商店”的内容一一解锁。就拿个人FIFA07中的游戏点数为例,进入游戏经查看可知,我如今拥有2535点的游戏点数,因为咱们最终查看的是十六进制的代码,所以须要把十进制的2535转换为十六进制,即09e7,可是因为咱们的计算机是以“小端”为标准,因此在代码文件中应该是以“e709”进行显示的,因此在这里能够利用十六进制代码查看软件搜索“e709”。找到后能够尝试将其修改成“ffff”,这样足够用于解锁。若是在文件中可以找到许多“e709”,那么能够分别修改,每修改完一处就进入游戏以查看,若成功,说明定位成功;若失败,则需将上一步的修改撤销,继续修改下一个位置。

图6  对游戏点数进行修改

        很幸运的是,咱们所查找到的第一个位置就是游戏点数的位置,其相对地址为0x0300与0x0301,这样咱们再次进入游戏中的“球迷商店”,就可以一项一项地解锁全部隐藏项目了。

        可是在解锁以前有一件事是须要特别注意的,那就是必需要对Profiles文件再复制一份进行保存。这么作的目的是为了观测游戏解锁先后的变化,并且这一良好的习惯,会成为接下来解锁工做的关键。至此,“球迷商店”已经完全解锁,可是距离咱们的目标,彷佛仍是很遥远。

5、寻找“球迷商店”标志位

        仅仅经过修改游戏点数来换取隐藏项目并非咱们理想中高明的方式,既然是逆向工程,那么必需要找出到底是什么致使了游戏可以识别出哪些项目解锁了,哪些项目没有解锁。依据如今所掌握的的资料,能够从两个方面入手。

        首先在图4中能够发现Profiles文件的区段二中,在大量的十六进制数字00中,包含着必定数量的01,这实际上是一件很奇怪的事情,由于ASCII码中的01表明SOH(Start of Headling)即头标开始,是一个不可打印的ASCII码,咱们能够认为它就是一个无心义的。对比其它位置,这个区段中的01确实是多了些,加上又是参杂在大段的00中,那么能够联想到这里的01也许就是一个开关,也许就是某个标志位。最后咱们须要对上述猜想进行确认,这里经过使用对比解锁先后的两个文件的十六进制代码的软件来辅助咱们的分析。

图7  对比“球迷商店”解锁先后的Profiles文件

        实际对比中可能会有别的位置也有差异,可是图中区段是咱们重点怀疑的位置,截图中的上半部分为“球迷商店”解锁前的Profiles文件,下半部分为完全解锁的Profiles文件。经过对比基本确认了咱们的猜想。因为隐藏物品有70项,那么也须要70个字节用于标记这70项的内容。而相对地址0x01f4至0x0239正好是70个字节的内容。能够认定这就是咱们要找的标志位。若是不放心能够进入解锁前的游戏,记下“球迷商店”中解锁物品与未解锁物品的位置,依照上图样式,以00表明未解锁,01表明解锁,写下来对比观测,看看是否与图中一致。

图8  “球迷商店”隐藏项目标志位

        至此,已经掌握了“球迷商店”的修改关键,这样就能够直接对这些相应的标志位进行修改,无需经过修改游戏点数的方式来解锁隐藏物品了。

6、完全解锁“FIFA07挑战”

        不一样于解锁“球迷商店”,“FIFA07挑战”并不须要游戏点数进行解锁,所以不能经过找寻某一特殊数值的方式来换取点数对其进行解锁。可是因为有了以上的经验,能够怀疑“FIFA07”挑战也许如同“球迷商店”同样,也是在某个区段,采用了以00表明未解锁,01表明解锁了的方式进行记录。可是这个不容易进行定位,能够考虑采起两种方式。一种是在游戏中先经过正常方式解锁一项挑战内容,以后经过对比解锁先后的Profiles文件的方式进行定位。另一种是直接对Profiles文件的十六进制代码进行观察,特别是区段二部分,寻找相似于“球迷商店”那样的在大段的00中夹杂着01的区块。而后就能够定位到相对地址为0x017c至0x01e1,一共102个字节的位置,正好对应于102个挑战项目。能够将该区段所有修改成01,而传奇难度正是第102个标志位,即0x01e1位置。可是修改后发现,尽管在“FIFA07挑战”中全部选项已经打钩,可是传奇难度依旧未能解锁,由此能够推断,传奇难度应该另有标志位,以决定其是否解锁。在这里能够先任选两个区的挑战,在这两个区中留下一个不进行解锁,而将本区中其它位置经过修改标志位的方式进行解锁,进入游戏以正常方式达成未解锁成就,这样两个区成就达成,游戏便自动解锁了传奇难度。一样的,依旧要保存解锁先后的Profiles文件。

图9  “FIFA07挑战”标志位

         至此,“FIFA07挑战”获得完全解锁,同时传奇难度也得以解锁。

7、寻找传奇难度标志位

        尽管经过上述方式能够解锁传奇难度,可是咱们的目的仍是要以不进行游戏,直接修改标志位的方式来解锁传奇难度。一样还须要采起对比的方式,可能解锁先后会有许多的数据发生了变化,可是仍是须要优先寻找未肯定功能的区块中的01位置。每修改完一处就进入游戏实验传奇难度是否已经解锁,若没有解锁,则撤销以前的修改,继续修改下一个标志位,采用这种手段就可以最终找到传奇难度的标志位,即0x023b的位置。

图10  FIFA07传奇难度的标志位

        这样,咱们能够在不对Profiles文件进行任何修改的前提下,直接对该标志位进行修改,实现传奇难度的解锁。至此大功告成,同时在这寻找的过程当中,也完全分析清楚了FIFA07中全部隐藏项目的解锁位置。

8、尝试投机方式解锁传奇难度

        以前分析了Profiles文件中的区段三保存着全局设置的数据,那么能够尝试一下直接修改难度的数值,测试是否可以解锁传奇难度。这里能够采用搜索字符串的方式查找到设置中保存的难度标志位,直接将该值设置为4,即传奇难度。可是进入游戏发现,设置中的游戏难度为空,没有任何显示。那么有必要对这个“空格”难度的实力进行测试。而通过测试发现,“空格”与真实的传奇难度的水平相差甚远,所以能够得知,采用这种投机的方式并不能直接解锁传奇难度。

图11  尝试修改全局设置解锁传奇难度

9、总结

        由以上的流程能够看出,逆向工程须要的是细心与耐心。不少时候,成功的逆向每每是“三分技术,七分运气”。对于同一项内容的解锁,尝试采起不一样的方式每每会有新的发现。而对逆向工具的正确使用,也会起到事半功倍的效果。

        至此,FIFA07已经获得完全解锁,也找到了全部隐藏项目的标志位,逆向工程的第一个成功的尝试,也是为之后的工做打下了良好的基础。

相关文章
相关标签/搜索