假设我使用十六进制编辑器打开了一个1x1 BMP文件。

如果深入研究Sonic The Hedgehog的bin文件,我真的可以更改每一个单独的图像吗?完整的编码指令是否使用了Motorola 68000的二进制操作码映射规范(假设所使用的汇编程序将为Motorola 68000所采用的正确指令放置确切的二进制操作码),以及更改数据值,更改指令位置等?基本上,在字节级别,我可以接触到文件结构的全部内容,并且可以控制以所需的任何速率对其进行更改。基本上,您可以直言不讳地认为这个问题:

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

#1 楼

您可以在十六进制编辑器中打开任何文件。考虑这一点的方法是专门开发读取文件的程序,以某种方式解释字节。文件中的标头可能包含只有特定程序才能理解和使用的特定数据。像游戏ROM一样,仿真器只是一个知道如何解释其字节并以游戏形式呈现信息的程序。

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

#2 楼

您可以使用十六进制编辑器编辑任何内容。有一些方法可以“隐藏”整个文件,但是一旦您可以使用十六进制编辑器使它们可见并打开,便没有办法使文件的各个部分不可见。 (1)

但是...您需要在所更改的框架内工作。假设您编辑一个简单的BMP图像,然后将其大小从1x1更改为2x2。那会“工作”吗?否-您要更改的是重要属性(图像大小),而不是实际图像,并且任何程序都无法再读取修改后的BMP图像,因为它现在需要2x2图像。您只需更改图像中一个像素的颜色,就没有问题。 BMP文件不包含校验和,因此可以正确读取更改后的文件。

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

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

(1)早在软盘和CD-ROM时代,就有种方法可以使磁盘扇区无效。这样,就无法将“文件”复制到另一种介质或使用常规磁盘编辑器打开。当然,正在读取的应用程序“知道”哪些扇区已损坏并且没有尝试访问它们。

#3 楼

通常,您可以访问磁盘上或文件中写入的任何字节,但是如果您不查找它们,可能会出现一些看不见的地方。当您打开包含此类额外信息的文件时,大多数十六进制编辑器不会显示叉(Apple,HFS)或备用流(Windows,NTFS)。另请参见Wikipedia-分支

某些信息可以隐藏在文件系统之外文件边界的区域中。之所以可以这样做,是因为大多数文件系统都将文件存储在块中,并且文件的最后一块可以具有一些额外的字节,十六进制编辑器无法访问这些字节。对于这种情况,磁盘编辑器会有所帮助。
整个隐秘术世界-额外的信息可以通过这种方式编码成其他数据(例如图像),而您看不到(视觉上)差异。当然,您可以更改此类文件中的任何字节,但不必注意“隐藏信息层”。