게임 메모리 해킹: 치트 엔진(Cheat Engine) 튜토리얼 9단계 해결하기 (Game Memory Hacking Tutorial by Using Cheat Engine #10)
# 튜토리얼 9
- 지금까지 공부한 내용들을 혼합해서 문제를 풀어야 함
- 문제 요약: Player 1과 Player 2가 우리 팀이고, Player 3과 Player 4가 적팀이다.
게임을 시작하면 각 플레이어의 체력이 감소하는데, 치트 엔진을 이용하여 우리 팀이 이기도록 처리해야 함
- Player 1인 Dave의 Health를 찾기 위해 값 100을 Scan
- 문제에서 Health는 float형이라는 tip을 주었으므로 value type을 float으로 함
- Attack을 누름으로써 값이 94로 변하는 변수가 Dave의 Health임을 알 수 있음
- 찾은 주소를 주소 리스트에 추가
- Find out what writes to this address: 해당 변수의 값을 감소시키는 기계어 찾기
- 체력을 감소시켜 명령어 검출하기
- mov [ebx + 04], eax
> ebx: 배열의 인덱스를 위해 사용되는 변수임
> 일반적으로 플레이어와 같은 정보들은 C언어에서 구조체 형태로 저장됨
> 결과: 플레이어가 여러 명이므로 플레이어 구조체가 배열 형태로 선언되어 있을 것임
- Browse this memory region: 구조체 변수가 선언된 메모리 공간을 확인
- 하나의 구조체 안에 체력 데이터(float:92.00) 및 플레이어 이름 정보(Dave)가 차례대로 담겨있음
- ebx: 배열에서 특정한 원소 부분이 시작되는 메모리 주소를 저장
-
- ebx: 065D1018 위치를 찾음
> D의 위치를 파악하기 위함
- 065D102D 위치에 D가 위치함을 알 수 있음
- 065D102D - 065D1018 = 15
- ebx+15: 이름 데이터의 첫 번째 글자가 나오는 것을 확인할 수 있음
- code injection 실행
> [show disassembler] - [Tools] - [Tmeplate] - [Code injection]
- 코드를 다음과 같이 변경
> cmp: 두 개의 데이터를 비교하여 그 결과를 저장
> je: 두 데이터의 값이 일치하는 경우 특정 주소로 이동
- 변경하게 되면 특정한 구조체 변수의 이름 데이터 값이 'D'로 시작하는 경우
체력 데이터를 감소시키지 않고 바로 로직이 종료됨
- 변경한 코드를 적용시키고 Restart game and autoplay를 누르면
Dave의 체력 값이 변하지 않는 것을 확인할 수 있음
- Next button이 활성화됨
9단계 튜토리얼을 해결했음 !!