CRC 체크섬을 사용하여 손상된 아카이브를 확인하는 함수를 작성했습니다.
테스트하기 위해 방금 아카이브를 열고 16진수 편집기를 사용하여 내용을 뒤섞었습니다. 문제는 이것이 손상된 파일을 생성하는 올바른 방법이라고 생각하지 않는다는 것입니다.
완전히 무작위는 아니지만 실제 손상된 아카이브에서 어떤 일이 발생하는지 시뮬레이션할 수 있도록 "통제된 손상"을 생성하는 다른 방법이 있습니까? 나는 의도적으로 무언가를 손상시킨 적이 없기 때문에 파일의 데이터를 무작위로 엉망으로 만드는 것 외에는 무엇을 해야할지 잘 모르겠습니다.
답변1
난 아직 많은 일을 하지 않았어퍼즈 테스트둘 중 하나이지만 여기에는 두 가지 아이디어가 있습니다.
파일 중간에 0을 몇 개 씁니다. dd
와 함께 사용됩니다 conv=notrunc
. 이는 1바이트를 씁니다(블록 크기 = 1 개수 = 1).
dd if=/dev/zero of=file_to_fuzz.zip bs=1 count=1 seek=N conv=notrunc
/dev/urandom
소스 가 되는 것도 선택 사항입니다.
또는 여러 개의 4k 구멍을 펀치하는 방법을 사용하십시오 fallocate --punch-hole
. fallocate --collapse-range
빈 구멍을 남기지 않고 페이지를 잘라낼 수도 있습니다 . (이렇게 하면 파일 크기가 변경됩니다).
잘못된 위치에서 다운로드를 재개하는 것이 --collapse-range
시나리오에 적합합니다. 불완전한 토렌트가 punch-hole
장면과 일치합니다. (희소 파일 또는 사전 할당된 범위는 아직 작성되지 않은 모든 위치에서 0을 읽습니다.)
불량 RAM(파일을 다운로드하는 시스템)은 손상을 일으킬 수 있으며, 광학 드라이브도 파일을 손상시킬 수 있습니다(ECC가 긁힘이나 염료 변색으로부터 완벽하게 복구할 만큼 항상 강력하지는 않습니다).
DVD 섹터(ECC 블록)는 2048B입니다., 그러나 단일 바이트 또는 단일 비트 오류가 발생할 수도 있습니다. 일부 드라이브는 특히 원시 모드에서 읽거나 불러올 때 섹터에 대한 읽기 오류 대신 수정할 수 없는 잘못된 데이터를 제공할 수 있습니다.
답변2
다른 답변은 대부분 하드웨어 오류와 관련된 것 같습니다. 소프트웨어로 인한 피해를 나열해 보겠습니다.
- LF는 CRLF로 대체됩니다.
- CR이 삭제되었습니다. (뒤에 LF가 없더라도)
- 추가 널 바이트를 삽입하십시오.
- 추가 유니코드 "바이트 순서 표시"가 삽입되었습니다.
- UTF-8에서 Latin-1로 또는 그 반대로 문자 집합을 변환합니다.
- DOS EOF 문자(#1A)는 파일 끝이 아니더라도 제거됩니다.
이러한 상황은 텍스트 파일에 발생할 경우 상당히 무해하지만 바이너리 파일에 적용할 경우 치명적인 경우가 많습니다.
답변3
파일을 자르는 데 사용하거나 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
#
끝에서 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
#
헥서 매뉴얼 페이지
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.
답변4
또 다른 일반적인 손상 유형은 비트 회전입니다. 즉, 데이터 스트림에서 단일 비트(또는 여러 비트)가 전환됩니다.
따라서 바이트는 또는 , 또는 , 또는 무엇 1111 0000
이든 될 수 있습니다 .1111 0010
1011 0000
1110 1100
패리티 및 카운트 체크섬 시스템은 1110 1000
패리티와 카운트가 모두 동일하게 유지되기 때문에 집계된 숫자와 수집되지 않은 숫자의 동일한 수에 문제가 있습니다.
따라서 임의 문자의 모든 인스턴스를 0x57에서 0x75("9"에서 "K")로 또는 그 반대로 바꾸는 경우 감지되지 않을 수 있습니다. mysql을 사용하는 시스템의 경우 "replace" 명령이 이 목적으로 존재합니다.
replace K 9 < goodInputFile > corruptedOutputFile
문자 K와 9를 바꿔 볼 수도 있습니다. 이는 파일에 같은 횟수로 나타나는 경우 특히 좋은 테스트가 될 것입니다.
replace K 9 9 K < goodInputFile > corruptedOutputFile
자세한 man replace
내용은.