본문 바로가기

SWUFORCE 기술스터디 📝

[Theori] 게임 핵, 치트의 원리

1. 메모리 변조

- 컴퓨터가 실행하는 모든 프로그램은 일종의 기록 저장소인 메모리를 가짐

- 메모리 변조 : 원하는 메모리에 직접 접근해서 게임 저장소 데이터를 내가 원하는 값으로 조작하는 것

 

2. 월핵

- 플레이어가 보지 못하는 것도 화면에 표시되는 것

- 어떤 물체가 앞에 있고 어떤 물체가 뒤에 있는지 판단하지 못하게 하는, 즉 원근감을 판단하지 못하게 하는 것

- 벽이나 지형지물에 상관없이 모든 적이 화면에 표시됨

 

3. 에임봇

- 메모리 내 위치 좌표와 적의 위치 좌표 두가지를 찾아내서, 삼각함수를 사용해 어느 방향으로 얼마나 회전해야 적을 조준할 수 있는지 계산

- 계산한 각도만큼 자동으로 화면을 전환시켜 조준

 

4. 스피드핵

- 게임 시간 자체를 조작하여 플레이어의 속도를 조작하는 것

- 시간을 확인하는 함수를 가로채서 게임이 인식하는 시간이 실제 시간과 다르게 설정

 

5. 해킹이 단순히 나쁜 기술일까

- 게임 핵은 게임 프로그램이 허용하지 않는 부분을 강제로 진행시킴

- 시스템이 의도된 동작을 하지 못하게 하는 본질은 실제 해킹과 동일함

- 해킹 기술을 활용해 게임 생태계를 파괴하면 치터, 취약점을 찾아내서 시스템을 안전하게 한다면 화이트 해커

 

6. 게임 핵이 문제인 이유

- 게임 핵을 다운로드 하는 과정에서 가짜핵에 속아 오히려 내 계정이 해킹 당하고, 컴퓨터 개인정보 유출 및 금융 정보 유출될 수 있음

 

7. 합법적으로 해킹하는 법

- 버그바운티 : 디지털 현상금 사냥꾼처럼, 기업 혹은 기관에서 제공하는 서비스/프로그램에서 취약점을 찾아내 상금을 받는 활동

- 정보보안 컨설턴트/모의해커

- Blue 팀

 


 

8. 월핵 구현 원리

 

(1) Z Buffer (Depth Buffer)

- Z Buffer란 렌더링할 때 어떤 물체가 보여야 할지에 대한 여부를 판별하기 위해 사용되는 방법 중 하나

- 특정 물체(예: 적 플레이어)를 렌더링할 때 Z Buffer 기능을 비활성화하면 렌더링 엔진은 해당 물체가 보여야 할 지의 여부를 구별할 수 없어 물체를 항상 화면에 보여줄 것

(2) D3D9 Hook

- Z Buffer 기능을 비활성화하기 위해 렌더링의 흐름을 제어해야 하는데 이를 위해서는 Direct3D의 라이브러리 함수를 후킹해야 함

- D3D9의 함수를 후킹을 위해 후킹 할 함수의 주소를 알아내는 것이 선행

- Direct3D 라이브러리는 대부분의 export 되어 있는 형태가 아니기 때문에 CreateDevice 함수를 통해 생성된 IDirect3DDevice9 인터페이스를 사용하여 렌더링 함수들을 호출

 

(3) D3D9의 함수 후킹 과정

  1. 게임 프로세스의 메모리에 접근하기 위해 DLL을 인젝션함
  2. vtable의 주소를 찾음 (Pattern Matching/Scanning)
  3. DrawIndexedPrimitive 함수의 주소를 구함 (해당 함수 용도는 추후 설명)
  4. 함수에 Inline Hook을 설치함
  5. 숨겨진 물체를 보이게 함

(4) DirectX 11

- D3D9에서는 DrawIndexedPrimitive 함수를 후킹하였지만 D3D11에서는 DrawIndexed 함수를 후킹

- SetRenderState 함수를 사용하여 Z Buffer를 비활성화하는 것이 불가능하므로 D3D11_DEPTH_STENCIL_DESC 구조체를 통해 Z Buffer를 비활성화

 

 

 

[출처]

중학생도 이해할 수 있는 게임 핵, 치트의 원리 - 게임 속 해킹

https://theori.io/ko/blog/game-hacks-cheats-principles

게임핵의 원리 (1) - Wall Hack

https://theori.io/ko/blog/game-hacking-1