오랜만에 열심히 살기 위해 jpg 구조와 문자가 삽입된 이미지를 복원(?)하는 코드를 python3으로 짜 봤다!

 

- jpg 구조

FF D8: jpg 파일의 시그니처로 SOI(Start Of Image) marker입니다.

FF E0: SOI marker 뒤에 바로 오는 APP0 marker입니다.

00 10: 추가 데이터의 크기입니다. 여기서는 \x00\x10이니까 16byte가 되겠군뇨 ( 00 10 부터 16 바이트 )

4A 46 49 46 00: JFIF (항상) ... 

그 뒤의 정보들은 위키피디아에서..

이렇게 구성되어있다고 합니다!

그리고는  APPn marker들이 오기 시작하는데 다 볼 필요 없이 추가 데이터 길이만 보고 코드를 작성하였씁니당

 

- 순서

SOI(Start Of Image: \xff\xd8) -> APP0 -> APPn...(몇 개가 될지 모름) -> 추가적인 frame marker segments(DQT, SOFn, DHT) ->  SOS(Start Of Scan: \xff\xda) -> EOI(End Of Image: \xff\xd9)

이런 식으로 구성되어 있습니다.

 

- 고려사항

1. "jpg header 뒤에 어느 곳에 문자열을 삽입해야 이미지가 안 깨질까"

2. "jpg header는 어디까지가 헤더일까.."

 

- 해결

1. 

처음에는 SOS를 가리키는 hex값이 나오기 전에 문자를 입력해봤는데 파일이 깨졌다..

그래서 찾아본 결과... 추가적인 frame marker segments들이 오기 전에 삽입하면 깨지지 않는 것 같았다~!

+ 추가적인 frame marker segments 중간에 써도 되는 듯?

2.

이건 아직도 모르겠다! 

 

- 코드 설명

코드는 넘 쉬워서 따로 올리지는 않을 것이다.

하지만 간략하게 설명해보자면

1. 추가적인 frame marker segments의 인덱스를 찾고

2. 그 인덱스를 기준으로 거꾸로 올라가면서 처음 만나는 ff를 찾습니다

3. 그 ff부터 +2 바이트 부분에 크기가 있을 것이고

4. 그 크기만큼 읽으면 그 다음에 제가 삽입한 문자열이 있겠죠

5. 파일 하나를 쓰기권한 줘서 열고 문자열 앞부분과 뒷부분을 write 해주면?

6. 끝!

 

 

 

써보니까 얼마 없는 내용이지만.. jpg 구조가 어떻게 구성되어 있는지 안 것 같아서 뿌듯~!

 

'Forensics' 카테고리의 다른 글

Little Endian & Big Endian  (0) 2020.04.26
[디지털포렌식과제] Mission4  (0) 2020.04.26
[디지털포렌식과제] Mission2  (0) 2020.04.19
[디지털포렌식과제] Mission1  (0) 2020.04.19
[PE structure] pe parser 만들기  (1) 2020.02.22