逆向工程 VC++ 视频游戏

逆向工程 视窗 x86 聚乙烯 数据库
2021-07-07 07:52:50

所以我知道 x86 机器语言和 C++/C 语言。在过去的几周里,我一直致力于学习 Windows 内部结构,尤其是 PE 格式。我的目标是检索古墓丽影黑暗天使的源代码文件。这是 10 年前(2003 年)发布的 3d 视频游戏,使用 C 和 C++ 语言编写。代码均使用 VC++ 6.0 和英特尔 C++ 7.1 编译。我试图从中猜测初始源代码的文件是 PE 格式的可执行文件,其中包含带有公共符号的 ProgramDataBase 文件 (v2.0)。它们的名称是 TRAOD、TRAOD_P3 和 TRAOD_P4(不包括文件扩展名(.exe.PDB),因为第一个是用 vc++ 编译的,另一个是用 ic++ 编译的,分别用于奔腾 3 和奔腾 4 目标处理器。

我使用 IDA Pro 打开可执行文件并映射 PDB 符号。然后我将机器指令翻译成它们的 C++ 等价物,并将它们放入一个大缓存文件中。然后我使用 dbh.exe 将函数映射到它们匹配的源文件中(因为 PDB 文件具有公共函数的源行信息)。但是在转到下一个函数之前,我正在使用包含该函数的 vc++ 或 ic++ 编译测试可执行文件,然后将结果与原始函数进行比较(我的意思是将与目标函数等效的机器代码与我的测试 exe 和游戏进行比较一)。但后来我认为这不是那么有效,因为没有考虑许多其他过程。我的意思是 PDB 文件包含比 dbh 程序转储和 PE 文件更多的信息。在有关 PE 文件格式的文章中,据说它与 .OBJ 非常相似,链接器使用这些文件生成 exe。那么浏览 .OBJ 文件然后猜测源代码还是只使用 exe 是更好的主意吗?我还读到要从 PE 生成 .OBJ 文件,您需要有一些符号,而我从 PDB 文件中获得了它们,所以我认为这种转换是可能的。另外,如果您对如何反编译这个游戏有任何其他想法,请分享它们 - 我真的很想实现这一点。来自 PE 的 OBJ 文件你需要有一些符号,而我从 PDB 文件中获得它们,所以我认为这种转换是可能的。另外,如果您对如何反编译这个游戏有任何其他想法,请分享它们 - 我真的很想实现这一点。来自 PE 的 OBJ 文件你需要有一些符号,而我从 PDB 文件中获得它们,所以我认为这种转换是可能的。另外,如果您对如何反编译这个游戏有任何其他想法,请分享它们 - 我真的很想实现这一点。

编辑:我也在搜索关于 .PDB 格式(v2.0)和关于 VC++ 6.0 生成的 .OBJ 和 .LIB 文件的文档。

3个回答

鉴于您还没有 .obj 文件,尝试从 .exe 和 .pdb 文件生成 .obj 文件然后对生成的 .obj 文件进行逆向工程是没有意义的。如果您要这样做,那么 .obj 文件中将不会包含 .exe 或 .pdb 文件中尚未包含的任何信息。因此,您最好只使用 .exe 和 .pdb 文件。

至于对代码进行逆向工程,在尝试将 x86 代码逆向工程回 C/C++ 源代码时Hex-Rays非常有用。

如果您打算对游戏进行逆向工程以了解它的制作方式,您很可能最终会重新创建 C/C++ 文件(至少是主要组件)。恐怕如果没有牢牢掌握装配,您就无法扭转某些事情并对内部运作有充分的了解。有多种工具可以帮助您完成工作。您可以使用几个很棒的调试器:OllyDBGImmunity Debugger显然有Hex-Rays,它提供了多种产品。IDA,它是出色的多处理器反汇编程序。IDA 有 2 个版本:免费版和商业版。还有Hex-Rays Decompiler

如果你有兴趣真正消化 PE 格式,你肯定想看看这里的参考资料:http : //blog.dkbza.org/2012/08/pe-file-format-graphs.html

这些图表非常完整,并且在分析 PE 格式的未知文件时绝对会给您带来巨大的帮助,即使标题已被篡改以阻止 RE。