# Recovery 3001

Windows에서 USB·SD 저장 장치를 읽기 전용으로 이미지화하고 FAT32/exFAT의
삭제 파일 후보를 찾아 다른 저장 위치로 복구하는 제품 프리뷰입니다.

## 현재 구현

- 연결된 외장 USB·SD 자동 검색과 장치 고유번호 재검증
- 시스템 디스크와 내부 버스 자동 차단
- 원본 장치 `GENERIC_READ` 전용 접근
- 이미지 진행률, 취소, 정렬된 부분 이미지 재개
- 이미지 SHA-256과 읽기 오류 지도가 포함된 JSON 증거 파일
- 청크 읽기 실패 시 논리 섹터 단위 재판독과 실제 실패 섹터만 0 채움
- 연결 해제·장치 신원 변경·짧은 읽기는 0 채움 없이 즉시 중단
- 이미지 생성 완료 후 삭제 파일 자동 스캔
- FAT32/exFAT 후보 검색·필터·다중 선택·일괄 복구
- 구조와 공유 체크섬이 일관된 삭제 FAT32 긴 파일명 복원
- 파일 크기 전체를 덮는 FAT32 보존 체인의 조각 파일 복구
- exFAT 주·백업 부트 체크섬 검증과 유효한 백업 부트 대체 판독
- 보존된 exFAT FAT 체인을 사용한 조각 파일 복구
- 기존 결과를 덮어쓰지 않는 별도 폴더 출력
- 복구 출력별 SHA-256과 후보 크기 비교
- 후보 근거·해시·실패가 포함된 비덮어쓰기 HTML·JSON 보고서
- 원인·영향·다음 행동을 구분한 오류 안내
- 스캔 결과·필터·선택 상태를 새 JSON 세션으로 저장하고 안전하게 다시 열기
- 세션을 열 때 원본 이미지를 새로 스캔하고 크기·표본 해시·스캔 해시를 재검증
- 이미지·텍스트·16진수 후보 미리보기와 읽기·메모리·해상도 상한

Interrupted imaging uses a source-bound `<image>.partial.json` checkpoint. It
preserves the cumulative read-error map across cancel/resume and binds the
partial image to the source identity, geometry, byte length, and prefix
SHA-256. Missing, edited, stale, or wrong-device checkpoints fail closed.

## GUI

`usb3001-recovery.exe`를 실행하고 다음 순서로 작업합니다.

1. 지원 범위와 원본 보호 원칙을 확인합니다.
2. 모델·용량·PhysicalDrive 번호를 대조하고 원본 USB·SD를 직접 선택합니다.
3. `읽기 전용 이미지 만들기`를 눌러 원본과 다른 물리 디스크에 저장하거나
   이미 확보한 디스크 이미지를 엽니다.
4. 완료된 이미지를 읽기 전용으로 스캔합니다.
5. 유형·신뢰도·판정 근거를 검토하고 복구할 파일을 선택합니다.
6. 다른 위치에 복구한 뒤 SHA-256과 HTML·JSON 결과 보고서를 확인합니다.

이미지 생성을 취소해도 완료된 섹터 단위 부분 파일은 남습니다. 같은 원본과
같은 이미지 파일을 다시 선택하면 완료 지점부터 이어서 만듭니다. 이미지 옆의
`<이미지>.partial.json`도 함께 보존해야 하며, 장치 신원·길이·체크포인트
SHA-256·부분 이미지 SHA-256 중 하나라도 다르면 안전하게 재개를 중단합니다.

스캔 뒤 `Ctrl+Shift+S`로 세션을 저장하고 `Ctrl+Shift+O`로 다시 엽니다.
세션 파일에는 원본 이미지 경로와 검증 정보, 후보의 공개 메타데이터, 필터와
선택 ID만 기록합니다. 다시 열 때는 직렬화된 내부 복구 정보를 신뢰하지 않고
원본 이미지를 새로 스캔합니다. 이미지 수정 시간까지 동일할 때만 저장된 선택을
자동 복원합니다.

후보 표의 `미리보기`는 디스크 이미지에서 제한된 범위만 읽습니다. 일반
미리보기는 64 KiB, 텍스트는 4,096자, 16진수는 256바이트로 제한하며, 시각
이미지는 파일 전체가 32 MiB 이하일 때만 디코딩합니다. 원본 USB와 이미지에는
쓰지 않습니다.

표시되는 SHA-256은 복구 출력이 이후 바뀌었는지 확인하는 값입니다. 삭제 전
원본 해시가 별도로 없으면 실제 원본과 완전히 동일하다는 뜻은 아닙니다.

## CLI

안전하게 사용할 수 있는 외장 장치 목록:

```powershell
usb3001-recovery-cli.exe devices
```

마운트된 USB 볼륨의 읽기 전용 이미지 생성:

```powershell
usb3001-recovery-cli.exe image `
  --volume E `
  --output D:\recovery\usb-volume.img
```

이미지 스캔:

```powershell
usb3001-recovery-cli.exe scan --image D:\recovery\usb.img
```

후보 하나 복구:

```powershell
usb3001-recovery-cli.exe recover `
  --image D:\recovery\usb.img `
  --id "fat32:1:1024" `
  --output D:\recovered\photo.jpg
```

필터된 후보 일괄 복구:

```powershell
usb3001-recovery-cli.exe recover-all `
  --image D:\recovery\usb.img `
  --output-directory D:\recovered `
  --name-prefix "_000"
```

파티션 테이블까지 포함한 물리 USB 전체 이미지가 필요한 경우에만 관리자
PowerShell에서 실행합니다.

```powershell
usb3001-recovery-cli.exe image `
  --physical-drive 2 `
  --output D:\recovery\usb.img
```

## 안전 원칙

- 원본 물리 장치와 볼륨을 쓰기 권한으로 여는 코드 경로가 없습니다.
- 시스템 디스크, 내부 버스, 정체를 확인할 수 없는 장치는 차단합니다.
- 이미지 목적지가 원본과 같은 물리 디스크이면 실행을 거부합니다.
- 기존 복구 결과 파일은 덮어쓰지 않습니다.
- 매체 읽기 오류는 논리 섹터 단위로 다시 확인한 뒤 실제 실패 범위만 오류
  지도에 기록하고 0으로 채웁니다.
- 연결 해제, 장치 신원 변경, 권한 오류, 짧은 읽기는 매체 불량으로 간주하지
  않고 이미지 생성을 중단합니다.
- 물리 고장, 암호화, 삭제 뒤 덮어쓰기, 심하게 조각난 파일은 완전 복구를
  보장하지 않습니다.

## 개발 검증

```powershell
cargo test --workspace
cargo clippy --workspace --all-targets -- -D warnings
cargo build --release --workspace
```

비관리자 실제 장치 자가시험은
`tools\Recovery3001-F4-Volume-SelfTest.ps1`로 장치 식별, 시스템 볼륨
차단, 반복 읽기 해시 일치, 원시 쓰기 API 부재를 검증합니다.

Windows 6단계 화면의 핵심 동작이 해상도와 배율에 의해 잘리지 않는지는
`tools\Recovery3001-Windows-UiAudit.ps1`로 검증합니다. 이 도구는
1280×720 100%, 1920×1080 150%, 1280×720 150% 논리 레이아웃 시험과
현재 Windows 작업영역의 시작·원본·이미지·선택·결과 스크린샷, OS·DPI·실행 파일
해시를 하나의 증거 묶음으로 생성합니다.

세션 무결성과 제한된 미리보기의 집중 시험은
`tools\Recovery3001-SessionPreview-Audit.ps1`로 검증합니다. 이 도구는
핵심 미리보기 2개, 표시 제한 3개, 세션 변조·변경 거부 4개 시험과 실행 파일
해시를 비덮어쓰기 증거 묶음으로 생성합니다.

FAT32 긴 파일명과 보존 조각 체인은
`tools\Recovery3001-Fat32-LfnChain-Audit.ps1`로 검증합니다. 이 도구는
한국어 긴 이름과 조각 체인 exact recovery, 체크섬 충돌 폴백, 범위 밖 체인
비신뢰를 포함한 4개 집중 시험을 증거로 생성합니다.

이미지 읽기 오류 정책은
`tools\Recovery3001-ImageFault-Audit.ps1`로 검증합니다. 이 도구는 실패
섹터 국소화, 인접 오류 범위 병합, 연결 해제 즉시 중단, 장치 신원 변경 즉시
중단의 4개 집중 시험을 증거로 생성합니다.

## Android 개발 상태

Android USB Alpha 소스는 과거 시험 자료로 보존하지만 현재 제품 개발,
지원, 다운로드 대상에서는 제외합니다. 제품 방향이 별도로 결정될 때까지
활성 목표는 Recovery Core 0.4.0과 Windows 0.4.0 Beta 1뿐입니다.
