HackChang

[Cheat Engine Tutorial] 치트엔진 튜토리얼 9번 문제 풀이 본문

W4RG4M3/R3V3RS1NG

[Cheat Engine Tutorial] 치트엔진 튜토리얼 9번 문제 풀이

HackChang 2020. 7. 7. 20:05

치트엔진 튜토리얼 9

이번 문제는 상당히 많은 방법으로 문제를 해결할 수 있다.

문제를 설명하자면 플레이어 1과 2가 컴퓨터인 플레이어 3,4를 이기면 클리어되는 문제이다.

우선 autoplay를 통해 게임을 진행해보겠다.

 

플레이어 1과 2가 패배한 것을 볼 수 있고, 컴퓨터 플레이어가 Health가 더 높고, 공격력이 더 높다는 것을 알 수 있다.

여기서 여러가지 방법을 생각해볼 수 있는데 몇 가지만 생각해보자면 

1. 플레이어1, 2의 Health를 높인다. (무적도 가능)

2. 플레이어3, 4의 Health를 낮춘다. 

3. 플레이어1, 2의 공격력을 올린다.

4. 플레이어3, 4의 공격을 무시한다.

 

4가지 방법말고도 많은 방법으로 풀 수 있다고 생각된다.

우선 나는 1번으로 해결해보도록 하겠다.

 

튜토리얼을 Restart하여 초기화를 시킨다.

플레이어 1,2의 체력을 알기위해서 플레이어 1부터 공격을 해보도록 하겠다.

 

Health가 1이 줄은 것으로 보아 컴퓨터의 공격력이 4인 것으로 생각했다.

재시작 후 스캔을 통해 플레이어 1의 Health를 찾도록 하겠다.

우선 Health값 스캔으로는 Health가 나오지 않아 Unknown으로 스캔을 진행하도록 하겠다.

 

해당 값이 플레이어 3의 Health라고 생각되어 주소목록으로 내려 opcode write를 보도록 하겠다.

 

멀티레벨 포인터문제와 같게 스캔을 진행하여 static주소를 찾도록 한다.

과정은 생략하겠다.

 

그리고 블로그에서 소개는 안했지만, 멀티레벨포인터의 경우에는 포인터스캔이라는 기능을 이용하면

굉장히 간편하게 멀티레벨포인터를 찾을 수 있다. 자세한 것은 다음에 다루도록 하겠다..

 

이렇게 두 플레이어의 Health 포인터를 찾았고, 찾으면서 규칙을 알 수 있었다.

 

두 플레이어의 오프셋을 보면 1번째 오프셋 4는 같고, 2번째 오프셋이 4cc와 4d0으로 얼마 차이가 안나는 것을 볼 수 있다.

 

4가 차이나는 것으로 보아

플레이어 3의 오프셋은 4d4, 플레이어 4의 오프셋은 4d8인 것을 예상할 수 있다.

 

우선 클리어를 위해 Health를 높이도록 하겠다.

 

벨류를 높이고 플레이어 1과 2를 공격해봤다.

 

벨류가 저렇게 나온 것은 해당 Health가 정수형이 아니기 때문이었던 것이고, 타입을 float으로 변경하면

Health가 제대로 나오는 것을 볼 수 있다.

프로즌 체크를 하여 재시작해도 체력이 유지되도록 한 후 게임을 시작하면 이기는 것을 볼 수 있고, 클리어가 된다.

 

 

Comments