"모닥불 정령이 언제 방문했는지 알 수 있는 방법이 있을까?"
2011년에 오픈한, 유용한 마비노기 데이터를 제공해오던 사이트 싴갤러스가 지금은 트럭 시위의 여파로 운영이 중단되었다고 한다. (1차 충격)
가만 생각해보니 온라인게임 채팅 확성기(사자후) 기능을 했던 뿔피리는 채팅 로그에 밀려 올라가 순식간에 시야에서 사라지기 때문에
싴갤러스의 '뿔피리러'는 응당히 있어야 할 기능이긴 했다. 싴갤러스가 문을 닫은 지금 사람들이 굉장히 망연자실 ; _;하고 있는 듯 했고..
"싴갤러스는 어떻게 인게임 내 정보(채팅, 뿔피리 로그)를 수집하는가?" 정말 궁금하긴 했었다.
아주 단순히 추측컨데 마비노기 컨텐츠 데이터 서버에 접속, 서버 자체에 저장된 데이터를 파싱할거라 생각했다.
별도의 API를 제공하지 않는다 해도 노가다의 영역이니까. '그렇게 하지 않을까~~ 하지만 나는 안 할거야~' 라고 유야무야 넘어갔던 탐구심이 이제 필요에 의해 발동되기 시작했다 ㅋ_ㅋ 드릉드릉.
일단 마비노기의 데이터 서버에 접속해서 정보를 받아낸다는 추측은 틀렸다. 왜냐하면 넥슨은 17년도부터 컨텐츠 서버의 접근을 제한한 이력이 있었고
당시부터 마비노기 서버로의 Direct Connection을 약관 위법으로 명시했다. 싴갤 역시 당시에 특별조 관리 툴의 진척도를 자동으로 반영하는 시스템을
수동 체크로 전환시키기도 했었다. 어쨌거나 저쨌거나, 지금 사용할 수 없는 방법임엔 명확하다.
호기심에 좀 찾아보기로 하던 와중 마탐에서 흥미로운 댓글을 하나 발견했다.
실시간 패킷 데이터 캡쳐. 매우 현실성있는, '아 정말 그럴 수 있겠는데?' 싶은 방법이었다.
어쨌든 TCP통신을 하고 있다면 패킷데이터는 수집이 가능할테고, 시간정보와 복호화 키만 있다면 노가다긴 하겠지만 얼마든지 가능할테니까.
모니터링용의 캐릭터를 상시 로그인 시켜놓아야한다는 제한사항..이 있긴 했는데
'마비노기 서버가 열리고 얼마간은 로그수집이 안되더라'
'싴갤러스의 컴퓨터는 24시간 돌아간다'
'만약 로그수집이 안된다면 관리자에게 문의를 해야한다'
주변 친구에게서 이런 말들도 들었으니 이건 합리적 의심이 가능하다. 정말 놀랍게도 근 10년간 싴갤러스는, 혼자든 아니든 이 '모니터링 시스템'을 수동으로 운영해왔단 소리다. 이 말이 맞다면 정말 새삼 대단한..
그래 어쨌거나 저쨌거나, 패킷 데이터 수집이라는 단서를 찾았으니 한번 실마리를 잡아보자.
일단 긴가민가한 고민을 해결하기 위해 패킷수집용 오픈소스를 사용했다. 더 윗단 프론트엔드에 맞는 SW로 Wireshark를 선택.
Wire Shark...피 한방울만 떨어져도 귀신같이 냄새를 맡으며 패킷을 감시한다는 컨셉. 이름 잘 지었다 싶음
사실 Wireshark는 장난감으로 많이 썼다. 아니, 제공되는 기능에 비하면 장난감이라 이름붙일만한건 아니지만, 초보 해커들이
'네이버 검색창에 무얼 쳤나' 이런 장난을 할때 자주 쓰는 뭐 그런.
패킷 수집할 이더넷을 선택해준다.
Wireshark는 Capture Filter와 Display Filter를 제공하는데 전자는 수집할 데이터의 필터, 후자는 그 데이터가 보여지는 영역을 취사선택해 필터링 하는 구조다.
나는 어느 서버에서 어떻게 들어오는 패킷이 마비노기 클라이언트의 것인지 모르므로, 캡쳐필터는 적용하지 않고 그대로 패킷수집을 시작했다.
엄청난 양의 패킷데이터가 전부 수집이 되고 있다. 마비노기 서버를 찾기위해 한땀한땀 데이터를 꺼내 뒤저보기 시작하다가......
찾았다! Ping과 Pong이 오는 데이터, 그리고 외부 서버 ip를 기준으로 탐색을 하니 금방 찾을 수 있었다.
마비노기에서 L을 눌러 나오는 메세지 로그에서 출력되는 모든 메세지의 패킷 RAW DATA가 출력이 되었다.
이어서 뿔피리, 파티게시챗, 개인상점 등의 로그도 쉽게 수집할 수 있었다. 그리고 무엇보다 놀랐던 점은 패킷 데이터에 암호화가 되어있지 않았다!!!
단순히 HEX값을 한글로 바꾸는게 일이긴 하겠지만, 어찌됐든 싴갤러스의 '뿔피리러' '던배른 와쳐' '현상범' 등등의 기능구현이 가능하다고 볼 수 있겠다.
https://www.online-toolz.com/langs/ko/tool-ko-text-hex-convertor.html
패킷 내용과 인게임 채팅이 동일한지도 확인. HEX DATA는 유니코드를 통한 변환이 필요하니, 당장엔 사이트를 이용한다.
이제 방법이 뚜렷해졌다. 패킷을 계속 감시하며 특정 DATA 단에서 '모닥불'이라는 키워드를 찾으면, 언제 모닥불 정령히 방문했는지 알 수 있을 것이다.
이 부분은 wireshark의 filter기능을 이용하면 손쉽게 가능할 것임.
대신.. 이걸 Front-End단의 SW로 만들기엔 좀 무리가 있어보인다. 일단 나는 패킷분석 오픈소스인 PCAP등의 라이브러리를 만저본 경험이 없다.
단순히 앞단의 데이터가공을 위해 필수적으로 필요할 터인데, 지금 나는 한낱 다른 소프트웨어에 의존을 하고 있을 뿐이니.. ; w; 이 데이터를 전송/가공하는게 더 어렵다는 판단.
ToDo List는 정해졌다. 어떻게 Filter를 먹여 키워드를 감시할것인지, 채팅 로그와 사념파, 전광판 등의 송신단 패키지가 다른지 여부를 알아보는게 숙제.
만약 진전이 있으면 또 글을 써보도록 하겠다 :>
'Works > Programming' 카테고리의 다른 글
Unity + Firebase Google 로그인 구현하기 (4) | 2021.08.11 |
---|---|
Unity :: UniRx 라이브러리 사용기 (0) | 2021.03.30 |
Jarray.Clear() 메소드의 참조스택 (0) | 2021.02.17 |
Dobby is Free! (출퇴근 타이머) v3.1 (1) | 2020.08.05 |
Unity : AdditiveSceneLoad로 생성된 씬 스크립트에서 OnDisable() 호출이 안 되는 문제. (0) | 2020.02.06 |