딜 미터기는 어떻게 만들까
인벤의 한 게시글을 보고 작성한 글입니다. 미터기는 어떻게 작동하며 막을 수 있나?
딜 미터기란?
딜 미터기는 MMORPG와 같은 게임에서 플레이어가 전투 중에 가한 피해량(DPS: Damage per Second)을 측정하는 도구이다. 이를 통해 플레이어는 자신의 성능을 분석하고, 더 효율적인 플레이를 추구할 수 있다. 대표적인 예로, 월드 오브 워크래프트(WoW)에서는 딜 미터기가 널리 사용되고 있으며, 플레이어들이 실시간으로 자신의 딜량을 확인하고, 파티원들과 비교하여 전투 전략을 조정하는 데 활용된다. WoW는 애드온(addon) 기능을 지원하기 때문에, 유저들은 쉽게 딜 미터기를 설치하고 사용할 수 있다.
WOW의 딜미터기
로스트 아크에서의 딜 미터기
반면, 로스트 아크에서는 공식적으로 딜 미터기를 사용할 수 없다. 스마일게이트는 딜 미터기와 같은 외부 프로그램을 금지하고 있으며, 이러한 프로그램을 사용한 내역이 발견될 경우 해당 사용자를 대상으로 영구 정지 등 강력한 제재 조치를 한다고 밝힘. 딜 미터기로 인해 분쟁이 발생할 소지가 많기 때문이 아닐까 싶다.
그럼에도 불구하고, 로스트 아크에서도 유저들이 외부 프로그램을 사용하여 딜 미터기를 만들고 있다. 예를 들어, GitHub 프로젝트인 로아 딜 미터기는 로스트 아크의 전투 데이터를 분석해 딜량을 시각화하는 프로그램이다.
딜 미터기는 어떻게 만들까
딜 미터기를 만드는 과정은 게임 내 데이터를 실시간으로 수집하고 분석하는 것을 목표로 한다. 특히, 딜 미터기는 플레이어가 가한 피해량과 그 타이밍을 기록하는 데 초점을 맞추며, 이를 실시간으로 시각화하여 유저가 자신의 성능을 모니터링할 수 있도록 한다. 하지만 로스트 아크처럼 공식적으로 딜 미터기를 지원하지 않는 게임에서는 이 작업이 복잡하고 민감한 기술적 과정을 수반한다.
네트워크 패킷 분석
딜 미터기의 핵심 기술은 네트워크 패킷을 분석하는 것이다. 게임 서버와 클라이언트 간에 주고받는 데이터를 가로채서, 그 안에 포함된 전투 정보를 추출하는 방식으로 작동한다. 이 과정에서 패킷 스니핑(packet sniffing) 이라는 기술이 사용된다. 패킷 스니핑은 네트워크 트래픽을 모니터링하고 그 안에 포함된 데이터를 실시간으로 분석하는 기술이다.
예를 들어, 플레이어가 공격을 할 때마다 게임 서버는 피해량 데이터를 클라이언트로 전송한다. 이 데이터를 딜 미터기가 가로채서 분석하여 실시간으로 화면에 표시하는 것이다. 이를 통해 플레이어는 자신의 DPS를 파악하고, 전투가 끝난 후에는 전체 전투 기록을 분석할 수 있다.
당장 해보자
WireShark 는 네트워크 인터페이스를 통해 전송되는 패킷을 캡처하고, 이를 분석할 수 있는 기능을 제공한다. 이를 통해 로스트 아크의 패킷을 뜯어보자
- 로스트 아크를 실행 후 작업관리자를 열어 로스트아크의
processId
를 알아낸다. - cmd 에서
netstat -ano
를 사용해 해당processId
와 통신중인 ip 주소와 포트번호를 알아낸다. - wireshark를 실행시켜 패킷을 캡쳐한다.
- 해당 ip와 port로 필터를 걸어 로스트 아크와 통신중인 네트워크 패킷을 볼 수 있다.
Packet Details
- Frame
- OSI 2계층(데이터 링크 계층) 에서 사용되는 데이터 전송 단위
- 전송을 위해 데이터를 물리적 네트워크로 전달
- Ethernet
- IP (Internet Protocol)
- OSI 3계층(네트워크 계층)에서 작동
- 데이터를 출발지에서 목적지 IP 주소로 라우팅
- 네트워크 간 데이터 전송을 관리
- Version: IP 버전 (IPv4/IPv6) (4비트)
- IHL: 헤더 길이 (4비트)
- TOS: 서비스 유형 (8비트)
- Total Length: 패킷 전체 길이 (16비트)
- Source Address: 출발지 IP 주소 (32비트)
- Destination Address: 목적지 IP 주소 (32비트)
- TTL: 패킷의 생명 주기 (8비트)
- Protocol: 상위 계층 프로토콜 (8비트)
- Header Checksum: 오류 검출을 위한 체크섬 (16비트)
- TCP (Transmission Control Protocol):
- OSI 4계층(전송 계층)에서 작동
- 신뢰성 있는 데이터 전송을 보장
- 시퀀스 번호, 확인 응답(ACK)으로 패킷 손실 방지 및 재전송 관리
- Source Port: 송신 측 포트 번호 (16비트)
- Destination Port: 수신 측 포트 번호 (16비트)
- Sequence Number: 데이터 전송 순서를 위한 시퀀스 번호 (32비트)
- Acknowledgment Number: 수신된 데이터에 대한 확인 응답 번호 (32비트)
- Data Offset: TCP 헤더 길이 (4비트)
- Flags: 제어 플래그 (9비트)
- Window Size: 흐름 제어를 위한 창 크기 (16비트)
- Checksum: TCP 오류 검출을 위한 체크섬 (16비트)
딜 미터기를 만들기 위한 정보는 TCP의 Payload에 담겨있다.
이 Payload를 분석하면 로스트 아크 딜 미터기를 제작할 수 있다. 그런데 어떻게 저걸 분석해?
이미 많은 개발자들이 이를 분석하여 딜 미터기를 제작한 걸로 보아. 로아 딜 미터기 github 코드를 분석하면 딜 미터기를 직접 만들 수 있지 않을까?