[게임 서버] 게임 해킹

이정석·2023년 9월 19일

게임서버

목록 보기
13/14

게임 해킹

게임을 하다보면 흔히 '핵'이라고 말하는 게임 해킹 프로그램을 사용하는 유저들을 볼 수 있다. FPS의 월핵, RPG의 쿨타임 핵, 레이싱 게임의 스피드 핵, 어렸을 때 리그오브레전드의 '무한 몰락 핵'등이 게임 해킹의 예시 중 하나이다.

보통 게임 해킹은 게임과 로직을 처리하는 서버의 취약점을 이용해 의도적으로 비정상적인 기능을 작동 시킨다. 해커에게 이로운 기능(ex. 무한 게임재화)으로 사용할 수 있지만 다른 사용자에게 해로운 기능(ex. 강제 PK)으로 사용하기도 한다.

1. 메모리 조작

게임 해킹 방법으로 '메모리 조작'을 할 수 있다. 기본적으로 클라이언트에는 현재 플레이 중인 상황에 대한 데이터가 담겨있다. 바꾸고자 하는 데이터가 들어있는 메모리주소를 알고 있다면 여기의 데이터를 변경해 인게임 내의 값을 바꿀 수 있다.

메모리 조작에 사용되는 프로그램이 따로 존재한다. 어릴때 유행했던 '치트 오매틱'이나 '치트 엔진'을 이용해 웹 게임인 '동물농장'의 데이터를 조작해 매우 많은 재화를 벌었던 기억이 있는데 이게 바로 메모리 조작 프로그램을 이용한 게임 해킹의 예시라고 할 수 있다.

특정 데이터의 메모리주소를 찾는 방법은 간단하다. 프로그램에 현재 값을 입력하면 프로그램은 게임 내의 모든 데이터를 확인하면서 입력한 값과 같은 데이터를 확인한다. 그 후 인게임 값을 변화시키고 변화된 값을 프로그램에 입력하면 프로그램은 데이터를 점점 소거할 수 있다. 결국 하나의 주소만 남으면 해당 주소가 특정 데이터가 저장되어 있는 주소이다.

이를 방지하지 위해서 게임 개발자는 다음과 같은 방법으로 데이터의 위치를 숨길 수 있다.

  1. 데이터 Offset 적용
  2. XOR같은 비트연산을 이용한 데이터 변조

위 내용을 적용하면 프로그램에 15같은 인게임 수치를 입력해도 실제 메모리에는 전혀 다른 값이 들어가 있어 메모리주소를 찾기 힘들다. 하지만 특정 값을 기준으로 찾는것이 아닌 초기 모든 데이터를 가져오고 '값이 변한 데이터'를 바탕으로 필터링 한다면 언제가는 메모리주소를 찾을 수 있다.

2. 패킷 조작

게임서버를 구현할 때 클라이언트-서버 사이에 패킷을 설계해 이동, 공격같은 기능을 구현하였는데 패킷을 통해 전달된 값을 통해 게임 해킹을 시도할 수 있다.

예를들어 두 플레이어 간의 게임재화거래 기능을 구현한다 할 때 해커가 값을 음수로 보내고 서버가 해커가 보낸 값을 그대로 처리한다면 '돈을 거래하는 기능'을 악용해 '돈을 빼앗는 기능'으로 악용할 수 있다.

게임서버 포스팅을 할 때 가끔 적었던 내용이지만 서버에서 게임해킹을 막기위해서 가장 중요한 것은 '클라이언트를 항상 의심하는 것'이다. 클라이언트가 값만 변경하는 것이 아니라 서버 장애를 발생시키기 위해 엉뚱한 데이터 형식이나 말도안되는 값을 보낼 수도 있다.

3. 리버싱

이미 컴파일되고 실행할 수 있는 파일 분석해 소프트웨어가 어떻게 작동되는 알아내는 과정을 '리버스 엔지니어링'이라 한다. 위에서 메모리 조작을 방지하는 방법으로 Offset과 변조를 언급했는데 이것이 소용없는 이유중 하나가 리버싱이다. 결국 클라이언트 코드는 사용자에게 공개된 것과 다름 없고 Offset과 변조에 사용할 Convertor에 대한 내용도 프로그램 어딘가에는 저장되어 있고 리버싱을 통해 찾을 수 있다.

즉, 클라이언트의 코드를 복잡하게 하는 것은 해킹하는데 귀찮게 할 수는 있어도 100% 막지는 못한다.


서버 구조

서버는 주로 클라이언트가 보낸 정보가 유효한 것인지에 대한 실제 연산 및 검증을 담당한다. 크게 구조를 Client-Server와 P2P 구조로 나눌 수 있다.

1. Client-Server

서버가 심판역할을 하며 클라이언트가 거짓말을 해도 서버가 잡아낼 수 있다. 클라이언트에서 검증을 요청하고 서버가 응답하는 구조라 특정 행동을하는데 시간이 걸릴 수 있고 보안적으로는 안전하다는 장점이 있다.

클라이언트의 수가 증가함에 따라 서버에 가해지는 부담이 커질 수 있기 때문에 서버 설계 초기에 확장이 가능한 구조를 고려해야 한다.

2. P2P

한 Peer가 방장을 담당하고 다른 Peer가 방장에 붙는 형식이며 한 사람이 거짓말을 해도 다른 사람을 통해 검증을 할 수 있다. Client-Server보다 레이턴시가 낮고 한 Peer가 문제가 생겨도 네트워크 전체에 문제가 발생하지는 않는다. 하지만 과반수가 거짓말을 한다는 잡기가 어렵다는 단점이 있다.

profile
게임 개발자가 되고 싶은 한 소?년

1개의 댓글

comment-user-thumbnail
2024년 3월 21일

안녕하세요 여쭤볼게있는데 010-3948-9826이나 카톡 thegood12로 연락한통부탁드리겠습니당 ㅠㅠ

답글 달기