오랜만에 열심히 살기 위해 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 |