对GameBoy Advance游戏进行反向工程–简介

2021-01-15 20:14:37

我一直在努力提出个人项目;从根本上说,它们是分散注意力和学习与我们日常工作不同的好方法。去年,我对编译器项目充满了热爱,而今年又没有什么不同:我的研究重点是找到易于编写代码的内容,并进行需要了解计算机科学某些领域基础知识的研究,并且可以发展成为一个令人兴奋的项目。在花了几周的时间像滚石一样,从来没有找到让我专注几天的东西之后,我发现了一个真正引起我注意的挑战:为著名的Gameboy Advance游戏Klonoa创建一个关卡编辑器- ,从事ROM黑客项目!

在接下来的文章中,我将深入研究,以便吸引更多的人学习逆向工程和其他有趣的主题。这些帖子将以葡萄牙语和英语写成,以尽可能地吸引更多人。

如果您想继续进行项目开发,可以在以下位置检查其源代码,这些源代码是用JS和React编写的:https://github.com/macabeus/klo-gba.js

您是喜欢看而不是看的人吗?没问题!我和我的朋友在两次会议上就该项目作了演讲。当然,在一次演讲中,内容更加简洁,因为我们有更少的时间,所以这些帖子更加详细-但是这些演讲带来了一种更具交互性的方法来解决逆向工程的挑战。

在巴西的Conf上进行的演讲🇧🇷由于本次会议有广泛的听众,因此演讲的一半是关于逆向工程的,另一半是关于前端的。滑梯

在塞尔维亚的BalCCon上的演讲🇷🇸由于本次会议面向安全性,因此本演讲的重点是逆向工程过程。滑梯

这是一个2D平台游戏,面向益智游戏。当您以一种真正上瘾的方式遍历各个级别时,它具有很多级别,并且机械复杂性也随之增加。但是关卡是有限的……我真的沉迷于游戏这一事实给我带来了一个问题:如果我们可以创建自己的关卡怎么办?

这款游戏具有多种功能,可以应对这一挑战:它是2D模式,具有基于图块的地图,具有相当简单的机制,并且可以在较旧且流行的视频游戏机中运行。逆向工程和关卡编辑非常复杂,但是仍然可以实现!所以走吧!

>什么是基于图块的地图?轻松自在:这是一个由许多小物件组成的游戏地图。每块(平铺)通常会出现几次,并在内部由唯一的ID表示。如果您观看上面的视频,则可以轻松地在前景中识别出一个网格,重复的网格从网格中形成,从而形成了游戏地图。

它是2001年推出的便携式游戏机。它当时非常流行,就像每个流行的游戏机一样,很多人都对更多地了解它的内部工作方式感兴趣,从而进行了大量研究。以及有关其架构如何工作,如何创建自己的游戏的文档,帮助逆向工程和与最受欢迎的游戏(例如Pokemon)相关的项目的工具,您可以在其中找到关卡编辑器(例如Advance Map)。

但是,由于Klonoa不如Pokemon受欢迎,因此没有针对其工作原理的研究,也没有相关的工具。但是,我们可以利用整个现有生态系统,根据GBA手册和调试器创建自己的工具!

我们将使用两种工具:no $ gba主要用于动态分析(在游戏运行时对其进行分析),以及IDA用于静态分析(在不进行游戏时进行分析)。

no $ gba是进行动态分析的很好的工具,可将所有内容集成到一个地方。由于严格专注于GBA,因此它具有非常特殊的功能,例如可视化背景/拼贴图,图形内存查看器等。这使一切都变得更加容易。但是,对于更一般的调试过程,与IDA相比,它是非常有限的,IDA具有出色的静态分析功能,例如图形视图以及将内存的某些区域提取到单独的文件中-这对于我们获得数据至关重要。提取ROM的级别。

我真的很喜欢webapp,因为仅通过访问URL,用户就可以立即使用该产品。我不想强迫用户下载应用程序只是为了为游戏创建一些关卡,所以我决定该工具为网络。

我选择JS是因为它是我最常使用的浏览器中运行的语言。 之所以选择React,是因为我真的很喜欢将前端视为独立组件的想法,每个组件都有一组状态。 在本系列的最后一篇文章中,我们将更多地讨论前端。 有了这个简短的概述,在接下来的几章中,我将解释我在项目每个步骤中的进度,以便我们可以共同为Klonoa创建一个关卡编辑器! 让我们跳下去吗?