토렌트(Torrent) 파일을 분석해 보면 공유 대상이 되는 파일의 이름, 파일의 전체 크기, 파일의 해시값(hash value), 트래커, Piece 등에 대한 정보를 가지고 있는데, 해당 데이터 내용들은 BEncoding 방식으로 구성되어 있다.
BEncode 는 바이너리 인코딩(Binary Encoding)의 약자로, 비트 토렌트 관련 파일에서 데이터를 저장하거나 공유 네트워크 상에서 정보를 주고 받을 때 사용하는 형식이다.
BEncode 구조로 작성된 파일은 평문으로 데이터를 저장하지만 각각의 규칙적인 구조를 가지게 된다.
위의 구조를 기반으로 데이터를 관리&저장을 하는데 해당 파일이 디렉터리(Directory) 일때 아래와 같은 구조를 가지게 된다.
BEncode 구조와 관련된 구성 요소를 전부 알아 보았기 때문에 한번 실제 *.dat
파일을 Hex Viewer를 이용해서 열어서 도구를 사용했을때 보여주는 데이터와 실제 Hex 데이터를 읽고 해석한 결과 와 비교를 해보자.
예시로 간단하게 분석할 파일은 rss.dat
파일로 209 바이트를 차지하고 있다.
해당 파일을 BEncode 뷰어 도구인 BEncode Editor
를 이용해서 한번 확인해 보면 아래와 같다.
이제 한번 Hex Data를 확인해 보고 해석을 해보자.
먼저 **d
**가 나오는데 맨마지막 0xD0 위치에 e
가 있는 것을 확인해 볼 수 있다.
이 이후에 나오는 모든 데이터는 Dictionaries 로 데이터가 들어가는 것을 알 수 있다.
그 뒤에 10:.fileguard
이라는 값이 있다. 이는 Strings 유형에 [길이]:[데이터]
구조 인것을 확인해 볼 수 있다. 그렇기 때문에 .fileguard
라는 변수를 설정 한것으로 확인해 볼 수 있다. 그 뒤에는 해당 변수에 대한 데이터가 작성 되게 되는데 40:9DE53CBD58F32BCC072A6EAA8AD906AC54AF0CF4
와 같이 40글자가 쓰여져 있다.
여기 까지의 데이터를 정리해 보면 아래와 같다.
이어서 분석해 보면 6:d_feed
라는 변수 설정 값이 있고, 그 뒤에 le
라는 값이 나오는 것으로 보아 d_feed 변수가 list로 구성되어 있지만 l 과 e 의 사이에 아무런 값이 없기 때문에 해당 리스트에는 아무런 값이 없기 때문에 아래와 같이 정리를 할 수 있다.
다음을 보면 5:feeds
로 변수를 설정하고 그뒤에 l
이나오고 데이터가 나오기 때문에 feeds 의 리스트가 어디 까지인지 확인해 보면 아래와 같다.