본 포스트는 wesnoth의 메모리를 스캔하고 수정함으로써 게임의 재화인 골드를 올리는 방법을 설명한다.
Wesnoth 시작
Wesnoth를 실행해보자.
Multiplayer - Local Game을 만들어보자.
게임이 시작된다. 현재 732골드가 있다.
Cheat Engine 실행
Process Memory Open
컴퓨터 돋보기 아이콘을 눌러 wesnoth의 virtual memory를 열자.
골드가 저장되는 메모리 위치를 알아내기 위해 732를 검색해본다.
732를 입력하고 First Scan을 누르자.
33건의 일치결과가 있다.
게임에서 골드를 조금 사용해보자.
케릭터가 성에 있는 상태에서 Ctrl + R을 눌러 Recruit창을 띄울 수 있다.
골드를 소모해 병력을 모집해보자.
14골드 Bowman을 소집해보았다.
718골드가 남은 상태.
Cheat Engine으로 돌아와 718을 검색해보자.
718을 입력하고 Next Scan 클릭.
결과가 단 하나 밖에 없다.
Gold는 주소 0x0764AB2C에 저장되고 있음을 알 수 있다.
0x0764AB2C 부분을 더블클릭하여 해당 주소를 아래 표로 내리자.
아래 창에 주소를 넣어두면 다음에 Cheat Engine을 껐다 켜도 다시 불러올 수 있다.
보유 골드를 9999골드로 수정해보자.
Value 부분을 더블클릭하고 9999를 입력해보자.
게임으로 돌아오면 9999골드가 있는 것을 확인해볼 수 있다.
Pointer Scan
문제는 게임을 실행할 때마다 gold가 저장되는 offset이 매번 바뀐다는 것이다.
이는 Dynamic Memory Allocation(DMA) 때문이다.
그래서 게임을 시작하고 골드를 수정하고 싶을 때마다 매번 memory scan을 진행해야되는 번거로움이 있다.
이를 해결하기 위해 사용할 수 있는 것이 Pointer Scan이다.
wesnoth.exe의 base 주소의 offset은 매번 고정되어 있다.
Pointer scan은 바로 이 점을 이용하여 wesnoth.exe의 base 공간에 gold를 참조하는 포인터 변수를 찾는다.
백문이 불여일견.
바로 실습해보자.
아까 저장했던 주소를 우클릭하고 Pointer scan for this address를 클릭해보자.
Option은 대충 위 사진처럼 맞춰두고 OK 클릭.
주소 0x0764AB2C를 참조하는 모든 포인터 변수는 무수히 많을 것이다.
이를 .PTR 파일로 저장하기 위한 창이 뜬다.
gold.PTR이라고 저장해보자.
잠시 후 검색이 완료된다.
무수히 많은 결과가 뜬다.
해당 결과 모두 gold 변수의 주소를 가르킨다.
하지만 모든 결과가 게임을 껐을 때 gold 변수의 주소를 가르키는 것은 아니다.
저것들 중에 게임을 껐다켜도 reliable하게 gold 변수의 주소를 가르키는 놈을 찾아야 한다.
우선 wesnoth 게임을 종료하고 재실행하자.
메뉴에서 Load를 눌러 최근게임을 불러올 수 있다.
Cheat Enigne에서도 wesnoth의 process memory를 다시 불러오자.
이전에 찾았던 주소 0x764AB2C에 쓰레기값이 들어있는 것을 확인할 수 있다.
이는 gold가 저장되는 변수의 offset이 바뀌었기 때문이다.
Memory View에 들어가자.
Tools - Pointer scan에 들어가자.
File - Open을 눌러 좀전에 저장했던 gold.PTR을 불러오자.
Pointer scanner - Rescan memory를 클릭하자.
현재 골드를 입력해준다.
현재 골드의 양을 입력하고 OK를 눌러 rescan을 실행하자.
[2nd]gold.PTR이라고 저장해보자.
gold.PTR에 저장된 포인터 중에 게임을 껐다켜고도 골드가 저장된 변수를 참조하는 포인터를 모아놓은 결과다.
경험상 offset이 적은 포인터일수록 게임을 껐다켜도 reliable하다.
"wesnoth.exe" + 01150DB0항목을 더블클릭해보자.
Cheat Engine 메인창에 골드가 저장되는 변수를 가르키는 포인터가 저장되었다.
이제 게임을 껐다켜도 해당 포인터는 계속 골드를 가르키게 된다.
'Cheating' 카테고리의 다른 글
Wesnoth 해킹하기 (4) Assembly 유추하기 (1) | 2024.02.27 |
---|---|
Wesnoth 해킹하기 (3) Assembly 변경 (1) | 2024.02.27 |
Wesnoth 해킹하기 (1) 기본세팅 (0) | 2024.02.27 |
HxD 사용법 (1) | 2024.02.24 |
Hex Editing 정리 (0) | 2024.02.24 |