1. Tutorial Games Level #2
1.1 게임 설명
Tutorial Games Level #2은 플레이어가 자신의 비행기(빨간색)로부터 총알을 발사하여 두 대의 적 비행기(초록색)를 파괴하는 것이 목표이다. 그림 1에서 볼 수 있듯이, 플레이어 비행기가 총알을 발사할 때 적 비행기도 동시에 총알을 발사한다.
적 비행기가 발사한 두 발의 총알이 플레이어 비행기를 맞출 경우, 플레이어 비행기의 체력이 4씩 감소한다.
총알 발사 : Space Bar
Player 비행기 이동 : 키보드 방향

2.2 풀이 과정
플레이어 비행기의 체력을 높여, 적 비행기가 공격해도 파괴되지 않도록 한다. 처음 게임 실행 시 플레이어 비행기의 체력은 100이므로, Cheat Engine 프로그램에서 100을 입력 후 First Scan을 수행한다.

First Scan 수행 시, 그림 3과 같이 267개의 Scan 결과가 나타났다. 이후, Scan 결과값을 줄이기 위해 플레이어 비행기의 체력을 감소시킨 뒤 Next Scan을 수행한다.

Next Scan 수행 결과, 그림 4와 같이 1개의 Scan 결과가 나타났다. 저 값이 플레이어 비행기의 체력이며, 이를 999999로 변경한다.

적 비행기를 공격한 뒤, 적 비행기로부터 플레이어 비행기가 공격당하면 그림 5와 같이 플레이어 비행기의 체력이 변경된 것을 확인할 수 있다.

이제 오른쪽 적 비행기를 파괴시켜 보자!
적 비행기 한 대가 파괴되면, 그림 6과 같이 "너 대가를 치르게 될 거야!"라는 메시지와 "megabombs"가 활성화된다는 메시지가 출력된다.

플레이어 비행기가 남은 적 비행기를 향해 총알을 발사하면, 적 비행기는 "megabombs" 총알을 발사한다. 이후, 그림 7과 같이 플레이어 비행기의 체력이 -1이 되며 파괴된다. 따라서, 단순히 플레이어 비행기의 체력을 높이는 방법으로는 해당 문제를 해결할 수 없었다.

다른 방법으로 적 비행기를 파괴하기 위해, 적 비행기의 체력을 1로 조정하는 방식을 시도했다. 적 비행기의 체력이 1이 되면, 단 한 발의 총알만으로도 적 비행기를 파괴할 수 있을 것이라 생각했다. 플레이어 비행기의 총알 발사 속도가 적 비행기의 'megabombs' 총알 보다 빠르기 때문에 가능한 방식일 것이라 생각했다.
우선 적 비행기의 체력을 찾기 위해, 플레이어 비행기의 체력을 찾은 뒤, "Find out what writes to this address" 기능을 사용한다. 해당 기능은 특정 메모리 주소에 어떤 함수나 프로세스가 쓰기 작업을 수행하는지 찾아내는 기능이다. 여기서는 플레이어 비행기의 체력이 저장된 주소에 쓰기 작업을 수행하는 모든 함수나 프로세스를 식별하는 데 사용된다.

이제 플레이어 비행기의 체력이 저장된 주소를 참조하는 모든 메모리 주소를 찾기 위해 "Find out what addresses this code accesses" 기능을 사용한다. 해당 기능은 특정 코드가 실행될 때 어떤 메모리 주소들에 접근하는지를 찾아내는 데 사용된다. 여기서는 플레이어 비행기가 발사한 총알이 적 비행기를 맞추고 적 비행기의 체력이 감소되었을 때, 적 비행기의 체력이 저장된 주소를 찾을 수 있다.

적 비행기의 체력을 찾기 위해, 각각의 적 비행기에게 총알을 한 발씩 발사한다. 다음 그림 10을 살펴보면, 2개의 메모리 주소가 나타났으며, 해당 메모리 주소가 적 비행기의 체력이 저장된 메모리 주소로 확인된다.

적 비행기 파괴를 위해, 적 비행기의 체력 198을 1로 변경한다. 적 비행기의 체력을 변경하면, 그림 11과 같이 적 비행기의 체력바가 감소된 것을 확인할 수 있다.

이제, 적 비행기를 한 대씩 파괴해 보자!
왼쪽 적 비행기를 파괴하면, 그림 12와 같이 오른쪽 적 비행기는 'megabombs' 총알이 활성화되고, 20의 체력을 회복하는 것을 볼 수 있다. 따라서, 다시 한번 오른쪽 적 비행기의 체력을 1로 변경한다.

마지막으로 오른쪽 적 비행기를 파괴하면, 플레이어 비행기가 'megabombs' 총알을 맞아도 그림 13과 같이 게임이 클리어됨을 볼 수 있다.

이번 실습에서는 적 비행기의 체력을 찾아 이를 1로 변경함으로써 간단하게 해결했지만, 코드 인젝션 방법으로 플레이어 비행기를 무적으로 만들고, 총알 데미지도 증가시킬 수 있다. 코드 인젝션과 그 방법에 대해서는 추후 자세히 정리하겠다.
참고 자료 및 출처
'3. Reversing & Cryptography > 3.1 CheatEngine' 카테고리의 다른 글
| Cheat Engine Tutorial Games #1 (0) | 2024.02.14 |
|---|---|
| Cheat Engine Tutorial Games #3 (0) | 2024.01.23 |