패킷 스니핑과 커널 레벨 후킹
1. 🔰 마비노기 모바일 딜 미터기 논란
최근 플레이 하는 게임에서 플레이어의 데미지를 실시간으로 보여주는 이른바 딜 미터기(DPS Meter)가 논쟁의 중심에 섰다.
레이드 요구사항을 맞춘 8명의 플레이어가 도전했음에도 불구하고, 딜 부족으로 실패하는 경우가 종종 발생했다. 이에 일부 유저들은 자신들의 전투 플레이 피드백과 원활한 공략을 위해 파이널 판타지 14의 ACT(Advanced Combat Tracker, 일명 해루봇)나 월드 오브 워크래프트의 Details! 같은 딜 미터기를 제작하여 배포했다.
딜 미터기의 찬반 논란이나 이점, 부작용 등은 이 글에서 다루지 않고, 어떻게 이런 도구들이 게임 내부 데이터를 실시간으로 파악하는지에 대해 알아보도록 하겠다.
대표적으로는 패킷 스니핑과 커널 레벨 후킹이 있으며, 목적에 따라 다양한 분석 기법이 사용된다.
2. 📡패킷 스니핑
2-1. 패킷 스니핑이란?
패킷(packet)은 pack과 bucket의 합성어로, 네트워크를 통해 전송하기 쉽도록 자른 데이터의 전송 단위이고,
스니핑(Sniffing) 은 개가 킁킁대면서 냄새를 맡으며 무언가를 찾으러 돌아다니는 행위를 말한다.
패킷 스니핑(Packet Sniffing)은 네트워크를 통해 전달되는 데이터를 실시간으로 감시하는 기술이다.
쉽게 말해 중간에서 남의 우편물을 몰래 확인하는 것과 같다.
2-2. 주요 도구
WireShark
네트워크 패킷 감시용으로 가장 널리 알려진 프로그램이다.
무료로 사용 가능하고, GUI를 제공하여 쉽게 사용할 수 있으며, 윈도우나 리눅스 외 다양한 OS에서 사용 가능하다.
tcpdump
커맨드 라인에서 실행하는 패킷 스니핑 소프트웨어다.
대부분의 리눅스/유닉스 계열 운영체제에서 동작하며 와이어샤크보다 가볍다.
패킷 캡처와 저장에 중점을 두며, 필터링 기능을 지원하지만 패킷을 직접 디코딩하거나 변환해야 한다.
Scapy
파이썬에서 제공하는 네트워크 패킷 전송, 분석 및 스니핑 기능을 지원하는 라이브러리다.
패킷을 위조하거나 해석할 수 있으며, 캡처하고 요청하는 등의 다양한 작업을 수행할 수 있다.
2-3. 활용 예시
- 네트워크 성능 최적화
- 서버-클라이언트간의 통신 패턴 분석
- 치팅 탐지 시스템 개발
- 네트워크 보안 모니터링
- 성능 병목지점 파악
- 프로토콜 분석 및 디버깅 등
2-4. 한계점
패킷 스니핑의 주요 한계점은 다음과 같다:
- 암호화 문제: HTTPS, TLS 등으로 암호화된 데이터는 내용 확인이 불가능하다. 게임사에서는 중요한 데이터를 대부분 암호화하여 전송한다.
- 네트워크 의존성: 패킷이 전송되어야만 확인이 가능하므로 게임 내부에서만 처리되는 로컬 데이터는 알 수 없다.
- 성능 이슈: 대용량 트래픽 환경에서는 수많은 패킷을 분석해야 하므로 성능이 떨어진다.
3. 🖥커널 레벨 후킹 + 메모리 매핑
3-1. 커널 후킹이란?
커널(Kernel) 이란 운영체제의 핵심 부분으로 하드웨어와 소프트웨어 사이에서 인터페이스 역할을 한다. 두 계층 사이에서 모든 요청을 관리하고 처리한다.
후킹(Hooking) 이란 특정 함수나 이벤트의 동작을 가로채고, 그 동작을 수정하거나 다른 기능을 수행하도록 만드는 기술이다.
커널 후킹은 OS 커널에 접근해 게임 클라이언트 내부 메모리를 조작하거나 후킹하는 기술로,
게임이 운영체제에게 메모리를 읽거나 파일을 쓸 때 이 요청을 중간에서 가로채서 정보를 얻는 방식이다.
3-2. 메모리 매핑이란?
메모리 매핑은 다른 프로그램의 메모리 영역에 직접 접근하는 기술이다.
각 프로그램마다 RAM이라는 자신만의 작업 영역을 가지고 있는데, 이를 직접 들여다보는 것이다.
3-3. 주요 툴 및 기술
일반적으로 C/C++ 언어를 사용하여 Microsoft Detours 라이브러리를 통해 윈도우 API를 후킹하는 방법이 많이 사용된다.
CheatEngine
가장 유명한 메모리/헥스 에디터 프로그램 및 디버거다.
윈도우 환경에서 메모리 스캐너 및 디버거 역할을 하는 프로그램으로, 메모리를 직접 수정해서 다양한 요소를 확인하고 수정할 수 있다.
이외에도 텍스트를 후킹하여 번역해주는 도구들도 후커(Hooker)라고 불린다.
3-4. 후킹 방식
다양한 후킹 방식이 존재한다:
- IAT(Import Address Table) 수정
- 프로세스가 외부 라이브러리의 API를 호출할 때 IAT라는 테이블을 참조하는데, 이를 수정하여 타겟 함수의 주소를 후킹 함수의 주소로 바꾸는 방법
- 후킹 방식 중에서는 쉬운 방법이나, IAT에 없는 API는 후킹할 수 없다
- EAT(Export Address Table) 수정
- DLL이 외부에 제공하는 함수들의 주소를 저장한 테이블인 EAT 테이블을 수정하는 방식
- IAT와 유사하게 외부에서 호출되는 함수의 동작을 수정함
- Code Patch
- 직접 API의 코드를 패치하여 후킹 함수로 이동하도록 수정하는 방식
- 가장 강력한 방식이지만, 코드 자체를 수정하므로 어셈블리어를 사용해야 하며 난이도가 높고 CPU 아키텍처나 운영체제에 따라 동작이 달라질 수도 있음
게임 프로세스를 후킹한다면 아래와 같이 동작한다:
1
2
3
4
5
6
7
8
9
10
11
12
13
게임 프로세스
↓ (시스템 호출)
커널 레벨 후킹 모듈 ← 여기서 데이터 가로챔
↓
운영체제 커널
↓
하드웨어
1. 게임이 메모리나 파일에 접근 요청
2. 후킹 모듈이 이 요청을 가로챔
3. 필요 데이터를 추출하고 분석
4. 원래 요청을 운영체제에 전달
5. 결과를 다시 게임에게 반환
3-5. 활용 예시
- 게임 데이터 분석 : 메모리 매핑을 통해 게임 내 표기되지 않은 데이터 참조
- 보안 연구 : 악성 행위를 감시하거나, 메모리 변조를 탐지
- 성능 최적화 : 메모리 사용량 프로파일링 및 병목 지점 확인
3-6. 한계점
커널 후킹은 매우 강력한 기법이지만 그에 따른 위험성도 크다.
- 시스템 안정성: 메모리와 OS를 직접 건드리므로 시스템 크래시나 메모리 손상이 일어날 수 있다.
- 탐지 위험: 대부분의 안티치트 프로그램들은 커널 후킹 및 메모리 매핑 시도를 탐지한다.
- 기술적 복잡성: 구현과 유지보수가 매우 어렵다.
4. 패킷 스니핑 vs 커널 후킹
항목 | 패킷 스니핑 | 커널 레벨 후킹 |
---|---|---|
기술적 난이도 | ⭐⭐☆☆☆ | ⭐⭐⭐⭐⭐ |
위험성 | ⭐⭐☆☆☆ | ⭐⭐⭐⭐⭐ |
데이터 접근 범위 | 네트워크 통신만 | 모든 메모리 데이터 |
실시간 성능 | 보통 | 우수 |
암호화 대응 | 제한적 | 우수 |
탐지 가능성 | 낮음 | 높음 |
개발 시간 | 짧음 | 매우 김 |
유지보수 | 쉬움 | 매우 어려움 |
패킷 스니핑을 선택하는 경우:
- 네트워크 성능 분석이 주 목적
- 안정성이 최우선
- 빠른 개발과 배포가 필요할 때
커널 레벨 후킹을 선택하는 경우:
- 게임 내부 데이터에 직접 접근 필요
- 실시간 고성능 처리 요구
- 암호화된 데이터 분석 필요할 때
5. ⚠️주의사항
당연하게도 대부분의 온라인 게임은 이용약관에서 클라이언트 분석을 금지하고 있다
위반 시 계정 정지 혹은 영구 밴을 당할 수도 있고, 상업적 이용시 법적으로 고소당할 수 있다
또한, 리버스 엔지니어링은 지적 저작권 침해 가능성이 있으므로, 분석 결과의 공개나 배포는 신중해야한다.
특히 게임사는 숨겨진 수치로 게임의 밸런스를 잡는 경우가 많으므로 딜 미터기 공개를 매우 꺼린다.
유료 재화의 가치 하락으로 연결될 수 있기 때문이다.
6. 💡세줄 요약
- 패킷 스니핑은 비교적 안전하고 쉬우나, 암호화 및 로컬 데이터 접근에 한계가 있다.
- 커널 후킹은 강력한 기술이지만, 높은 난이도와 시스템 위험이 따른다.
- 두 방식 모두 게임 약관 위반 및 법적 문제 소지가 있다.