게임 메모리 해킹: 치트 엔진(Cheat Engine) 튜토리얼 8단계 해결하기 (Game Memory Hacking Tutorial by Using Cheat Engine #9)
# 튜토리얼 8
- 다중 포인터를 이해하고 있는지 물어보는 단계
> 이번 문제는 여러 개의 포인터가 중첩되어 있음
- 문제 요악: 특정한 변수를 가리키는 포인터의 포인터의 포인터의 포인터의 포인터(5중 포인터)를
찾아내어 값을 5000으로 고정시키기
- 현재 변수의 값 1142를 가지고 First Scan을 진행
- 주소 리스트에 추가
- Find out what accesses this address를 눌러 어떤 포인터가 해당 변수를 가리키는지 확인
- Change value를 통해 값을 변경시켜 수행되는 기계어 확인
- mov [esi+18], eax: esi 레지스터가 가지는 값에 18을 더한 메모리 주소에 eax 레지스터의 값을 넣음
- 어떠한 포인터 변수가 esi 값 정보를 저장하고 있음
- 위에서 찾은 esi의 값을 어떤 포인터 변수가 가지고 있는지 확인
- 주소 리스트에 해당 변수 추가
- 위와 동일한 과정으로 해당 변수의 주소를 참조하는 포인터 변수를 찾아봄
- mov esi, [esi]: 이중 포인터를 의미하는 명령어
- 0187B7A8을 값으로 가지는 변수를 검색
- 주소 리스트에 추가
- 이를 참조하는 포인터 변수가 있는지 다시 확인
- mov esi, [esi+14]: 이중 포인터를 의미하는 명령어
> offset으로 14가 붙어있음: 특정한 주소에서 14를 더하여 참조한다는 의미
- 현재 주소 값에서 14를 뺀 값을 어떠한 포인터 변수가 가지고 있다는 의미
- 01863D74에서 14를 빼면 01863D60이 나옴
- 주소 리스트에 변수 추가
- 참조하는 포인터 변수를 또 찾아줌
- 이번에는 offset이 0C임을 알 수 있음
- 018D3E64 - 0C는 018D3E58이므로 이 값을 가지고 scan
- 일반적으로 address가 초록색이면 포인터 시작 주소임
> 006566E0이 시작 주소임을 알 수 있음
- 다음과 같이 offset을 이용하여 다중 포인터 값을 색출
- 주소 리스트에 추가된 포인터의 값을 5000으로 변경함
- active를 체크하여 freeze 상태로 만듬
- Change pointer를 누르면 Next button이 활성화 됨
8단계 튜토리얼을 해결했음 !!