fps의 숙명이라는 핵! 어떻게 개발을 하여야 막을수 있을까?
그 작동 원리를 들여다 보면 길이 보이지만 이미 완성된 게임에 핵방어를 위해 업그레이드 하기에는 무리가 많다.
(메모리 못 읽게 하면 안되느냐는 질문은 받기 않겠다. 윈도 기반에서는 불가능하다. 창과 방패싸움이기에…)
대부분을 차지하고 방어하기가 어려운 메모리 데이터를 읽는 방식으로 보면 조준을 하기위해서는 좌표를 알아야 한다.
시야카메라 좌표(나의케릭터), 목표 좌표(상대영웅)가 필요하다. 이 값들은 메모리상(우리 말하는 32g램,16g랩)에 있다.
x,y,z는 클라이언트 프로그래머가 사용하는 변수, DirectX 3D 객체의 x,y,z, 서버와 주고 받는 x,y,z… 복사된 변수가 없다고 해도
이정도는 반드시 있다.
클라이언트 변수나 서버 통신용 변수는 공격자가 알아볼 수 없게 암호화 하거나 메모리 위치가 실시간으로 바꿀 수 있게 설계를 해놓으면
노출이 안되거나 혼선을 줘서 동작 불능으로 역으로 핵을 조정할 수가 있게 된다. 간혈적으로 랜덤하게 동작 먹통을 만든다면 핵 개발자는 디버깅하느라
고생할 것이다. 패킷 복호화때 버퍼 노출도 조심해야 한다.
이정도까지도 안된 게임들이 허다하다. 왜나면 게임 엔진을 사용하여 게임을 제작하는데
엔진자체에 메모리데이터 방어기능이 없기때문에 그보다 상위 레이어에서 보안을 해봤자 뚫리는걸 알기 때문이다.
이렇게 하위 레이어부터 탄탄하게 메모리 보안이 받춰쳐야 할 맛이 날것이다. 결국은 책임소재는 dx까지 내려가게 된다.
DX자체에서 객체의 좌표값이 노출되지 않는 기능이 되어있어야 하지만 오래전이지만 내가 은퇴할때 까지는 없었다. 이 부분을 핵을 생각해서
과연 방어기능을 장착을 할까? 지금은 마소가 블자드를 가졌으니 핵을 막기위해 계속 추격을 하고 있다면 결국은 dx 내부적으로도 방어력을
옵션으로 장착할 것이라 본다.
결론을 요약한다면(메모리상에서 값을 알아볼수 없게 하는 노력들)
1.DirectX 3D 객체들의 좌표 노출 보안.
2.게임엔진(언리얼, 크라이,하복,등등)에서 객체들의 좌표 노출 보안.
3.클라이언트에서 사용하는 좌표 변수들의 노출 보안.
4.서버와 주고 받는 패킷과 변수, 그리고 복호화때 변수들의 노출 보안
이 모두가 받춰져야 내가 알고 있는 메모리 핵을 막을 수 있다.
내가 모르는 핵은 그래픽 카드 메모리를 읽어서 작동하는 방식은 생각을 해보지 못했다.(어쩌면?)
이미지 핵은 옵치1에서 경험이 있듯이 조금만 생각하면 막거나 교란을 줄 수 있다.
핵을 막기위해 개발자들은 리버싱 분야도 공부를 해야 한다.
성능과 보안의 상관관계
신작들은 제작비가 어마무시하게 높다. 블래버스터급 영화랄까… 수많은 효과가 들어가면서 그래픽 성능이 많이 필요하다. 이 때문에
보안에 성능을 할당 할지 고민이 될듯하다.
나도 일하고 겜도해야해서 시간이 부족합니다… 여기서 마무리하고 담에 또 올려볼께요~