심심해서 혼자 놀다가,,,
윈도우에서 지원하는 파일숨김이 아니라 조금 더 다른사람이 모르는 공간에 내 자료를 숨기고 싶었다.
모든 파일은 결국에 바이너리로 이뤄진다.
또한, 각 파일들은 고유한 포맷을 가지고 있고 이 것을 파일 시그니처(파일 매직 넘버)라고 한다.
파일의 시작부분에 존재하는 파일 포맷도 있고, 시작부분과 끝부분 둘다 존재하는 파일도 있다.
시작 부분에 존재하는 시그니처는 헤더시그니처, 끝에 존재하는 시그니처는 푸터시그니처라고 한다.
어떠한 그림 파일의 뒷 부분에 내가 숨기고자 하는 파일을 담는다면 다른 사람들은 의심없이는 찾을 수 없을 것이다.
고양이 사진 파일뒤에 example이라는 폴더의 압축파일을 숨겨볼 것이다.
명령 프롬프트(CMD)를 실행하고 고양이 파일과 압축파일을 합친 '고양이사진입니다.jpg' 파일을 만든다.
이때, /b 옵션으로 그림파일과 압축파일의 바이너리를 합친다.
엔터를 눌러보면
이렇게 같은 고양이 사진이 2개가 된다.
더블클릭을 통해 확인해도 두 그림파일 둘다 다른점 없이 고양이 사진이다.
(물론 용량은 숨기는 파일의 용량에 따라 증가하게 된다.)
파일을 오른쪽 버튼으로 클릭한 후, 연결 프로그램으로 zip파일을 지원하는 소프트웨어로 열어보자.
다음 사진과 같이 열리게 되고, 압축해제 또는 더블클릭으로 파일의 내용을 볼 수 있다.
방금까지는 copy라는 cmd 명령어를 통해 간단히 해봤지만,
이제 HxD 에디터라는 툴을 이용해서 뭐랄까.. 파일의 16진수 값을 보면서 해보자.
시그니처라는 것도 대충 어떤 느낌인지 알 수 있을 것이다.
HxD 다운로드 : mh-nexus.de/en/hxd/
고양이.jpg 를 에디터로 열어보면 처음 16진수들이 'FF D8 FF E0'이라고 나온다.
이 것이 바로 jpg파일의 헤더시그니처이다.
또한 파일의 끝에 있는 푸터시그니처도 확인해보자.
'FF D9'가 jpg파일의 푸터시그니처가 된다.
다른 jpg파일을 열어서 확인해보면 시그니처가 같은 것을 볼 수 있다.
이런 시그니처는 처음부터 파일확장자마다 정해져 있으므로
파일 확장자명의 시그니처를 구글링하면 알 수 있다.
압축파일(ZIP)도 시그니처를 확인하고 HxD 에디터로 열어보자.
이제 명령 프롬프트로 만든 '고양이사진입니다.jpg' 파일을 열어보자.
'고양이.jpg' 파일의 마지막 Offset(196E0)을 찾아가보면
jpg의 푸터 시그니처 'FF D9', 바로 뒤에 zip의 헤더 시그니처 '50 4B 03 04'를 확인 할 수 있다.
* HxD 에디터 왼쪽 하단 오프셋을 더블클릭하면 원하는 오프셋으로 이동할 수 있다.
즉, 겉으로 보기엔 이 파일은 앞에 존재하는 고양이 사진의 JPG 파일이겠지만,
그 뒤에는 어떠한 자료가 들어있는 ZIP파일이라는 것을 우리는 안다.
이로써, 어떤 사용자가 이 고양이 파일을 의심하고 이것 저것 시도해보지 않는다면
아마도 이 파일은 나만 알고있지 않을까?
반대로 어떠한 폴더에 있는 모든 파일들을 지정하고 바이너리를 읽어들인 후,
여러가지 파일 시그니처와 비교하여 숨겨진 모든 파일을 찾을 수 있을 것 같다.
나중에 또 심심해지면 해보는 걸로...
↓
[Forensic] 파이썬(Python)으로 파일 속 숨겨진 파일 찾기 (스테가노그래피)