이제는 현재 많이 쓰는 엔진들에서도 이런 방법이 통용될 수 있는지를 확인해보고 싶고, 이런걸 하면서 라이브 리버싱 능력을 좀 키워보고 싶다.
현재 게임들이 많이 쓰는 엔진은 유니티 엔진과 언리얼 엔진인데, 이런 엔진들을 이용해 나온 상용 게임을 실제로 뜯어볼수는 없으니 , 샘플 게임을 가져와서 빌드하고 , 분석해보는 작업을 하려고 한다.
일단 유니티부터.
유니티의 FPS 샘플게임은 엔진을 설치할 때 제공되며, 샘플로 선택하여 플레이 해볼 수 있다.
일종의 튜토리얼용 게임인 셈인데, 게임의 구조는 다음과 같다.
- 플레이어에게는 체력이 있고, 에너지가 회복되는 방식의 탄창을 가진 총을 사용
- 플레이어가 일정 범위 내로 들어오거나, 플레이어에게 공격을 받으면 공격하는 적이 2개 존재
- 2개의 적을 모두 처치하면 게임 종료
이전 어썰트 큐브와 동일하게 메모리 상에서 적의 체력 값을 찾고, 찾은 체력값을 기준으로 하여 적의 위치를 비롯한 여러 값들을 찾아볼 것이다.
체력값을 찾으려면 값에 변화를 주면서 치트엔진을 이용해 메모리 위치를 찾아가야한다.
값이 정확하게 얼마인지를 모르기 때문에, 값을 찾는 순서는
- 적을 맞춘 후에 변화한 값 찾기
- 탄약회복이 끝난 후에 변화 없는 값 찾기
- 적을 다시 맞춘 다음 변화한 값 찾기
위 과정을 반복해나간다.
값 찾는 과정에서 적이 죽어버리면 안되니까, 체력 값을 좀 넉넉하게 수정하고 ,
튜토리얼에서 제공하는 방법을 참고해 적도 여럿 추가하여 메모리 테이블을 찾기 쉽게 만들어놨다.
빌드는 file- build settings 를 선택하면 나오는 빌드 설정창에서 플랫폼을 선택 후 저장될 경로를 지정하여 build를 눌러주면 된다.
빌드가 완료되었으니, 이제 게임 클라이언트와 치트엔진을 실행해서 값을 찾아보자.