반응형
오늘은 간단히 네트워크에서 캡쳐한 Packet에서 파일을 추출하는 방법을 간단하게 써보겠습니다.

이 글을 쓰는 이유는?
혹시라도 누군가 나에게 이런걸 물어본다면.. 대답해주지 않고 "내 블로그 봐봐" 라고 말해주기 위해서 입니다. ^^; 어느정도 스킬이 있으신 분들이야 이런 내용은 그냥 말로 간단히 해드리면 하실 수 있지만 아무것도 모르는 분들에게는 말로만해서는 어렵더라고요 ^^;

일단 네트워크에서 캡쳐한 파일이 필요합니다.
저는 SMTP를 이용한 메일을 보낼때 첨부된 파일을 추출해보겠습니다.
80포트인 HTTP 프로토콜을 이용한 방법도 BASE64 디코딩을 제외하고 똑같으니 잘 적용해보세요.


저는 이렇게 메일로 전송된 패킷을 가지고 해보았습니다. 이 글을 읽으시는 분들은 메일로 SMTP로 테스트 해보셔도 되고 HTTP를 가지고 테스트 해보셔도 상관없습니다.
이런 글을 보고 직접 따라하면서 자기 것으로 만드는 것이 중요합니다.
그럼 시작하도록 할께요.


1. 패킷 보기.
<그림 1. BASE64로 인코딩된 파일>

패킷을 보면 위와 같이 특정 파일이 있는 부분을 확인하실 수 있습니다. 이 부분(파일내용)을 찾아서 아래 <그림 2>와 같이 드레그 해주신 다음 COPY~를 해주시면 되겠습니다. <그림 1>을 잘 보면 파일이 이상하죠? 분명히 ZIP 파일인데 ZIP파일에서 보이는 특정 문자열(매직넘버)가 보이지 않습니다. 헤더부분을 보면 Content-Transfer-Encoding라는 필드값이 있는데 보면 BASE64로 인코딩 되어 있는 것을 쉽게 확인 할 수 있습니다.

<그림 2. 데이터 영역을 복사하는 그림>

이렇게 복사한 데이터를 TextEdit 툴을 이용해서 붙여넣으면 아래 <그림 3>에서 보는 것과 같이 줄바꿈(\n)이 된 모습을 확인 할 수 있습니다. 이는 해당 툴에서 지원하는 Replace 기능을 이용하여 [줄바꿈문자]->[아무것도 없는 Null문자]로 바꾸면 <그림 4>처럼 됩니다.

<그림 3. 복사한 내용을 붙여넣은 모습>


<그림 4. 줄바꿈 문자 제거>

위 <그림 4>의 좌측을 보면 1줄에 모든 내용이 붙어있는 것을 확인 할 수 있습니다.
HTTP같이 파일을 전송할때 암호화하지 않는 프로토콜들은 그냥 이 내용을 저장하면 정상 파일이 되지만 우리는 SMTP를 이용하여 전송을 해서 BASE64로 인코딩 되어 있기 때문에 이를 디코딩 해줘야 합니다.


<그림 5. Malzilla를 이용한 BASE64 Decoding>

<그림 5>를 보면 저는 Malzilla라는 툴을 이용해서 BASE64 디코딩을 한 모습입니다. Malzilla 말고도 BASE64 디코딩해주는 툴이 많습니다. 찾아보시기 바랍니다.

나중에 누구한테 배우건, 어느 회사에 가던,
"저 BASE64 디코딩하는 툴(사이트) 어디있을까요?"
라고 묻지 마세요.

상당한 실례라고 생각합니다.
그정도도 찾아보지 않고 이야기 하는 것은 결과적으로
1. 이 사람은 이 일에 대해 관심이 없다.
2. 이 사람은 이걸 가르쳐줘도 몇일 이내에 까먹는다.

라는 인식이 생기게 됩니다. 관심이 있다면 직접 찾아보세요.

<그림 6. 파일 만들기>


이렇게 Decoding된 내용을 HexEdit 툴을 이용해서 붙여넣기 한 다음 파일로 저장하면 됩니다.
그러면 파일 복구가 완료 됩니다.

실제로 이렇게 만들어진 파일이 정상적으로 복구가 되었는지 실행해보면 알 수 있겠죠? ^^


ps. 이 글에서 한가지 오류가 있습니다. 이 글에서 설명한 방법대로 하면 안되는 경우가 발생하죠. 그런 경우는 어떤 경우 일까요? ^^



반응형

+ Recent posts