15. 간단한 게임 치트 도전 - 총알무한
본문 바로가기
Reversing & Cheat Engine

15. 간단한 게임 치트 도전 - 총알무한

by boosting 2024. 2. 29.
728x90

크랙미가 아닌 실전(?)으로

 

이젠 어느정도 크랙미는 진행해봤고 매번 비슷한 계열의 문제를

다르게 푸는거에 질렸다면 실제 게임에다가 한 번 적용을 해보죠.

 

* 주의

저는 싱글 게임을 예로 다룬 것이며, 실제 온라인 게임에서 접목해서

사용 해보시는건 자유이나 책임 소재는 사용하는 본인에게 있습니다.

공부 목적까진 좋지만 최대한 남에겐 피해 안 주는 선에서 하시고

제작 후 판매는 엄연한 범법 행위임을 미리 알립니다.

 

이번에 해볼 게임은 바로 SCMarine이라고 플레이어가 마린이 되서

FPS 형식으로 진행 되어지는 게임입니다. 팬 게임에 가까운데 싱글 게임이고

의외로 완성도가 괜찮은 편이라 해볼만 한거 같습니다.

 

저는 FPS 게임에 워낙 소질이 없기 때문에 하다가 금방 죽어 버렸지만요.

그래서 치트를 쓴다고 볼 수 있습니다. 어쩌겠습니까... 못하는데 깨곤 싶은데..

다시 언급하지만 경쟁이 있는 온라인 게임에서의 치트는 정당화 될 수 없습니다.

아무튼 이것으로 진행을 한 번 해보죠.

 

게임은 밑의 링크에서 받으실 수 있습니다.

용량이 제법 크고 다운로드 속도가 느리니까 미리 다운로드 해두시고 다른거 하다가

오시는 것을 추천드려요..

 

 

Starcraft Marine

 

j-jlucas.github.io

 

아무튼 게임까지 다 다운 받으셨으면 실행을 해봐야죠.

 

SCMarine

 

생각보다 고퀄인거에 놀랐습니다.

우선 프로세스 이름은 SCMarine-Win64-Shipping.exe입니다.

따로 보안 같은건 없으니 분석용으로 본다고 생각하시면 좋을 듯 합니다.

 

 

Play -> New Game -> Terran 으로 선택 했습니다.

종족은 뭘 선택하든 딱히 상관은 없는거 같아서 Marine이 Terran 종족이니까 선택 한겁니다.

 

SCMarine

 

시작하자마자 저글링 달려와서 개뚜들겨 맞고 시작하네요.

일단 탄창이 겁나 없다보니 탄창부터 좀 증가 시키든 해야겠네요.

총알 숫자대로 스캔을 한 번 해봅시다.

 

SCMarine

 

탄창 Value를 찾고 그 부분에 Find out accesses를 걸어봤습니다.

총 3개가 뜨는데 하나하나 살펴봅시다.

 

SCMarine

 

1,2번째 명령어가 각각 네모 박스 친 곳의 2개군요.

여기서 rcx+2CC , 즉 2CC 오프셋에 총알개수가 들어가네요.

그러면 옆에 총이 둥둥 떠다닐텐데 이 총을 먹고 탄창 개수를 한 번 봐보시면

총마다 총알개수 들어가는게 다르다는걸 알 수 있습니다.

이렇게 되면 각 총기마다 총알개수 담아주는 공간이 다르다는건데..

 

SCMarine

 

우선 이 부분에 디버깅을 건 후 rcx의 값을 얻어줍니다.

그러면 rcx가 현재 들고 있는 C-14 RIFLE의 베이스인데 여기에 Data BreakPoint를 걸고

1,2 무기를 스왑해주세요.

 

SCMarine

 

그러면 이런식으로 2->1 무기를 들려고 할 때 디버깅이 걸릴겁니다.

즉 Return Address 중 1번 무기를 들었을 때 반응하는 주소가 있다는 뜻이겠죠.

Return Address 중 1,2번째는 보시면 함수가 바로 시작되는 지점이라 총기를 드는

딜레이 부분일 가능성이 큽니다. 그러면 3번째에서 살짝 위를 한 번 봐볼까요?

 

SCMarine

 

이런식으로 어떤 특정 조건에 따라 각각 다른곳으로 점프하는 구간이 있습니다.

이 구간에서 cmp eax,05 쪽에 디버깅을 걸고 스왑을 해볼게요.

그러면 1->2 일때 eax는 1이 담기면서 어떤 곳으로 점프하고

2->1 일때 eax는 2이 담기면서 어떤 곳으로 점프합니다.

즉 이 구간이 총마다 다르르게 점프하는 구간이라고 볼 수 있겠고

이걸 이용하면 총알 개수가 담긴 주소를 얻어올 수 있을듯 합니다.

이 부분은 일단 알아만 두시고 나중에 한 번 다뤄보겠습니다.

 

일단 다시 돌아가서 rcx+2CC가 총알 개수가 맞는지를 확인해봐야겠죠.

 

SCMarine-Win64-Shipping.exe+19FB4C0 - FF C8                 - dec eax
SCMarine-Win64-Shipping.exe+19FB4C2 - 89 81 CC020000        - mov [rcx+000002CC],eax

 

dec eax 하는거 봐선 inc eax로 바꾸면 총알이 1발씩 줄던게 늘지 않을까요?

 

SCMarine

 

해보니까 총알이 한발씩 늘어나서 탄창에 대한 걱정은 없어졌다 할 수 있겠습니다.

결국 게임도 이런식으로 단순히 생각해보면 해볼만한 편입니다.

이렇게 하나하나씩 살펴보도록 할건데

가급적 접근이 쉬운 부분만 다룰 예정이고 복잡하게 해야 하는건 따로 다루진 않겠습니다.

728x90