들어가며
Cheat Engine을 이용한 Code Injection 실습을 진행한다.
실습 환경
[분석환경]
Windows 10 Pro
[분석도구]
Cheat Engine 7.3
Multiple Pointers
Step 6. 와 유사한 동작을 하지만 단일 포인터가 아닌 여러번 참조하는 Pointer를 다룬다.
그림처럼 Player를 참조하기 위해서 게임 객체 -> Map -> Player 순서로 참조하여 값을 가져올 수 있다.
각 객체별로 가지고 있는 속성 값이 다르며, 다른 주소를 참조할 경우 해당하는 멤버는 다음 객체의 포인터 주소를 가지고 있다.
따라서 그림의 예시에서 Player Stat을 참조하기 위한 주소는 [[[Game.exe+202c]+8]+10]이 된다.
실습
실습은 Cheat Engine 내 튜토리얼로 진행한다. 간단하며, 따라하기 쉬운 예제이다.
Change value를 누를때마다 값이 변화한다.
Change pointer를 누르면 3초 안에 값을 5000으로 바꾸라는 메시지가 나오며 타이머가 시작된다.
메모리를 참조하고 있는 값을 바꾸어봤자 의미가 없기 때문에 실제로 값을 참조하고 있는 주소의 값을 바꾸어야 한다.
1. Scan
현재의 값인 '2377'로 스캔한다.
2. Pointer map
주소영역 - 우클릭 - Gernerate PointerMap 을 통해서 새로운 포인터맵을 저장한다.
Tutoiral 프로세스를 종료, 다시 시작한 후 New Scan을 통해 주소를 가져온다.
주소가 바뀐 것을 확인할 수 있다.
새로운 프로세스에서 실행이 되면, 주소영역 - 우클릭 - Pointer Scan For this address 로 진행한다.
앞서 스캔한 포인터맵 파일을 로드한 후 주소를 지정해 준다.
Max Level 옵션의 경우 상용 게임은 7~9단계 이상의 복잡한 구조를 가지지만, 실습의 경우 4단계라고 명시가 되어 있으므로 5로 지정해서 사용한다.
참조 단계 별로 어떤 오프셋을 참조하는 지 확인할 수 있다.
해당 항목을 더블클릭하면 주소 테이블 영역에 등록할 수 있다.
주소 영역을 더블클릭하면 Base Address 를 확인할 수 있다.
결과
값을 5000으로 변경하였고, Next 버튼이 활성화되었다!
포인터 맵을 사용하는 방법도 있지만, 직접 수동으로 하나씩 참조하는 offset을 거꾸로 따라가는 방법도 있다.
'Reversing > Assembly' 카테고리의 다른 글
[Cheat Engine] Step7. Code Injection (0) | 2021.11.21 |
---|