对未知或受保护文件格式进行逆向工程的技术

逆向工程 视窗 文件格式 。网 编码
2021-06-12 19:45:12

我正在将最初开发的游戏转换为在 Windows 网络版上运行。我在 .tga 图像文件中从艺术家那里收到了一堆游戏艺术作品,这些文件在 Photoshop 中打开得很好。但是我没有完整的艺术品,也找不到。

我还有一个 Windows 游戏的发行版,它由 .dll、.lua 文件和许多 .tga 文件组成。游戏发行版中的 .tga (Targa) 文件与我收到的艺术品中的 .tga 文件命名相同,因此我认为可以安全地假设它们是相同的图像。甚至我在提供的艺术作品中遗漏的图像也存在于游戏发行版中。答对了!其实没有……

游戏中的 .tga 文件无法在 Photoshop 或 Preview (mac) 或 Pixelmator (mac) 中打开。所以我认为已经对游戏 .tga 文件进行了一些操作以保护它们,我想将它们逆向工程为正常的 .tga 文件。

首先,我需要了解新文件是什么以及它们是如何修改的。这是我迄今为止尝试过的:


使用linuxfile命令:

  • RockExplosion.tga(来自艺术品)。
    • 输出: rockExplosion.tga: Targa image data - RGB 100 x 43
  • rockExplosion.tga(来自游戏)。
    • 输出: rockExplosion.tga: data

使用十六进制查看器和差异检查

这两个文件的字节长度完全相同。每个文件中最后约 15% 的字节是相同的,而前约 85% 的字节完全不同。


Binwalk 没有告诉我任何文件的任何信息。


  • 对未知文件格式进行逆向工程还有哪些其他技术?
  • 在 .NET 应用程序中是否有保护图像的标准方法?
  • 我可以使用哪些其他工具来进一步探索?
2个回答

如果可以,您应该发布 2-3 个真实 targa 图像的链接,以及相应的游戏 targa 图像(但要注意许可证问题)。有时,查看文件会敲响警钟,我可以检查我要说的大部分内容是否适用于您的文件。

那说:

  • 一些 tga 文件是从 Lua 引用的吗?那里有Lua 源代码来加载 targa 文件,也许你的 lua 有一个变体来进行解密。
  • 因为文件具有相同的长度,我假设它们没有转换为不同的格式,而是以某种方式加密。
  • 它不太可能是在其他地方使用的一种众所周知的加密,因为这会破坏加密的意义。
  • 如果这是一种简单的加密方式,那么所有加密文件的前几个字节(tga 文件的标题)应该相同,因为它们在原始文件中是相同的。详情请查看targa 文件格式例如,图像宽度/高度应该不同,大多数其他标题字段应该相同。
  • 知道不同字节的确切位置和相同字节的开始位置可能会很有趣。这是否总是在块边界上,即 512 字节的倍数,只有最后一个块(小于 512 字节)未加密?(对于可能的块大小,将 512 替换为 1024、2048、4096。)还是它始终位于文件中的某个逻辑位置,例如扩展区的开始,或开发者区的开始?
  • 是否所有文件都有开发人员区域?如果是这样,它可能包含一个加密密钥。(不太可能,因为文件大小不会改变)
  • 如果将原始文件中的字节与加密文件中的字节进行异或会发生什么?不同的文件对会产生相同的异或模式吗?这种模式是否重复,在多少字节之后?

如果所有这些都失败了,您将不得不对游戏代码进行逆向工程,了解可执行代码如何加载 tga 文件,并自己实现算法。

不要被 .tga 扩展名所迷惑。一些开发人员在他们的文件中添加扩展名,让我们这样的人望而却步。

您的文件可以很容易地成为不同的图像类型、存档(例如 zlib)或加密数据。(在您的情况下,它们可能只是实际的 tga 文件。)

您可以用来获取您正在寻找的图像的一种方法是绕过加密。如果这些文件确实被加密了,那么您可以使用其原始引擎像往常一样打开文件(启动游戏)。然后您可以使用内存编辑器(例如 CE)打开应用程序内存。如果您可以在内存中找到游戏数据(此时它会被解密),那么您可以将其撕掉并将其重建为正确的文件类型。您可能需要先研究 tga 文件结构。

此外,您可以尝试查看 dll 文件(在标题中查找纯文本),并尝试研究它们的来源或功能,众所周知,这些 dll 实际上可能是压缩或加密库。

最后,我推荐一个像 ProcessExplorer 这样的调试器,注意加载 .tgas 时的偏移量。这样你就可以确定它的结构。

您可能想探索 ollydbg,这样您就可以看到应用程序在解密之前所经历的步骤。

希望这可以帮助。