使用十六进制编辑器,您真的可以检查/修改“文件”中的每一段代码/数据编码吗?

逆向工程 文件格式
2021-06-29 00:36:39

假设我用十六进制编辑器打开一个 1x1 BMP 文件。其中的值是否会直接链接到用于编码图像的规范,解码图像程序还将看到什么?

如果深入研究 Sonic The Hedgehog 的 bin 文件,我真的可以使用摩托罗拉 68000 的二进制操作码映射规范更改每条完整的编码指令吗(假设使用的汇编程序将为摩托罗拉 68000 采取的正确指令放置准确的二进制操作码),以及更改数据值、更改指令位置等?基本上,在字节级别,我接触到整个文件结构,并且可以控制以我想要的任何速率更改它。基本上,你可以把这个问题想成这样,坦率地说:

“文件中是否有无法从十六进制编辑器访问的内容,或隐藏的内容?”

那是对的吗?

3个回答

您可以在十六进制编辑器中打开任何文件。考虑这一点的方式是,读取文件的程序专门开发用于以某种方式解释字节。文件中的标头可能包含只有特定程序才能理解和使用的特定数据。

还有一些文件是加密的,有一定算法的程序可以解密。与游戏 ROM 一样,模拟器只是一个程序,它知道如何解释其字节并以游戏的形式呈现信息。

如果您要手动修改文件中的字节,则可能会破坏程序所需的预期信息。但是,没有什么可以阻止您仅使用十六进制编辑器手动创建 mp3、游戏、文档。那只会是痛苦的艰难。

您可以使用十六进制编辑器编辑您想要的任何内容。有多种方法可以“隐藏”整个文件,但是只要您可以使它们可见并使用十六进制编辑器打开,就无法使文件的某些部分不可见。(1)

但是......你需要在你正在改变框架内工作假设您编辑了一个简单的 BMP 图像,并将其大小从 1x1“更改”为 2x2。那会“工作”吗?不 - 您正在更改重要属性(图像大小)而不是实际图像,并且没有程序可以再读取您修改后的 BMP 图像,因为它现在需要2x2 图像。

但是,如果您只更改图像内部一个像素的颜色,则没有问题。BMP 文件不包含校验和,因此您更改的文件将被正确读取。

您的“Sonic”示例也是如此。是的,您可以修改单个指令——但是(在整个可执行文件的约束范围内)您不能“插入”或“删除”它们。在更改单个指令之前,您需要绝对确定它单个指令,而不是先前多字节指令的一部分。如果您正在查看原始十六进制转储,这可能很难看出。

第三个问题可能是文件被加密或以其他方式防止篡改(例如,使用上述校验和)。如果是这种情况,您可以随心所欲地查看,但找不到任何有用的更改;或者,更改数据可能会使程序停止运行(即,如果检测到原始数据已被修改)。

(1) 在软盘和 CD-ROM 时代,有一些方法可以使磁盘扇区无效。这样,“文件”就无法复制到其他媒体或使用常规磁盘编辑器打开。当然,阅读应用程序“知道”哪些扇区已损坏并且不会尝试访问它们。

通常,您可以访问写入磁盘或文件中的任何字节,但是如果您不查找它们,则可能有一些地方是您看不到的。

  1. 例如,当您打开具有此类额外信息的文件时,大多数十六进制编辑器不会显示资源分支(Apple、HFS)或替代流(Windows、NTFS)。另见维基百科 - 叉子
  2. 某些信息可以隐藏在文件系统的文件边界之外的区域上。这是可行的,因为大多数文件系统将文件存储在块中,并且文件的最后一个块可能有一些十六进制编辑器无法访问的额外字节。对于这种情况,磁盘编辑器会有所帮助。
  3. 存在隐写术的整个世界- 可以将额外信息以这种方式编码到其他数据中,例如您看不到差异(视觉上)的图像。当然,您可以更改此类文件中的任何字节,但不要注意“隐藏信息层”。