크랙미가 아닌 실전(?)으로
이젠 어느정도 크랙미는 진행해봤고 매번 비슷한 계열의 문제를
다르게 푸는거에 질렸다면 실제 게임에다가 한 번 적용을 해보죠.
* 주의
저는 싱글 게임을 예로 다룬 것이며, 실제 온라인 게임에서 접목해서
사용 해보시는건 자유이나 책임 소재는 사용하는 본인에게 있습니다.
공부 목적까진 좋지만 최대한 남에겐 피해 안 주는 선에서 하시고
제작 후 판매는 엄연한 범법 행위임을 미리 알립니다.
이번에 해볼 게임은 바로 SCMarine이라고 플레이어가 마린이 되서
FPS 형식으로 진행 되어지는 게임입니다. 팬 게임에 가까운데 싱글 게임이고
의외로 완성도가 괜찮은 편이라 해볼만 한거 같습니다.
저는 FPS 게임에 워낙 소질이 없기 때문에 하다가 금방 죽어 버렸지만요.
그래서 치트를 쓴다고 볼 수 있습니다. 어쩌겠습니까... 못하는데 깨곤 싶은데..
다시 언급하지만 경쟁이 있는 온라인 게임에서의 치트는 정당화 될 수 없습니다.
아무튼 이것으로 진행을 한 번 해보죠.
게임은 밑의 링크에서 받으실 수 있습니다.
용량이 제법 크고 다운로드 속도가 느리니까 미리 다운로드 해두시고 다른거 하다가
오시는 것을 추천드려요..
아무튼 게임까지 다 다운 받으셨으면 실행을 해봐야죠.
생각보다 고퀄인거에 놀랐습니다.
우선 프로세스 이름은 SCMarine-Win64-Shipping.exe입니다.
따로 보안 같은건 없으니 분석용으로 본다고 생각하시면 좋을 듯 합니다.
Play -> New Game -> Terran 으로 선택 했습니다.
종족은 뭘 선택하든 딱히 상관은 없는거 같아서 Marine이 Terran 종족이니까 선택 한겁니다.
시작하자마자 저글링 달려와서 개뚜들겨 맞고 시작하네요.
일단 탄창이 겁나 없다보니 탄창부터 좀 증가 시키든 해야겠네요.
총알 숫자대로 스캔을 한 번 해봅시다.
탄창 Value를 찾고 그 부분에 Find out accesses를 걸어봤습니다.
총 3개가 뜨는데 하나하나 살펴봅시다.
1,2번째 명령어가 각각 네모 박스 친 곳의 2개군요.
여기서 rcx+2CC , 즉 2CC 오프셋에 총알개수가 들어가네요.
그러면 옆에 총이 둥둥 떠다닐텐데 이 총을 먹고 탄창 개수를 한 번 봐보시면
총마다 총알개수 들어가는게 다르다는걸 알 수 있습니다.
이렇게 되면 각 총기마다 총알개수 담아주는 공간이 다르다는건데..
우선 이 부분에 디버깅을 건 후 rcx의 값을 얻어줍니다.
그러면 rcx가 현재 들고 있는 C-14 RIFLE의 베이스인데 여기에 Data BreakPoint를 걸고
1,2 무기를 스왑해주세요.
그러면 이런식으로 2->1 무기를 들려고 할 때 디버깅이 걸릴겁니다.
즉 Return Address 중 1번 무기를 들었을 때 반응하는 주소가 있다는 뜻이겠죠.
Return Address 중 1,2번째는 보시면 함수가 바로 시작되는 지점이라 총기를 드는
딜레이 부분일 가능성이 큽니다. 그러면 3번째에서 살짝 위를 한 번 봐볼까요?
이런식으로 어떤 특정 조건에 따라 각각 다른곳으로 점프하는 구간이 있습니다.
이 구간에서 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발씩 줄던게 늘지 않을까요?
해보니까 총알이 한발씩 늘어나서 탄창에 대한 걱정은 없어졌다 할 수 있겠습니다.
결국 게임도 이런식으로 단순히 생각해보면 해볼만한 편입니다.
이렇게 하나하나씩 살펴보도록 할건데
가급적 접근이 쉬운 부분만 다룰 예정이고 복잡하게 해야 하는건 따로 다루진 않겠습니다.
'Reversing & Cheat Engine' 카테고리의 다른 글
17. 간단한 게임 치트 도전 - 데미지 (0) | 2024.03.02 |
---|---|
16. 간단한 게임 치트 도전 - 무적 (0) | 2024.03.01 |
14. 크랙미 다섯 번째 (0) | 2024.02.27 |
13. 크랙미 네 번째 (파도콘) (0) | 2024.02.26 |
12. 크랙미 세 번째 (파도콘) (0) | 2024.02.26 |