들어가며
월핵(Wallhack)은 장애물(벽, 건물, 오브젝트등)을 무시하고 플레이어를 볼 수 있게 해주는 기술입니다.
주로 FPS(1인칭 슈팅)게임에서 사용되며, 여러 기법이 존재합니다.
저번 글에 이어 월핵을 제작하기에 앞서 먼저 대표적인 월핵 기법과 종류에 대해서 알아보겠습니다.
https://imoracle.tistory.com/49
[Assaultcube] FPS게임 분석 및 핵 제작 - 2 -
https://imoracle.tistory.com/48 [Assaultcube] FPS게임 분석 및 핵 제작 - 1 -https://imoracle.tistory.com/49 [Assaultcube] FPS게임 분석 및 핵 제작 - 2 -핵툴 개발 리버스 엔지니어링을 통해 동작중인 게임의 메모리주
imoracle.tistory.com
월핵기법 및 종류
Direct3D DIP 후킹 기반 월핵
DIP(DrawIndexedPrimitive)는 게임의 3D 모델이 그려질 때마다 호출되는 함수입니다.
게임내 플레이어 모델들도 여기에서 렌더링되며, 모델을 식별해 특정 렌더링 조건을 조작하는 방식입니다.
1. Z-Buffer 조작
Direct3D의 렌더링 순서에서 깊이 버퍼인 Z-Buffer를 조작하여, 특정 물체를 항상 제일 앞에 우선 렌더링되도록 설정합니다.
간단합니다만, 다른 오브젝트들까지 뚫고 보일수 있습니다.

2. Chams (형광색 입히기)
플레이어 모델이 눈에 잘 띄도록 구분하기 위해 형광색 텍스쳐를 덮어씌웁니다.
응용하면 벽 뒤에 존재할땐 빨강, 앞일 땐 초록 등 구분이 가능합니다.
국내 FPS게임에서도 무기나 플레이어의 형광스킨이 유행한 것 처럼 식별에 굉장히 도움이 됩니다.
아군 및 적 또한 구분이 가능합니다.
플레이어 모델에만 색을 칠해야하기에 모델을 식별할 필요가 있습니다
Stride, NumVertices, PrimCount 등으로 추릴수 있습니다.

3. 벽 자체 제거
벽에 해당하는 모델의 렌더링을 건너뛰게해 시야를 확보합니다.
DIP에서 벽 모델 식별 후 return 처리합니다. 오브젝트와 충돌 가능성이 있습니다.
시중에서 잘 보이지 않는데는 이유가 있습니다.
4. 와이어프레임
3D 모델들은 수많은 폴리곤들로 이루어져있습니다.
모델을 채워진 면이 아닌 선으로만 렌더링 되도록 바꿔주는 것입니다만
모델들을 구분하지 않는다면, 어지러운 광경이 펼쳐집니다.


메모리 기반 WALLHACK (ESP 등)
1. 메모리 조작
대다수의 FPS게임은 메모리를 단순히 1BYTE만 패치한다고 월핵이 동작하는 경우는 없습니다만,
국내 FPS 모 게임의 경우는 꽤나 흥미롭게도 1BYTE만 패치해서 월핵이 동작되는 경우가 있습니다.
특정 게임엔진을 사용하고, 초기 개발자가 편의를 위해 기능을 넣어두었거나 엔진의 자체 기능이지 않을까 싶습니다.
이 외에도 특정모드의 캐릭터윤관석 기능을 일반모드에서 동작하게 한다든지 종류가 많던데.. 여기까지 하겠습니다.

2. ESP
ESP는 플레이어들의 체력, 닉네임, 무기, 위치 등을 화면에 텍스트, 박스, 선, 거리 등의 형태로 시각화해주는 기능입니다.
적의 상세정보를 표시해주는 기능이라 보시면 됩니다.
일반적으로 위에서 설명한 기법들의 경우, 안티치트의 발전과 더불어 안티치트의 언로드, 우회 등을 하지 않고서는
사용이 불가능합니다만, ESP의 경우 메모리를 변조하거나 후킹하지 않고 접근해 읽기만 하기에 요근래 많이 보이는 기법입니다.
일반적으로 엔티티들의 플레이어 포인터를 찾아
위치 좌표 (X, Z, Y), 팀 정보, 체력, 이름, 무기등의 부가적인 정보를 읽어와
3D 게임속 세상의 좌표를 2D인 우리가 보는 화면에 맞게 좌표를 변환해 그려줍니다(GDI+, D2D,D3D, 오버레이 등)
이전 글에서 설명했다시피 External 방식과, Internal 방식이 존재하며
https://imoracle.tistory.com/49
[Assaultcube] FPS게임 분석 및 핵 제작 - 2 -
https://imoracle.tistory.com/48 [Assaultcube] FPS게임 분석 및 핵 제작 - 1 -https://imoracle.tistory.com/49 [Assaultcube] FPS게임 분석 및 핵 제작 - 2 -핵툴 개발 리버스 엔지니어링을 통해 동작중인 게임의 메모리주
imoracle.tistory.com
외부방식의 경우 다른 프로세스에서 메모리를 읽어와 창에 부착 시킨후, 오버레이로 그려줍니다.
글쓴이가 지뢰찾기 월핵을 만들때 사용했던 방식입니다. 싱크를 맞추는게 꽤나 귀찮은 일이죠
https://imoracle.tistory.com/51
[Game] 지뢰찾기 월핵 제작 - 2 -
https://imoracle.tistory.com/50 [Game] 지뢰찾기 월핵 제작 - 1 -https://imoracle.tistory.com/51 [Game] 지뢰찾기 월핵 제작 - 2 -이어서이제 메모리를 읽어와서, 2차원 배열에 값을 넣어주어야 합니다. 프로그램을
imoracle.tistory.com
내부방식은 싱크는 외부방식보다 맞추기 쉽습니다만, DLL Injection을 통해 진입해야 하기에 안티치트에 무조건 걸린다고 볼 수 있겠네요.
그렇기에 요근래 안티치트의 발전으로 인해 언로드, 우회가 힘들어지며 외부방식으로 메모리만 읽어와 구현한다고 보면 되겠습니다.
메모리 접근조차 차단시켜 읽지도 못하게하는 안티치트들이 트렌트인거 같은데 해당부분만 우회 후 사용되는 것으로 알고있습니다
ESP의 경우 엔티티들의 좌표들을 읽어오니, 에임봇으로도 응용 할 수 있겠죠.
마치며
다양한 기법에 대해 알아 보았습니다. 다음 글에서는 월핵 제작기로 포스팅 할 거 같습니다.
마음 같아선 위의 기법들을 모두 해보고 싶지만.. 우선은 차례대로 해보겠습니다.
'Reverse Engineering > GAMEHACK' 카테고리의 다른 글
| [Anti - Reversing] 보안솔루션 직접 제작하기 - 4 - (0) | 2024.07.06 |
|---|---|
| [Anti - Reversing] 보안솔루션 직접 제작하기 - 3 - (2) | 2024.07.06 |
| [Anti - Reversing] 보안솔루션 직접 제작하기 - 2 - (0) | 2024.07.05 |
| [Anti - Reversing] 보안솔루션 직접 제작하기 - 1 - (0) | 2024.07.04 |
| [Game] 지뢰찾기 월핵 제작 - 2 - (1) | 2024.07.04 |