如何以受控方式损坏存档文件?

rat*_*lan 26 files corruption

我编写了一个函数,该函数使用 CRC 校验和检查损坏的存档。

为了测试它,我只是打开了存档并使用十六进制编辑器对内容进行了加扰。问题是我不相信这是生成损坏文件的正确方法。

有没有其他方法可以创建“受控损坏”,因此它不会完全随机但可以模拟真实损坏的档案会发生什么?我从来没有故意破坏某些东西,所以除了随机打乱文件中的数据之外,我真的不确定该怎么做。

Pet*_*des 27

我也没有做过很多模糊测试,但这里有两个想法:

在文件中间写入一些零。dd与 一起使用conv=notrunc。这会写入一个字节(块大小=1 计数=1):

dd if=/dev/zero of=file_to_fuzz.zip bs=1 count=1 seek=N conv=notrunc
Run Code Online (Sandbox Code Playgroud)

使用/dev/urandom作为源也是一种选择。

或者,使用 . 打多个 4k 孔fallocate --punch-hole。您甚至fallocate --collapse-range可以在不留零填充孔的情况下剪下一页。(这将改变文件大小)。

在错误的位置恢复下载将与--collapse-range场景匹配。不完整的洪流将匹配punch-hole场景。(稀疏文件或预先分配的范围,在尚未写入的任何地方读取为零。)

坏的 RAM(在您下载文件的系统中)会导致损坏,光驱也会损坏文件(它们的 ECC 并不总是足够强大,无法从划痕或染料褪色中完美恢复)。

DVD 扇区(ECC 块)是 2048B,但可能会发生单字节甚至单比特错误。某些驱动器可能会给您带来无法纠正的坏数据,而不是扇区的读取错误,尤其是当您以原始模式读取时,或调用它时。


Sti*_*mer 12

其他答案似乎主要与硬件错误有关。让我列出一些由软件引起的损坏:

  • LF 替换为 CRLF。
  • CR 已删除。(即使后面没有跟LF)
  • 插入了额外的空字节。
  • 插入了额外的 Unicode“字节顺序标记”。
  • 字符集从 UTF-8 转换为 Latin-1,反之亦然。
  • DOS EOF 字符(#1A)已删除,即使不在文件末尾。

这些事情发生在文本文件上时是无害的,但在应用于二进制文件时通常是致命的。


ste*_*eve 8

使用dd截断文件,或者尝试使用二进制编辑器,如hexer编辑和介绍一些损坏。

使用 dd 截断文件的示例

创建 5MB 文件

# dd if=/dev/zero of=foo bs=1M count=5
5+0 records in
5+0 records out
5242880 bytes (5.2 MB) copied, 0.0243189 s, 216 MB/s
# ls -l foo
-rw-r--r-- 1 root root 5242880 Aug 12 20:13 foo
#
Run Code Online (Sandbox Code Playgroud)

从末尾截断 10 个字节

# dd if=foo of=foo-corrupted bs=1 count=5242870
5242870+0 records in
5242870+0 records out
5242870 bytes (5.2 MB) copied, 23.7826 s, 220 kB/s
# ls -l foo foo-corrupted
-rw-r--r-- 1 root root 5242880 Aug 12 20:13 foo
-rw-r--r-- 1 root root 5242870 Aug 12 20:14 foo-corrupted
#
Run Code Online (Sandbox Code Playgroud)

Hexer 手册页

HEXER(1)                              General Commands Manual                             HEXER(1)

NAME
   hexer - binary file editor

SYNOPSIS
   hexer [options] [file [...]]

DESCRIPTION
   hexer  is  a  multi-buffer  editor  for  viewing  and  manipulating binary files.  It can't
   (shouldn't) be used for editing block devices, because it tries to load the whole file into
   a  buffer (it should work for diskettes).  The most important features of hexer are:  multi
   buffers, multi level undo, command line editing with completion, binary regular expressions
   (see  below).   The  user  interface  is  kept similar to vi, so if you know how to use vi,
   you'll get started easily.
Run Code Online (Sandbox Code Playgroud)

  • 是的,通过使用 `dd` 截断文件,这将模拟一个真实世界的场景,其中只创建文件的一部分。使用“hexer”进行编辑以引入一些虚假内容会模拟另一种类型的损坏。顺便说一句,`md5sum` 可能值得一看,它计算文件的 md5 校验和。 (2认同)