본문 바로가기

4-6. 2022-1 심화 스터디/모바일 게임 해킹

치트 엔진(Cheat Engine)을 활용한 게임 해킹 강좌 튜토리얼 1~5 정리

활용한 강좌: https://www.youtube.com/playlist?list=PLRx0vPvlEmdB8ky_3GDyRFeARmOD2O6ub

Tutorial 1

문제: 분석할 프로그램을 분석 도구에서 열어보기

1. 치트 엔진 분석도구에서 왼쪽 위의 아이콘을 눌러 분석할 프로그램을 선택하여 open한다.

 

2. 분석하고자 하는 파일이 열렸다는 것을 확인할 수 있다.

3. Password: 090453

 

 

 

Tutorial 2

문제: 게임 메모리 내 특정 값(Health)을 1000으로 변경하기

 

1. 현재 Health의 Value가 100이기 때문에 분석 도구 내 Value에 100을 입력하고 First Scan 버튼을 클릭한다.

1-2. Value가 100인 값들이 매우 많다.

 

2. 프로그램 내에서 Hit me 버튼을 클릭해 Value값을 변경시킨 후 다시 주소 리스트를 보면 값이 바뀐 주소(0198B088)를 확인할 수 있다. 

2-2. Value를 프로그램 내에서 바뀐 값으로 변경한 후(97) Next Scan 버튼을 누르면 딱 그 Value의 메모리 주소만 리스트에 뜨는 것 같다.(사진의 경우 여러번 시도해서 최종적으로 90으로 변경 후 Next Scan했음)

 

3. 메모리 주소를 더블클릭하면 아래에 자세한 정보들을 볼 수 있는데 Value값을 더블클릭하여 원하는 값으로 수정할 수 있다.

 

4. 프로그램으로 돌아가면 프로그램 내부적으로 Value가 1000이 되었기 때문에 Next 버튼이 해금되어 누를 수 있게 된다.

5. Password: 419482

 

 

 

Tutorial 3

문제: 게임 메모리 내 특정 값(Health)을 5000으로 변경하기(이전 문제와 같은데 Health를 알 수 없음. 단, Health는 0-500 사이)

 

1. 우선 우리가 아는 값이 없기 때문에 Scan Type을 ‘Unknown initial value’라고 지정한 후 First Scan을 누르면 (당연히) 엄청난 수의 address list가 뜬다.

 

2. 이후 프로그램에서 Hit me 버튼을 눌러 체력을 감소시킨 후(-1) Scan Type을 ‘Decreased value by ...’로 지정하고 Value에는 1을 넣어 Next Scan 버튼을 누른다. address list가 많이 좁혀졌다. 확실한 address를 찾을 때까지 이러한 작업을 반복해준다.

 

3. 0~500 사이에서 반복적으로 줄어드는 Value를 찾아 유력한 address를 찾았고 값을 5000으로 바꾸어주었다.

 

4. Next 버튼이 해금되었다. Password: 890124

 

 

 

Tutorial 4

문제: Health와 Ammo 값을 5000으로 설정하기(찾아낼 데이터가 실수형인 문제)

 

1. 일단 float형인 Health의 value를 찾기 위해서 Value Type을 ‘Float’로 설정해주고 Value에 100을 입력해 First Scan한다. 운 좋게 해당 address를 바로 확인할 수 있었다. 더블클릭하여 아래에 추가해준다.

 

2. New Scan을 누른 후, Ammo의 value를 찾기 위해서 Value Type을 ‘Double’로 설정해주고 Value에 100을 입력해 First Scan한다. 이번에도 운좋게 해당 address를 바로 확인할 수 있었다. 마찬가지로 더블클릭하여 아래에 추가한다. 만약 여러 address list가 뜬다면 프로그램을 실행해 값을 변경해주어 Value가 이벤트에 맞춰 바뀌는 address를 찾으면 된다.

 

3. 이제 두 값을 5000으로 바꾸어주면 Next 버튼 해금 성공! Password: 888899

 

 

 

Tutorial 5

문제: Change value 버튼이 기능하지 못하도록 조작하기(어떤 부분이 버튼을 작동시키는 주소인지 기계어 코드를 찾아내는 것이 관건)

 

1. 일반적으로 C언어로 만든 프로그램들은 int형(4byte)을 많이 사용하므로 Value Type을 ‘4 Bytes’로 설정하는 게 편하다. Value는 프로그램에 나왔듯 100을 입력하고 Fisrt Scan하면 많은 address list를 볼 수 있다. 그럴 땐 프로그램에서 Change value 버튼을 눌러 어느 address가 변하는지 확인하여 원하는 address를 찾을 수 있다. 찾았다면 더블클릭하여 아래에 추가한다.

 

2. 해당 메모리(018A4300)를 Change value 버튼이 참조하기 때문에 우클릭 후 ‘Find out what writes to this address’를 눌러 실제적으로 어떤 기능이 이 주소에 접근하는지 확인한다. 프로그램을 실행해 다시 메모리의 값을 변경시키도록 동작한 후 다시 분석도구로 돌아오면 어떤 기계어가 해당 메모리의 값을 바꾸는지 확인할 수 있다.

 

3. Replace 버튼을 눌러 아무것도 수행하지 못하도록 ‘NOP’라고 입력했다. 이후 오른쪽 아래에 Stop 버튼을 누르고 Close를 눌러 나와준다. 그러면 프로그램을 실행해서 Change value 버튼을 눌러도 값이 변하지 않는다는 것을 볼 수 있다. Next가 활성화되었고 Password는 098712