#AssaultCube #Hack #ESP
Assault Cube 를 이용한 게임핵 개발 연습 시작.
목표는 Single Play 뿐만이 아닌 Multi Play 에서도 사용할 수 있는 ESP 핵을 만드는 것이다.
ESP 핵 중에서도 상대 player 의 체력과 위치가 표시되는 월핵을 제작해보기로 한다.
Assault Cube 는 대강 이런 고전틱한 FPS 게임인데, 게임 리버싱의 교본? 정도가 되는 게임이다.
아마 요즘 처럼 디버깅을 방해하는 요소가 적어서 그런 듯 하다.
싱글 플레이에서는 위처럼 체력, 탄창, 수류탄 개수 등의 정보를 로컬에서 자유자재로 바꾸면서 bot 들과 전투를 벌일 수 있다.
일단은 가볍게 체력 값에 대한 조정을 진행해보자.
툴은 Cheat Engine 을 사용할 것이다.
우선 게임이 차지하고있는 메모리의 상태를 다루기 위해 Assault Cube 를 켠 채로 cheat engine 에서 해당 프로세스를 open 한다.
그리고 최초의 체력 100 에 대해서 first scan 진행 후, 어떤 방식으로든 체력을 깎아서 깎인 결과 값에 대해 next scan 을 진행해주면 최초 100 에 대해서 위 사진으로 치면 44 로 변화된 주소 값만 남게 된다.
두 가지 주소가 나오는데 일단은 첫 번째 주소 값 0xE7A278 을 잡고 진행해보자.
일단은 가볍게 값을 바꿔서 체력을 기존 100 보다 높게 잡아놓고 게임을 진행할 수 있다.
5000 으로 바꾸면 바로 적용이 된다.
하지만, bot 들로 부터 조금만 사격을 받거나 수류탄으로 자폭해보면 알겠지만 그냥 눈속임만 했을 뿐 코드 상에서는 5000 이건 10000 이건 100 보다 높으면 그냥 100 으로 처리하여 코드를 진행한다.
근본적인 어셈블리를 파악하고 patch 해보자.
어셈코드를 보려면 디버거를 본격적으로 켜야한다. 이를 위해 Memory Viewer 를 켜서 체력 값이 존재하던 주소에 무언가 값이 쓰일 때 break 가 걸리도록 bp 를 걸어놓는다.
그 상태로 bot 한테 한 방 맞거나 수류탄으로 살짝 자폭해보자.
그렇게 되면 맞는 순간 디버거에서 브레이크가 걸리게 된다.
필자의 기준으로는 해당 부분에서 멈춰있는데, 이 상태가 이미 체력 상태가 update 되어 메모리에 쓰여진 직후 상태이다.
그래서 사진 상으로 형광펜 친 부분이 우리가 찾아낸 체력 메모리에 깎인 체력 값이 쓰여지는 코드일 것이다.
※ 실제로 ebx+04 를 찾아가보면 체력 값이 존재한다
그러면 패치를 어떻게 할 수 있을까? 방법은 여러가지 이지만, 해당 sub 명령어를 add 로 바꿔보기로 한다.
그 상태로 bot 에게 타격을 받으면 영상과 같은 괴랄한 상태가 연출된다.
아무튼 이처럼 값의 변화를 통해 cheat engine 으로 여러 local 값들을 발견할 수 있다.
다만, multi play 에서는 위와 같은 과정이 아무 쓸모 없기 때문에(수류탄 개수는 로컬에서 관리하기 때문에 이 부분은 가능) 추후 추가적인 과정이 필요하다.
그를 위한 발판으로 다음 포스팅에서는 Player 의 Base 주소 탐색방법을 다뤄보도록 한다.
'<보안 study> > 리버싱' 카테고리의 다른 글
[게임핵개발연습#3] 게임에선 좌표계산이 어떻게 될까? - 1. viewMatrix 찾기 (0) | 2022.01.03 |
---|---|
[게임핵개발연습#2] Local Player Object 베이스 주소 찾기 (0) | 2021.12.19 |
[IDA] Hex-Rays Code Skip 현상 (1) | 2020.09.12 |
Ghidra-Server 기관에 직접 계정의뢰하기 (0) | 2019.11.27 |
Ghidra-Server 환경 구성하기 (0) | 2019.11.27 |