Fascination
article thumbnail

게임 메모리 해킹: 치트 엔진(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단계 튜토리얼을 해결했음 !!

profile

Fascination

@euna-319

포스팅이 좋았다면 "좋아요❤️" 또는 "구독👍🏻" 해주세요!