<보안 study>/리버싱

[게임핵개발연습#1] 여러 Local 값과 주소 탐색

gosoeungduk 2021. 12. 19. 00:34
반응형

#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 주소 탐색방법을 다뤄보도록 한다.

반응형