23. 간단한 게임 치트 도전 - 좌표 장난
본문 바로가기
Reversing & Cheat Engine

23. 간단한 게임 치트 도전 - 좌표 장난

by boosting 2024. 3. 8.
728x90

어떤 게임이든 좌표는 필수

좌표라 함은 게임 상 존재하는 오브젝트들의 위치라고 보면 될 듯합니다.

요번에는 이 좌표를 가지고 장난질 치는 방법을 볼까 합니다.

예전 글에서 좌표 찾는 방법은 말씀드렸으니 재언급은 하지 않겠습니다.

이 SCMarine에서 좌표는 Float가 아닌 Double 형태로 다루고 있습니다.

4Byte씩 끊어서 스캔하면서 찾으려고 하면 생각보다 더 노가다가 되는 것이죠.

 

아무튼 체인지, 언 체인지 후 벨류 고정으로 내 좌표 확인하는 식으로 노가다를 진행하면

찾을 수 있을 겁니다. 다만 시간이 좀 오래 걸리는 건 양해해주세요. 다른 툴을 겸해서 쓰면

좀 쉽게 찾을 수 있겠지만 일단 Cheat Engine을 주로 사용하는 입장에서 다룬 거 기 때문에..

SCMarine

 

이렇게 빨간색으로 표기한 24바이트가 3차원 공간에서의 좌표축인 x, y, z가 됩니다.

단, 이 게임에선 X, Z, Y 순으로 저장이 되는 거 같습니다.

이 부분에다가 디버깅을 걸어보면 엄청나게 많은 곳들이 나오는데요. 실제 좌표인 것도 있지만

그냥 겉값, 표시만 해주려는 경우의 좌표도 많이 있기에 이 부분도 역시 노가다가 꽤 필요합니다..

 

SCMarine

 

이런 식으로 엄청나게 많은 것들이 나오기에... 하나하나 확인을 해줘야 하는 거죠.

물론 ESP 같은 경우는 꼭 실좌표일 필요는 없습니다. 겉좌표여도 어차피 좌표 계산 자체에는

무리가 전혀 없기 때문이죠. 근데 저희는 좌표로 장난질을 쳐볼 거라 실좌표를 찾아야 합니다.

그나마 간단한 방법은 저 명령어들에 하나씩 가서 함수 맨 위로 올려다보면 

 

 

SCMarine

 

이런 식으로 함수 바로 바깥으로 가게끔 하는 점프문들이 있습니다.

이 점프문들을 그냥 조건이 아닌 무조건적으로 jmp 하게끔 바꿔보세요.

그렇게 했을 때 플레이어가 움직이려고 해도 안 움직이면 그 함수 영역은 내 실제 좌표를

다루고 있는 거라 보시면 됩니다.

 

좌표 응용의 예시

플레이어의 좌표도 있겠지만 당연히 상대 적 유닛들의 좌표도 분명히 존재합니다.

이것들을 간단하게 이용하여 응용한 예시들입니다.

 

SCMarine

 

위의 영상처럼 적 유닛만 못 움직이게 만들 수가 있겠습니다.

대신 보시면 분명하게 적 유닛은 저를 인식하며 공격하려고 하지만 움직여지지 않는 모습입니다.

더 재밌는 것은 이른바 워프라 불리는 행위도 가능해집니다.

 

 

SCMarine

 

이런 식으로 모두를 끌어모아 한번에 정리하고 유유히 다음 스테이지로 향하는 식입니다.

하지만 온라인 FPS들에선 이 워프는 안 될 거예요. 대부분 서버단에서 좌표를 관리할 거라서

일개 클라이언트가 이렇게 모아봤자 실제 판정이 아닌 겉값 판정으로 되어버리기 때문이죠..

만약 아직까지 되는 게임이 있다면 그 게임이 허술한 거라 보면 됩니다.

 

하지만 내 좌표를 적의 좌표로 옮기는 행위는 가능하죠.

왜냐하면 서버단에서 좌표를 관리한다고 해도 내 좌표 자체는 내 클라이언트에서 직접

움직이는 거기에 어찌할 수가 없거든요. 물론 일정 거리를 말도 안 되는 시간 내에 움직인다던가

이런 식으로 부분 부분 막아놓긴 하던데 말입니다..

 

이 게임에서 다뤄볼 수 있는 건 거의 다 다뤄본 거 같은데요.

좀 더 생각해 보고 없다 싶으면 다른 게임이나 다른 프로그램을 다뤄봐야 할 거 같네요.

리버싱이라는 게 좋은 기술임에는 분명하지만 한국에선 합법과 불법 경계선에 놓여 있는

기술인지라 까딱 잘못하면 바로 불법으로 가기가 쉬워서 글로 간단하게 다루는 것도

좀 힘든 거 같습니다...

728x90