정보열람실

스킬, 데미지 변조가 불가능한 이유

스킬, 데미지 변조가 불가능한 이유

★ 스킬, 데미지, HP는 서버에서 직접 관리하기 때문에 핵 프로그램으로 조작할 수 없습니다.

★ 공격 속도와 이동 속도는 조작이 가능하지만, 시스템에는 조작을 감지하는 기능이 있습니다. 조작이 감지되면 ‘불법 프로그램 사용이 감지되어 강제 종료되었습니다.’ 라는 알림창이 출력되면서 게임이 강제로 종료됩니다. 강제 종료 횟수가 누적되면 계정도 차단될 수 있습니다.


S.U.N은 오랜 해외 서비스를 통해 파악된 핵 프로그램의 기능을 지속적으로 분석하고 대응책을 마련해 왔습니다. 이에 따라 스킬, 데미지, HP 등을 조작할 수 없도록 서버에서 직접 관리하는 방식으로 시스템 구조를 완전히 개편하였습니다.


그러나 일부 이용자는 여전히 해당 내용을 불신하고 있어, 전체 공지를 통해 자세한 설명을 드리고자 합니다.


스킬, 데미지, HP는 서버에서 직접 관리되기 때문에 조작이 불가능하다는 것은 무슨 뜻인가요?

이를 설명하기 위해 먼저 서버와 클라이언트가 무엇인지부터 설명하겠습니다.


          도표, 텍스트, 스크린샷, 라인이(가) 표시된 사진

자동 생성된 설명

서버(Server) : 서비스를 제공하는 컴퓨터 (Service provider)

  * 웹젠 데이터 센터에 있는 컴퓨터로 유저들이 썬을 플레이할 수 있도록 모든 서비스를 제공하는 컴퓨터


클라이언트(Client) : 서비스를 사용하는 컴퓨터 (service user)

  * 썬을 플레이하는 유저들이 사용하는 컴퓨터



서버는 무슨 역할을 하나요?

  1.    1. 여러 사용자와 상호 작용
  2.    2. 클라이언트에서 해킹 당하면 안 되는 처리
  3.    3. 플레이어의 상태 보관

클라이언트에서 마우스 클릭이나 방향키를 누르는 모든 입력들은 네트워크를 통해 서버로 전달됩니다. 서버는 이를 처리하고 결과를 클라이언트에게 보내주는데, 네트워크의 지연율, 레이턴시(latency)때문에 렉이 걸리는 현상이 발생할 수 있으며 이로 인해 게임 진행에 지장이 생길 수 있습니다.


따라서 실제로는 모든 처리를 서버에서 하지 않고 쾌적한 플레이가 되도록 일부 게임 처리를 클라이언트에게 맡깁니다.


예시1)

 A라는 버서커 유저가 

  •    - 공격 데미지 +100인 양손 도끼로 
  •    - 공격 데미지 +100인 슬래시 스킬을 사용했는데
  •    - 공격 데미지 +50% 뱃지를 착용하고 있습니다.

   - 이 때 발생하는 최종 공격 데미지는 (100+100) * 1.5 = 300 이 발생합니다.


예시1)에서 대부분의 계산은 클라이언트에서 처리하고

 버서커 A가 

  •    - 슬래시 스킬을 사용했고
  •    - 최종 데미지가 300이 발생했다

는 패킷만 서버로 전송하면 서버는 이 정보를 다른 클라이언트에게 적용합니다.



핵’은 어떤 원리로 작동하나요?

핵 프로그램으로 클라이언트 정보를 조작하여 서버에 전달하고 서버는 검증없이 다른 클라이언트에게 이 정보를 전송하고 적용하는 것입니다.


예시2)

예를 들어, 슬래시 스킬 데미지를 +200으로, 뱃지의 데미지는 +100%로 조작하면 최종 데미지는 (100+200) * 2.0(100%) = 600이 됩니다.


클라이언트는 이 정보를 서버에 전송하고 서버는 검증없이 다른 사용자에게 데미지를 전송하고 적용합니다. 300 데미지여야 했던 것이 600 데미지가 되었습니다.


이제 버서커 A의 슬래시 공격을 당한 캐릭터는 실제보다 +300 데미지를 더 입게 됩니다.


이것이 핵 프로그램의 작동 방식입니다!!! 

(* 이해를 돕기 위해 예시를 든 것입니다.)



핵 프로그램은 어떻게 막나요?

중요한 정보는 모두 서버에서 검증하고 처리하면 됩니다.


예시1)의 상황에서 클라이언트에서 처리하는 정보가 많을수록 서버가 처리하는 패킷이 적어지므로 동기화도 근접하게 일치시킬 수 있고 게임을 쾌적하게 플레이할 수 있지만, 클라이언트를 조작할 수 있는 단점이 있습니다.


S.U.N은 

예시1)의 상황에서 버서커 A가 슬래시 스킬을 사용했다는 정보를 수신할 때

   - 착용하고 있는 무기 데미지가 얼마인지는 서버에 저장된 값을 가져오고

   - 슬래시 스킬의 공격 데미지가 얼마인지도 서버에 저장된 값을 가져오며

   - 착용 중인 뱃지도 사용자 정보에 저장된 로그를 확인하여 어떤 뱃지를 착용하고 있는지,  

     공격 데미지가 몇%인지 확인합니다.

이 모든 정보는 서버에 저장된 값을 가져오고 최종 데미지는 서버가 직접 계산합니다.


이렇게 서버가 직접 처리하면 핵 프로그램이 아무리 클라이언트를 조작해 슬래시 스킬로 인한 공격 데미지가 200이 발생했고, 뱃지의 공격 데미지가 100%라고 패킷을 보내더라도, 서버에 저장된 값을 직접 불러와 계산하기 때문에 조작이 불가능합니다.


S.U.N 서버에서 직접 처리하는 대표적인 항목은 스킬, 데미지, HP, SD 수치와 관련된 모든 것들입니다. 그러므로 이 부분은 어떠한 핵 프로그램이 있어도 조작이 어느 정도까지 가능한지를 논하는 수준이 아니라, 조작 자체가 불가능하다는 점을 알려 드립니다.



그렇다면 FPS 같은 게임에서는 왜 이 방법을 사용하지 않나요?

게임의 장르가 다르기 때문입니다.


서두에서 클라이언트가 처리하는 정보가 많고, 서버가 처리하는 정보가 적다면 게임을 쾌적하게 플레이할 수 있다고 하였습니다.


FPS 같은 장르의 게임은 서버와 클라이언트 간의 동기화가 핵심이기 때문에 게임이 렉 없이 쾌적하게 플레이할 수 있어야 합니다.


FPS 게임이 벽 뒤에서 머리를 살짝 내미는 순간에 헤드샷을 날릴 수 없다면 누구도 그 게임을 플레이하지 않을 것입니다.  그래서 이런 장르의 게임에서는 서버와 클라이언트 간의 동기화를 극대화하기 위해 다양한 서버 기술이 사용됩니다.


하지만 게임 서버가 모든 정보를 직접 처리하는 방식이 아니기 때문에 언제든지 핵 프로그램이 개입해 조작할 수 있습니다.  그래서 핵 프로그램이 나오면 개발사는 패치를 만들어 막고, 핵 프로그램은 허점을 찾아서 다시 나타나는 패턴이 반복되는 것입니다.



동기화란 무엇인가요?

서버와 클라이언트가 모두 동시에 정보를 일치시키는 것입니다.


A라는 캐릭터가 12시 00분에 점프를 했다면 다른 사용자들도 정확히 12시 00분에 캐릭터 A가 점프하는 것을 목격한다는 의미입니다. 


그러나 실제로는 점프 정보가 서버로 전송되는 데 걸리는 시간, 서버에서 다른 클라이언트로 재 전송하는 데 걸리는 시간, 그리고 각 클라이언트의 물리적인 거리와 성능이 다르기 때문에 모든 클라이언트가 동시에 똑 같은 결과를 확인하는 것은 어렵습니다.


예를 들어, ‘가’ 캐릭터가 00분 00초에 ‘A’ 위치에서 출발하여 00분 10초에 ‘C’위치에 도착했다면 중간 위치 ‘B’는 00분 05초에 통과하게 됩니다.


이 때 모든 사용자가 ‘가’ 캐릭터가 00분 05초에 ‘B’ 위치를 통과하는 것을 보는 것이 아니라, 어떤 사용자는 ‘B’ 위치에 도달하지 않은 것으로 보이는 반면, 어떤 사용자는 이미 지나친 것으로 보는 경우도 있습니다.


하지만 최종 값은 일치시키기 때문에 모든 사용자는 00분 10초에 ‘C’위치에 도착하는 것은 목격할 수 있습니다.


이 때 일부 사용자에게는 00분 08초에 ‘B’ 위치에 있는 것으로 보일 수도 있습니다. 그런데 최종 값은 00분 10초에 ‘C’ 위치에 있어야 하기 때문에 바로 이 순간에 ‘가’ 캐릭터는 2초만에 ‘C’ 위치로 순식간에 이동하는 것처럼 보이게 됩니다.


이러한 현상을 목격한 사용자들은 ‘A’ 캐릭터가 ‘스피드 핵’을 사용한 것으로 오해합니다.  또, 캐릭터 A가 'B' 위치인 줄 알고 공격했지만, 순식간에 ‘C’ 위치로 이동했기 때문에 데미지가 들어가지 않는 것을 ‘핵’이라고 주장하는 경우도 있습니다.


실제로는 공격 당시 ‘B’ 위치에 있지 않았으며, 단지 동기화가 일치하지 않아서 발생한 현상일 뿐입니다.



MMORPG는 왜 동기화를 정밀하게 맞추지 않나요?

MMORPG 장르는 FPS 같은 장르의 게임에 비해 서버와 주고받는 패킷의 양이 압도적으로 많기 때문에 서버와 클라이언트 간의 동기화를 정확하게 맞추지 않고 최종 값(스킬, 데미지, HP, 위치 값 등)만 일치시킵니다.


스텟, 스킬, 무기, 방어구, 펫, 액세서리, 코스튬, 각종 아이템, 버프, 물약, 인벤토리, 길드 정보, 각종 시스템별로 서버와 주고받는 패킷이 FPS 장르의 게임에 비해 압도적으로 많기 때문에 동기화를 정확히 일치시키는 것은 어렵습니다. 


서버가 직접 처리하는 정보가 많을수록 동기화가 어려워지는데, 이는 공격 순간 타겟이 이미 사거리를 벗어났는지 실시간으로 정확하게 확인할 수 없다는 단점이 있습니다. 하지만 핵 프로그램이 중간에 정보를 조작할 수 없다는 장점이 있습니다. 


또한 MMORPG의 전투 방식은 FPS처럼 정밀한 동기화를 요구하는 장르의 게임이 아니기 때문이기도 합니다.



공격을 했는데 데미지가 들어가지 않는 상황 재현

해당 상황을 재현해 보았습니다.


공격자 : 미스틱

타겟 : 엘리멘탈리스트


- 공격자 미스틱의 화면에서는 타겟을 계속 공격하고 있습니다. 하지만 공격을 하고 있음에도 데미지는 들어가지 않는 것으로 보입니다. ( ~16초)


- 그러나 타겟인 엘리멘탈리스트의 화면에서는 자신이 공격을 당하고 있는 것이 아니라, 공격자 혼자서 허공을 향해 공격하는 것으로 보입니다. (17초~ )


바로 이것이 동기화가 일치하지 않아 발생하는 현상이며, 클라이언트가 처리하는 부분과 서버가 처리하는 부분이 각각 다르기 때문에 발생한 현상입니다.


일부 사용자는 이 상황을 버그라고 표현하는 경우가 있지만 이는 버그가 아닙니다.


모니터에 보이는 다른 캐릭터의 위치가 실제 위치가 아닐 수도 있다는 점을 재현해 보았습니다.

(※ 동기화가 맞지 않는 사례를 보여드리기 위해 극단적인 방법으로 연출한 것임을 참고하시기 바랍니다.)



클라이언트에서만 연출하는 상황을 '핵'으로 오인하는 사례

‘핵’으로 오인하는 또 다른 사례입니다.


서버가 처리하는 정보가 많을수록 동기화가 어려워지므로 게임을 플레이하다 보면 캐릭터의 움직임이 중단되는 것처럼 보이는 부자연스러운 상황에 자주 직면하게 됩니다. 그래서 특정 부분은 동기화가 일치하는 것처럼 보이게 하기 위해 클라이언트에서 트릭을 사용합니다.


예를들면 ‘더블 어텍’입니다.

‘더블 어텍’ 사용 시, 타겟은 무조건 공격받는 모션을 보여주도록 되어있습니다. 그런데 스킬을 사용한 그 순간 서버가 타겟의 위치를 계산해보니 사정거리를 벗어 났습니다.


클라이언트는 공격받는 모션을 무조건 보여주도록 되었기 때문에 타겟은 우선 공중에 붕 뜬 후에 바닥에 떨어집니다.  하지만 서버의 위치 값을 수신하는 순간 타겟은 사정거리를 벗어 났기 때문에, 타겟은 바닥에 떨어지자마자 바로 일어나서 다른 위치를 향해 달려가는 모습을 보게 됩니다.


영상에서 보여 드린 사례처럼 이러한 상황은 공격자 화면에서만 보일 수 있습니다.

공격자 입장에서 보면 분명히 ‘더블 어텍’을 맞고 공중에 뜬 후 바닥에 떨어졌습니다. 그러나 곧바로 일어나서 다른 곳으로 달려가기도 하고, 잠시 공중에 잠시 떠 있는 것처럼 보이다가 곧바로 달려가기도 하는 모습을 보게 됩니다.


하지만 타겟의 입장에서는 ‘더블 어텍’을 당하지 않고 자신이 지정한 위치까지 정상적으로 달리고 있을 뿐입니다.


이러한 상황도 타겟 캐릭터가 '핵'을 사용한 것으로 오해하는 경우입니다.



왜 이런 식으로 만들었나요?

캐릭터의 자연스러운 움직임을 최대한 표현하기 위함입니다.


‘더블 어텍’ 공격이 성공했을 때만 공격받는 모션을 보여주도록 디자인했다면, 스킬을 사용하고 잠시 뒤에 공격받는 모션이 나타나서 매우 부자연스럽게 보일 것입니다.


그래서 스킬 기획 시 클라이언트와 서버가 어떻게 처리를 할 지를 결정하며, ‘더블 어텍’은 이러한 방식을 사용하기로 결정하였습니다.


서버와 클라이언트는 각각 어떤 처리를 하는지 그리고 동기화가 무엇인지 설명 드렸습니다.

MMORPG에서 정보가 어떻게 처리되고, 그 결과는 각 클라이언트 화면에서 어떻게 출력되는지 이해하는 것은 특히 PVP 전투에서 큰 도움이 되실 것입니다.



공격 속도, 이동 속도, 변조된 클라이언트 사용에 대한 대책

공격 속도와 이동 속도는 서버가 직접 관리하기 어려운 부분입니다. 

그래서 이 부분은 핵 프로그램으로 조작될 수 있습니다.


하지만 어뷰징 감지 시스템이 적용되어 있으며, 비정상적인 속도 패킷이 감지되면 게임이 강제 종료되도록 하였습니다. 강제 종료된 캐릭터에 대한 로그는 별도로 기록됩니다.


※ 핵 프로그램 제작에 악용될 소지가 있어 상세히 안내해 드릴 수는 없지만, 공격 속도의 경우 단순히 최대 공격 속도 600 이상을 감지하는 방식이 아니라 비정상적인 속도 패킷이 들어오는지를 감지합니다.


※ 감지 범위를 어느정도로 설정하느냐가 관건입니다.  감지 범위를 너무 좁히면 정상적인 유저에게 영향을 끼칠 수 있으며 너무 넓히면 제대로 감지를 못 할 수 있습니다.


또, 변조된 클라이언트 사용 여부를 감지하는 기능도 있으며, 감지 즉시 게임이 종료됩니다.


물론 감지 시스템을 회피할 수 있습니다.

그래서 추가 대책을 마련했습니다.


1. 일반 공격의 효율 하향

  일반 공격의 효율성이 떨어지도록 하였습니다.

  스킬은 서버에서 처리하므로 조작이 불가능하지만, 일반 공격은 언제나 조작의 여지가 

  있습니다. 그래서 일반 공격이 아닌 스킬 공격이 유리하도록 하였습니다.


2. 전투 메시지

  그래도 저희의 감시에서 벗어나는 경우가 있다면 전투메시지를 확인하시면 됩니다.

  전투메시지에 기록된 내용은 모두 진실입니다.

  공격 속도와 데미지, 쿨타임 등이 의심된다면 전투 메시지를 확인하십시오.

  의심스러운 상황이 확인되면 ‘저장하기’를 누르고 저장된 파일을 ‘문의하기’로 접수해 주십시오. 

  (※ 정확한 시간과 영상이 있다면 더욱 좋습니다.)


3. 이동 속도 감지

  캐릭터의 위치 값을 확인하여, 일정 시간 내에 도달할 수 없는 위치 값이 기록되었는지 감지합니다.


4. 핵 쉴드 프로그램 운영 (게임 가드)

  S.U.N이 실행될 때 ‘게임 가드’라는 핵 쉴드 프로그램도 같이 실행됩니다.

  게임 가드는 클라이언트를 보호하고 각종 핵 프로그램을 차단합니다.

  만약 게임 가드가 차단하지 않는 변조 프로그램을 발견하셨다면 제보해 주십시오. 

  즉시 해당 프로그램을 차단하겠습니다.


그동안 제보로 접수된 영상과 게임 로그에 기록된 정보도 주기적으로 분석하였지만 이상한 현상은 발견할 수 없었습니다.  위에서 설명한 동기화가 일치하지 않은 상황을 오해한 것이 대부분이었습니다.


버그로 인해 비정상적인 데미지나 상황이 발생할 수는 있으나, 적어도 핵 프로그램은 스킬, 데미지, HP 정보 등을 조작할 수 없는 구조로 되어 있으니 안심하고 플레이하시기 바랍니다.



해외 서비스를 통한 경험을 바탕으로 지속적인 보안 대책 마련

S.U.N은 중국과 일본에서도 서비스가 되고 있습니다. 

해외 서비스는 한국과 비교할 수 없을 정도로 많은 유저가 있으며, 이를 통해 파악된 핵 프로그램의 기능을 지속적으로 분석하고 대응책을 마련하고 있습니다.


특히, 중국 퍼블리셔와는 긴밀한 협력을 통해 새로 발견된 변조 프로그램이나 버그에 대해서는 지속적인 방어 패치와 수정 작업을 진행하고 있습니다.



S.U.N 게임의 이해

S.U.N은 턴제 방식의 게임이 아닙니다.

전투는 상황과 전략에 따라서 장비 평점이 낮은 캐릭터가 높은 캐릭터를 얼마든지 이길 수 있습니다.


또, 총 16개 계열의 클래스 각각에는 고유한 특성과 역할을 부여하였습니다. 따라서 똑같은 장비를 착용하더라도 PVP에서 모든 클래스가 똑같이 1등이 될 수는 없습니다. 


PVE가 장점인 클래스는 PVP는 불리할 것이며, 반대로 PVP에 유리한 클래스는 PVE에 불리할 수 있습니다.   서포트 역할인 클래스는 PVP와 PVE 모두에 불리할 수 있겠지만, 이런 클래스가 파티에 포함되는지에 따라서 전투 결과가 달라질 수도 있습니다.


서포트 역할인 클래스는 왜 PVP에서 1등이 되지 못하는지, 탱커 역할인 클래스는 왜 PVE에 불리한지에 대한 불만을 접수하시면 만족스러운 답변을 드리기 어렵습니다. 

모든 상황에서 자신의 클래스가 1위가 되기를 바라는 마음은 이해하지만, 다른 클래스를 플레이하는 유저들의 마음도 마찬가지입니다.

(※ 클래스 변경이 가능하니 다른 클래스로 플레이해 보시기를 추천 드립니다.)


그리고 장비 평점과 전투력은 장비에 부여된 옵션과 수치에 인위적인 점수를 배정하여 장비 능력치를 가늠해 볼 수 있도록 한 것입니다. 이 점수로 상대보다 절대적 우위에 있다고 확신하시면 안 되겠습니다.


S.U.N은 2대1 전투에서 1인 캐릭터가 이기는 경우도 있습니다.  뛰어난 컨트롤과 아이템 스왑으로 2명을 각개격파로 물리치는 모습을 직접 목격한 적도 있습니다.


장비 평점이 높다고 무조건 승리한다면 어차피 승부는 이미 결정된 것인데 굳이 싸울 이유가 없습니다. 


S.U.N은 오래 된 게임이지만, 장비와 옵션 설정이 비슷하거나 조금 낮더라도 클래스에 대한 이해, 스킬에 대한 이해, 서버 동기화에 대한 이해, 컨트롤, 잘 구성된 파티, 전략 등에 따라 전투 결과는 얼마든지 달라질 수 있다는 점을 말씀드립니다.



고객문의 답변정책 재안내

장비, 옵션, 클래스, 스킬, 동기화 등을 깊이 연구하신다면 전투에서 좋은 결과를 얻을 수 있을 것입니다.  이 과정에서 궁금한 점이 있으시면 언제든지 문의를 접수하시면 자세히 설명드리겠습니다. 

(※ 하지만 전투에서 왜 승리할 수 없는가, 내 클래스는 왜 PVP에서 우위에 있지 않는가와 같은 질문은 설명드릴 수 없습니다.)


아울러 홈페이지 공지사항의 ‘고객문의 답변정책 재안내’ 게시물에서 ‘[확답이 어려운 문의]’도 다시 확인하여 주시기 바랍니다.


[확답이 어려운 문의]

 1. 개발 건의

    - 아이템 개발 및 기능 변경 요청

    - 콘텐츠 개발 및 기능 변경 요청

    - 시스템 개발 및 기능 변경 요청

    - 스킬 밸런스 관련 요청

 2. 전투 과정 및 결과 문의

 3. 객관적인 자료가 포함되지 않아 확인이 어려운 문의

 4. 게임 로그로 확인되지 않는 문의


간혹, 건의를 했는데 왜 반영이 안 되는지에 대해 항의하시는 경우가 있습니다. 건의하시는 내용은 무조건 모두 반영되는 것이 아니며, 모든 상황을 고려하여 최대한 객관적으로 결정을 내리려고 노력하고 있습니다.


특히 스킬 밸런스는 의견을 주신 고객님 뿐 아니라 다른 고객님이 주신 의견, 그리고 S.U.N이 서비스되고 있는 해외 국가의 여러 유저들 의견도 함께 취합하여 종합적으로 검토하고 있습니다.


이 과정에서 여러분의 제안이 받아들여지지 않으면 실망스러울 수도 있겠지만, 사용자마다 관점이 다를 수 있다는 점을 양해해 주시기 바랍니다.



마무리

핵 프로그램이 있는지에 대한 문의가 꾸준히 접수되고 있으며, 때로는 게임 내에서 부정확한 정보를 외치기하는 경우도 있습니다.


저희는 지속적으로 접수되는 핵 관련 문의에 대해 개별적인 답변만으로는 이 상황을 해결할 수 없다고 판단하여, 모든 이용자분들께 상황을 자세히 설명하는 글을 작성하게 되었습니다. 

모쪼록 S.U.N이 핵 프로그램을 어떻게 방어하는지 이해하는 데 도움이 되셨으면 합니다.

공유하기