포스팅에 앞서, AssaultCube와 관련된 모든 포스팅은 버전 1.2.0.2로 작성됩니다.
게임해킹에서의 가장 기본이라고 말할 수 있는
Local Entity, Pointer, offset 주소를 찾는 방법에 대한 포스팅입니다
치트엔진으로 게임해킹을 진행하기 위해서
오픈소스 게임인 Assaultcube 를 켜주도록 하겠습니다
정상적으로 게임을 켰으면 아래와 같은 화면이 나타납니다
치트엔진도 켜준 후 아래 사진처럼 게임을 Attach해주도록 하겠습니다
Open 클릭!
먼저 게임의 Local Entity 주소를 찾기 전에 잠깐 설명을 해드리겠습니다
Local Entity 주소는 Player의 객체를 가리키는 주소입니다
이 주소를 찾게되면 오프셋을 더욱 쉽게 찾을 수 있기때문에 Local Entity 주소를 찾게됩니다
Local Entity 주소를 찾기 위해서 게임 캐릭터의 체력 주소를 찾아주도록 하겠습니다
위 사진과 같이 체력의 값이 100이기 때문에 100을 입력하고 First Scan을 해주도록 하겠습니다
게임 내에 수류탄이 있는데 수류탄을 사용해서 체력값을 감소시키고 Next Scan을 해줍니다
검색된 값을 테이블로 가져왔습니다
이제 찾은 동적 체력 주소를 통해서 본격적으로 Local Entity 주소를 찾겠습니다
우클릭 → Find out what accesses this address (F5)
클릭하시게 되면 아래와 같이 매 틱마다 Count가 올라가는 두개의 접근을 확인할 수 있습니다
더 많은 접근이 있는지 확인하기 위해서 수류탄을 통해 체력을 한번 더 감소시켜보겠습니다
저같은 경우는 아래 사진과 같이 한개의 접근이 추가로 뜬것을 볼 수 있었습니다
여기서 간단하게 육안으로 확인할 수 있듯이
아래 사진에서 3개의 접근은 모두 어떠한 [레지스터 + F8]로 구성되어있는것을 확인할 수 있습니다
치트엔진 튜토리얼에서 오프셋과 포인터에 개념에 대해 설명했었는데
위 사진에서 F8은 오프셋입니다. ebx라는 어떠한 주소에서 F8만큼 떨어져있는 주소에 있다는 뜻입니다
그리고 각각의 접근을 클릭해서 ebx, esi, edx의 값을 확인해보면 모두 같은 주소를 담고있는것을 볼 수 있습니다
저같은 경우는 미리 해보았기 때문에 edx, esi, ebx의 값이 모두 Local Entity 주소인것을 알지만
여러분들이 게임 해킹을 하셔서 Local Entity 주소를 찾게 되실 때에는 이러한 접근들에
가설을 세우셔서 계속 시행착오를 겪어보며 이게 Entity 주소인지 아닌지를 판단해야합니다.
Local Entity 주소인지 아닌지 확인하는 방법에 대한 설명을 이어가겠습니다
아래 사진과 같이 edx의 주소를 한번 가져와보도록 하겠습니다
16진수로 표현되며 00EEA390라는 값을 가지고 있습니다
이 값을 Add Address Manually 버튼을 눌러 00EEA390 + F8 을 입력해보도록 하겠습니다
그럼 아래 사진과 같이 값이 현재 체력의 주소를 가리키고 있는것을 볼 수 있습니다
여기까지만 확인해도 00EEA390가 Local Entity 주소인것을 알 수 있지만
더 정확하게 판단하기 위해서 메모리뷰어를 켜보도록 하겠습니다
메모리 뷰어에서 Tools → Dissect data/structures 를 클릭해줍니다
아래와 같은 사진처럼
Group1에 우리가 아까 Local Entity 주소라고 추정했던 00EEA390를 입력해줍니다
입력이 되었으면 아래 사진과같이 Structures → Define new structure 순으로 클릭해줍니다
이름은 원하는대로 해주고 OK버튼을 눌러주세요
그럼 아래사진처럼 엄청나게 많은 오프셋들의 값을 육안으로 볼 수 있습니다
그리고 F8번째 오프셋을 따라가 보면 체력의 값이였던 22를 확인할 수 있습니다
또 오프셋들의 값을 육안으로 확인하면서 내려다 보면
아래 사진처럼 0x150에는 주무기의 총알 값이 있다는것도 확인할 수 있습니다
총알 값 이외에도 이 플레이어 객체가 가지고있는 정보는 대부분 이곳에서 오프셋과 함께 확인할 수 있습니다
(월드 좌표, 체력, 총알 등등)
이렇게 오프셋을 통해 확인가능한 플레이어 객체 주소가 바로 Local Entity 주소입니다
다음으로 이 Local Entity 주소의 포인터를 찾아보겠습니다
포인터를 찾는 이유는 현재 찾아둔 Local Entity주소는 동적인 주소이기에,
게임을 재시작하게되면 주소가 바뀌어버립니다
따라서 이런 수고를 덜기 위해 정적인 주소인 포인터를 찾는겁니다
Local Entity 주소의 포인터를 찾기 위해 Local Entity 주소인 00EEA390를 Hex(16진수)로 검색해주겠습니다
00EEA390입력 후 First Scan
아래 사진처럼 여러 주소가 검색되는데 그중 초록색 주소가 포인터를 나타냅니다
따라서 포인터인 세개의 주소를 모두 테이블로 옮겨줍니다
이 3개의 포인터는 우리가 찾은 모든 오프셋과 함께 적용이 됩니다
하지만 나중에 Entity List 와같이 더 많은것을 배우게 되면
세개의 포인터가 모두 작동을 하진 않는다는 것을 알 수 있습니다
당장은 문제가 없겠지만 이것은 더 나아가 분석을 해가면서 3개의 포인터 중에 어떤 포인터가
맞는지를 확인해야 하는겁니다
제가 앞서 분석한 포인터로는 아래 사진에있는 세개의 포인터 중
중간에 있는 50F4F4가 맞는 포인터이기 때문에 위아래에 있는 두 포인터를 테이블에서 삭제하겠습니다
이제 포인터의 주소를 클릭해서 오프셋을 적용시켜 보면 오프셋에 해당하는 값이 나오는것을 확인할 수 있습니다
'리버스 엔지니어링 > AssaultCube 게임 해킹' 카테고리의 다른 글
[4편] ReClass 사용해보기 (1) | 2024.02.05 |
---|---|
[2편] AssaultCube와 비쥬얼 스튜디오 2022 설치 (0) | 2022.12.05 |
[1편] 게임 핵의 종류와 기초 (AssaultCube) (1) | 2022.12.04 |
댓글