어떤 게임이든 좌표는 필수
좌표라 함은 게임 상 존재하는 오브젝트들의 위치라고 보면 될 듯합니다.
요번에는 이 좌표를 가지고 장난질 치는 방법을 볼까 합니다.
예전 글에서 좌표 찾는 방법은 말씀드렸으니 재언급은 하지 않겠습니다.
이 SCMarine에서 좌표는 Float가 아닌 Double 형태로 다루고 있습니다.
4Byte씩 끊어서 스캔하면서 찾으려고 하면 생각보다 더 노가다가 되는 것이죠.
아무튼 체인지, 언 체인지 후 벨류 고정으로 내 좌표 확인하는 식으로 노가다를 진행하면
찾을 수 있을 겁니다. 다만 시간이 좀 오래 걸리는 건 양해해주세요. 다른 툴을 겸해서 쓰면
좀 쉽게 찾을 수 있겠지만 일단 Cheat Engine을 주로 사용하는 입장에서 다룬 거 기 때문에..
이렇게 빨간색으로 표기한 24바이트가 3차원 공간에서의 좌표축인 x, y, z가 됩니다.
단, 이 게임에선 X, Z, Y 순으로 저장이 되는 거 같습니다.
이 부분에다가 디버깅을 걸어보면 엄청나게 많은 곳들이 나오는데요. 실제 좌표인 것도 있지만
그냥 겉값, 표시만 해주려는 경우의 좌표도 많이 있기에 이 부분도 역시 노가다가 꽤 필요합니다..
이런 식으로 엄청나게 많은 것들이 나오기에... 하나하나 확인을 해줘야 하는 거죠.
물론 ESP 같은 경우는 꼭 실좌표일 필요는 없습니다. 겉좌표여도 어차피 좌표 계산 자체에는
무리가 전혀 없기 때문이죠. 근데 저희는 좌표로 장난질을 쳐볼 거라 실좌표를 찾아야 합니다.
그나마 간단한 방법은 저 명령어들에 하나씩 가서 함수 맨 위로 올려다보면
이런 식으로 함수 바로 바깥으로 가게끔 하는 점프문들이 있습니다.
이 점프문들을 그냥 조건이 아닌 무조건적으로 jmp 하게끔 바꿔보세요.
그렇게 했을 때 플레이어가 움직이려고 해도 안 움직이면 그 함수 영역은 내 실제 좌표를
다루고 있는 거라 보시면 됩니다.
좌표 응용의 예시
플레이어의 좌표도 있겠지만 당연히 상대 적 유닛들의 좌표도 분명히 존재합니다.
이것들을 간단하게 이용하여 응용한 예시들입니다.
위의 영상처럼 적 유닛만 못 움직이게 만들 수가 있겠습니다.
대신 보시면 분명하게 적 유닛은 저를 인식하며 공격하려고 하지만 움직여지지 않는 모습입니다.
더 재밌는 것은 이른바 워프라 불리는 행위도 가능해집니다.
이런 식으로 모두를 끌어모아 한번에 정리하고 유유히 다음 스테이지로 향하는 식입니다.
하지만 온라인 FPS들에선 이 워프는 안 될 거예요. 대부분 서버단에서 좌표를 관리할 거라서
일개 클라이언트가 이렇게 모아봤자 실제 판정이 아닌 겉값 판정으로 되어버리기 때문이죠..
만약 아직까지 되는 게임이 있다면 그 게임이 허술한 거라 보면 됩니다.
하지만 내 좌표를 적의 좌표로 옮기는 행위는 가능하죠.
왜냐하면 서버단에서 좌표를 관리한다고 해도 내 좌표 자체는 내 클라이언트에서 직접
움직이는 거기에 어찌할 수가 없거든요. 물론 일정 거리를 말도 안 되는 시간 내에 움직인다던가
이런 식으로 부분 부분 막아놓긴 하던데 말입니다..
이 게임에서 다뤄볼 수 있는 건 거의 다 다뤄본 거 같은데요.
좀 더 생각해 보고 없다 싶으면 다른 게임이나 다른 프로그램을 다뤄봐야 할 거 같네요.
리버싱이라는 게 좋은 기술임에는 분명하지만 한국에선 합법과 불법 경계선에 놓여 있는
기술인지라 까딱 잘못하면 바로 불법으로 가기가 쉬워서 글로 간단하게 다루는 것도
좀 힘든 거 같습니다...
'Reversing & Cheat Engine' 카테고리의 다른 글
25. 코드 난독화 & 가상화 (0) | 2024.03.10 |
---|---|
24. 간단한 게임 치트 도전 - 호출 (5) | 2024.03.09 |
22. 간단한 게임 치트 도전 - 밝기 조절 (0) | 2024.03.07 |
21. 간단한 게임 치트 도전 - 월핵(d3d11) (1) | 2024.03.07 |
20. 간단한 게임 치트 도전 - 스피드핵 (0) | 2024.03.05 |