
오픈소스 디지털 이미지 포렌식 도구 세트
오픈 소스 디지털 이미지 포렌식 툴셋
"법의학적 이미지 분석은 이미지 과학과 도메인 전문 지식을 적용하여 법적 문제에서 이미지의 내용 및/또는 이미지 자체를 해석하는 것입니다. 법 집행 기관에서 사용되는 법의학적 이미지 분석의 주요 하위 분야는 다음과 같습니다: 사진 측량, 사진 비교, 콘텐츠 분석, 이미지 인증." (과학적 이미징 기술 작업 그룹)
Sherloq는 디지털 이미지 포렌식을 위한 완전 통합 환경을 구현하는 개인 연구 프로젝트입니다. 이미지가 위조되었는지 자동으로 판단하는 도구(아마도 그런 도구는 절대 존재하지 않을 것입니다...)가 아니라, 최신 연구 논문과 워크숍에서 발견된 다양한 알고리즘을 실험하는 도구입니다.
많은 상용 솔루션이 높은 가격으로 판매되며 종종 법 집행 기관 및 정부 기관에만 제한되는 반면, 이 툴셋은 확장 가능한 프레임워크이자 디지털 신호 처리의 이 특정 응용 분야에서 실험에 관심이 있는 모든 사람을 위한 출발점이 되고자 합니다.
저는 *보안을 통한 모호성(security-by-obscurity)*이 모든 종류의 포렌식 서비스를 제공하는 잘못된 방법이라고 강하게 믿습니다(예: "이 독점 소프트웨어를 사용하면 이 사진이 원본임을 보장합니다... 그리고 당신은 나를 믿어야 합니다!"). 오픈 소스 철학에 따라, 모든 사람이 다양한 기술을 스스로 시도하고 지식을 얻어 커뮤니티와 공유할 수 있어야 합니다... 코드 개선에 기여한다면 더 좋구요! :)
첫 번째 버전은 2015년에 C++11로 작성되어 많은 옵션이 있는 명령줄 유틸리티를 구축했지만, 곧 너무 번거롭고 상호작용이 부족하다는 것이 드러났습니다. 해당 버전은 OpenCV, Boost 및 AlgLib 라이브러리를 설치한 후 CMake로 컴파일할 수 있었습니다. 이 첫 번째 개념 증명은 계획된 기능의 약 80%를 제공했습니다(전체 목록은 아래 참조).
새로운 알고리즘도 포함되었지만, 2017 버전은 주로 Qt 기반의 다중 창 GUI를 추가하여 더 나은 사용자 경험을 제공했습니다. 여러 분석을 화면에 표시할 수 있었고 빠른 확대/축소 및 스크롤 뷰어가 구현되어 더 쉬운 이미지 탐색이 가능했습니다. 이 프로젝트는 Qt Creator에서 Qt 5 및 OpenCV 3으로 컴파일할 수 있었으며 계획된 기능의 약 70%를 다루었습니다.
시간이 흘러 2020년에 모든 것을 Python(PySide2 + Matplotlib + OpenCV)으로 포팅하기로 결정했습니다. 더 쉬운 개발과 배포를 위해서였죠. 이 반복이 막 시작되었고 이전 코드를 모두 새 플랫폼으로 포팅하지는 못했지만, 이것이 프로젝트의 최종 "형태"가 될 것이라고 생각합니다(누군가가 멋진 웹 애플리케이션을 개발하겠다고 자원하지 않는 한!).
코드를 공유하고 개선하거나 테스트하는 데 관심 있는 사람과 연락하게 되어 기쁩니다. 하지만 이 저장소는 최종 제품을 배포하기 위한 것이 아니라 공개적으로 소박한 교육용 도구의 개발을 추적하기 위한 것임을 명심해 주세요. 버그, 다듬어지지 않은 코드, 누락된 기능이 있을 수 있습니다! ;)
이 목록은 베타 단계에 도달하면 툴킷이 제공할(바라건대) 기능을 포함합니다(참고: 프로그램 내에서 기울임꼴로 표시된 기능은 아직 구현되지 않았습니다!).
일반: 원본 이미지, 헥스 에디터, 파일 다이제스트, 유사 검색
메타데이터: EXIF 전체 덤프, 헤더 구조
검사: 향상 돋보기, 채널 히스토그램, 참조 비교
세부 정보: 휘도 그래디언트, 에코 에지 필터, 웨이블릿 임계값, 주파수 분할
색상: RGB/HSV 플롯, 공간 변환, PCA 투영, 픽셀 통계
노이즈: 신호 분리, 최소/최대 편차, 비트 평면 값
JPEG: 품질 추정, 오류 수준 분석
변조: 대비 향상, 복사/이동 위조, 합성 접합, 중간값 필터링
현재 저장소를 로컬 폴더로 클론하고 현재 디렉토리를 해당 폴더로 변경합니다.
Sherloq는 Python 3.11을 사용합니다. 권장 설정은 uv를 사용하는 것입니다. Linux, macOS 및 Windows에서 동일한 워크플로우를 제공하고, 필요할 때 Python을 설치할 수 있으며, 로컬 .venv 폴더에 프로젝트 환경을 유지합니다.
uv를 공식 설치 가이드에 따라 설치한 후 Sherloq 루트 폴더에서 환경을 생성합니다:
$ uv venv --python 3.11
저장소에는 .python-version 파일도 포함되어 있으므로, 향후 uv 명령은 기본적으로 Python 3.11을 사용합니다.
$ uv pip install -r gui/requirements.txt
일부 실험적인 AI 기반 도구에는 추가 패키지가 필요합니다. 해당 도구를 사용할 계획인 경우에만 설치하세요:
$ uv pip install -r gui/requirements_ai_solutions.txt
Sherloq는 저장소 루트에서 실행할 수 있습니다. 애플리케이션 패키지는 중앙화된 프로젝트 경로를 통해 아이콘, 모델 및 번들 도구를 확인합니다.
$ source .venv/bin/activate
$ python -m gui.sherloq_app
> .venv\Scripts\Activate.ps1
> python -m gui.sherloq_app
저장소 루트 호환성 실행기도 사용할 수 있습니다:
$ python sherloq.py
Linux 사용자 참고: 다음 오류가 표시되는 경우:
qt.qpa.plugin: From 6.5.0, xcb-cursor0 or libxcb-cursor0 is needed to load the Qt xcb platform plugin.
qt.qpa.plugin: Could not load the Qt platform plugin "xcb" in "" even though it was found.
This application failed to start because no Qt platform plugin could be initialized. Reinstalling the application may fix this problem.
터미널에서 다음 명령을 실행하세요: sudo apt install -y libxcb-cursor-dev
Python Qt 애플리케이션은 이제 가져오기 가능한 gui/sherloq_app 패키지에 있습니다:
main.py: Qt 애플리케이션 진입점 및 메인 창.core/: JPEG 유틸리티 및 파일 로딩과 같은 공유 이미지 처리 도우미.ui/: 재사용 가능한 Qt 위젯, 뷰어, 테이블 및 도구 트리.tools/: 툴박스 범주별로 그룹화된 분석 위젯(general, metadata, inspection, detail, colors, noise, jpeg, tampering, various).paths.py: 아이콘, 모델 및 번들 네이티브 도우미에 대한 중앙화된 접근을 제공하여 코드가 더 이상 gui에서 실행하는 데 의존하지 않도록 합니다.대규모 번들 자산 및 타사 연구 구성 요소는 gui/icons, gui/models, gui/noiseprint, gui/pyexiftool, gui/butteraugli, gui/ssimulacra 및 선택적 gui/TruFor_main 아래에 남아 있습니다.
기여자 지향 맵은 docs/project-structure.md를 참조하세요.
새 버전이 출시되면 Git을 사용하거나 최신 소스를 다운로드하여 로컬 작업 복사본을 업데이트한 다음 Sherloq 루트 폴더에서 환경을 새로 고칩니다:
$ uv pip install --upgrade -r gui/requirements.txt
선택적 AI 의존성을 설치한 경우, 해당 의존성도 새로 고칩니다:
$ uv pip install --upgrade -r gui/requirements_ai_solutions.txt