HEX editor를 활용하여 2개의 PNG 사진 파일을 직접 분석해본다.

"사진1"을 HEX editor로 열은 뒤에 “CTRL+F” 버튼을 눌러 찾기 창을 열은 뒤에 PNG 파일의 헤더 시그니처 값을 입력하여 찾는다.

'사진1_1'의 드래그한 부분이 헤더 시그니처 데이터들이다.
우측의 ‘Decoded text’를 확인 해보면 그 이후부터 순서대로 IHDR, PLTE, IDAT등의 청크들이 있는 것을 볼 수 있다.
또는 각 청크들의 이름을 찾기 창을 이용하여 검색해보는 것으로도 알 수 있다.
PNG 파일의 필수 청크인 IHDR과 IDAT청크는 화면상에 보이지만 IEND청크는 보이지 않기에 푸터 부분인 IEND 청크를 검색해보면

'사진1_2'처럼 파일의 아랫 부분에 위치하여 있는 것을 알 수 있다.

처음 드래그 : Header Signature
노란색 : IHDR Chunk
분홍색 : PLTE Chunk
하늘색 : IDAT Chunk
마지막 부분 드래그: IEND Chunk

'사진2'의 PNG 파일의 경우도 위와 같이 분석해보면

빨간색 : Header Signature
노란색 : IHDR Chunk
초록색 : sRGB Chunk
파란색 : gAMA Chunk
연두색 : pHYs Chunk
하늘색: 파일의 대부분인 IDAT Chunk
드래그 : IEND Chunk
여기서 보조 청크들로 sRGB 청크, gAMA 청크, pHYs 청크들이 있는데, sRGB 청크와 gAMA 청크는 컬러 스페이스 정보를 담고 있고, pHYs 청크는 기타 정보들을 담고 있다.
추가적으로 “ex.png” 파일을 복사한 뒤에 각각 “ex1_2.png”, “ex1_3.png”로 저장하고

'사진3'과 같이 “ex1_2”와 같이 .png의 확장자를 없애거나 “ex1_3.jpg”과 같이 .jpg로 확장자를 바꾸어 보아도

'사진4'와 같이 파일 시그니처 값을 포함한 내부 바이너리 데이터들은 바뀌지 않는다.
분석하는 과정에서 저장되는.bak 확장자는 컴퓨터로 작업중에 생길 수 있는 전원 차단과 같은 갑자기 컴퓨터가 꺼질 경우를 대비하여 백업 및 복구를 위해 안전한 저장 위치에 저장된 다른 파일의 복제본으로 자동으로 만들어지는 백업 파일이다.
위에서 가장 기초적인 PNG 파일의 Chunk들을 각각 구분하여 보았다. 이러한 PNG 파일의 구조를 알고있으면 IEND Chunk뒤에 다른 데이터가 있어도 파일의 데이터가 정상적으로 출력될 수 있으나 IEND Chunk는 출력하고자 하는 파일 데이터의 끝에 있어야 하며 이후의 데이터들은 무시함을 이용하여 PNG format 파일 뿐만 아니라 각종 파일 데이터를 숨길 수 있다.
또한, IHDR Chunk의 CRC 값에 따른 width, height을 구하는 코드를 짜게하거나 Color Type에 따라 정해진 Bit depth 값이 와야함을 이용하는 등의 방법으로 파일을 변형시킬 수도 있으며,
마지막으로 USB 드라이브에 포맷된 PNG 파일 데이터 등을 복원 할 수도 있다. 포맷은 파일 시스템을 초기화하지만 실제 데이터를 삭제하지는 않는다. 파일은 여전히 드라이브에 남아 있을 수 있으며, HEX editor를 활용하여 복구할 수 있다. 그러나 데이터가 오랜 시간 동안 삭제되어 있거나 다른 데이터로 덮어 쓰인 경우에는 복구가 어려울 수 있다. 따라서 가능한 한 빨리 복구 작업을 수행하는 것이 좋다. 단, HEX editor로 디스크를 열기 위해서는 HEX editor를 관리자 권한으로 실행해야 한다.
'Digital_forensic > File_format' 카테고리의 다른 글
| [PNG] Python으로 CRC32 함수를 이용한 width, height 구하기 (0) | 2024.01.26 |
|---|---|
| PNG file structure (1) | 2024.01.25 |
| 파일 시그니처(File Signature) (0) | 2024.01.25 |