일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | 4 | 5 | ||
6 | 7 | 8 | 9 | 10 | 11 | 12 |
13 | 14 | 15 | 16 | 17 | 18 | 19 |
20 | 21 | 22 | 23 | 24 | 25 | 26 |
27 | 28 | 29 | 30 |
- 필기
- 디지털 포렌식 전문가 2급
- BoB 12기
- 디포전 2급
- 디지털 포렌식 트랙
- CodeEngn
- Best of the Best
- 코드엔진
- race condition
- 프로그래머스
- 세마포어
- 논문리뷰
- BoB 12기 최종합격 후기
- cve-2022-26923
- 정보기
- h4ckinggame
- DLL 사이드로딩
- 뮤텍스
- cve-2024-6387
- malware
- 정보보안기사
- 리버싱
- Active Directory
- bob
- 디포전
- dll side-loading
- Today
- Total
SEO
[GHA] The Battle for Wesnoth Memory Hacking 실습 본문
https://gamehacking.academy/pages/1/05/
이 글은 Gamehacking Academy의 자료를 참고하여 작성된 것입니다.
The Battle for Wesnoth 1.14.9 설치
The Battle for Wesnoth은 무료 오픈소스 게임으로, 1.14.9 버전의 경우 안티 치팅 메커니즘이 없다고 합니다.
https://github.com/wesnoth/wesnoth
choco install wesnoth --version=1.14.9 -y
The Battle for Wesnoth 게임 설명
Battle for Wesnoth는 판타지 테마의 Turn-based Strategy Game으로, 다양한 캠페인과 멀티플레이어 기능을 제공합니다.
게임은 플레이어가 다양한 유닛과 전략을 사용하여 적과 싸우는 방식으로 진행됩니다. 고전적인 전략 게임을 좋아하는 사람들에게 매력적인 요소가 많은 이 게임은, 전술적 사고와 자원 관리가 중요한 역할을 합니다.
주요 특징
- 캠페인과 시나리오
Battle for Wesnoth에는 다양한 캠페인이 포함되어 있습니다. 각각의 캠페인은 독립적인 스토리라인을 가지고 있으며, 플레이어는 각 캠페인의 목표를 달성하기 위해 다양한 전략을 세워야 합니다. 캠페인은 난이도가 점차 상승하며, 각 미션을 클리어하면 새로운 유닛과 능력들이 잠금 해제됩니다. - 유닛과 진영
게임은 다양한 종족과 유닛으로 구성되어 있습니다. 예를 들어, 인간, 엘프, 드워프, 오크, 언데드 등 다양한 진영에서 선택할 수 있습니다. 각 진영은 고유의 유닛과 특성을 가지고 있어, 플레이어는 전투 스타일에 맞는 유닛을 선택하고 전략을 세워야 합니다. - 전투 시스템
전투는 기본적으로 차례대로 진행됩니다. 플레이어는 자신의 유닛을 움직여 적을 공격하고, 방어하거나 전략적인 위치를 차지합니다. 유닛의 이동 범위와 공격력, 방어력 등은 각각 다르기 때문에, 유닛의 특성을 잘 이해하고 적절하게 활용하는 것이 중요합니다. - 멀티플레이어
Battle for Wesnoth는 싱글플레이어뿐만 아니라 멀티플레이어 기능도 지원합니다. 친구들과 함께 실시간 또는 차례대로 진행되는 대전을 통해 전략적 기술을 겨룰 수 있습니다. 이 기능은 게임의 재미를 더욱 배가시키는 요소입니다. - 무료 오픈 소스
이 게임은 오픈 소스로 제공되므로 누구나 무료로 다운로드하여 플레이할 수 있습니다. 또한, 커스터마이징 및 모드를 추가하여 게임을 더욱 풍부하게 즐길 수 있습니다. 개발자는 커뮤니티와의 협력을 통해 게임을 지속적으로 개선하고 있습니다.
Memory Hacking
멀티플레이어에서 오프라인으로 기본 설정하여 게임을 시작하겠습니다.
게임을 하다보면 상단에 있는 골드의 값이 변하는 것을 확인할 수 있습니다.
이 게임에서 골드는 새로운 유닛을 모집하는데 사용되며, 각 턴마다 점령한 마을에서 수입이 발생합니다. 따라서 골드는 게임에서 군대를 키울 수 있는 수단이 됩니다.
이러한 골드를 조작할 수 있다면 군대를 쉽게 키울 수 있는 치팅이 될 수 있겠죠?
이 골드의 값을 업데이트하기 위한 변수가 게임 바이너리 내부에 선언되어, RAM에서 게임이 돌아가는 동안 동적으로 해당 변수의 값이 변하며 동작할 것 입니다. 그래서 이를 변경하기 위해서는 메모리에 로드된 골드 변수의 위치를 찾고 값을 변경해야 합니다.
치트 엔진을 통해 현재 골드 변수의 값인 83을 바탕으로 메모리를 스캔하였습니다. 초기 스캔 값은 당연히 수천 개의 같은 결과를 반환할 수 밖에 없습니다. 게임처럼 큰 메모리에서 83과 같은 값을 가지는 다양한 메모리 공간이 존재할테니까요.
따라서 83의 값이 저장된 골드 변수를 찾기 위해 게임에서 골드 값을 변화하게 한 후, 83 → 다음 변환 값으로 변하는 변수를 필터링합니다.
이런식으로 반복하게 되면 마지막에는 gold 변수에 해당하는 값들만 남게되겠죠?
다음 골드 값이 87을 치트 엔진에 넣고 Next Scan으로 검사하자, 하나의 메모리 값만이 남게 되었습니다. 아마도 이 메모리 값이 골드 변수의 주소일 가능성이 높을 것 같습니다.
왼쪽 상단에 뜬 메모리 행을 더블 클릭하여 하단으로 이동시킵니다.
value 값을 더블 클릭하면 화면과 같이 값을 조작할 수 있습니다. 저는 예시로 골드 변수를 1000으로 만들어보겠습니다.
값을 설정한 이후에는 게임에서도 1000 골드로 변경된 것을 확인할 수 있습니다.
'Security > Game Hacking' 카테고리의 다른 글
게임핵의 종류와 원리 (1) | 2025.01.30 |
---|---|
[GHA] The Battle for Wesnoth 코드 패치 실습 - Code Cave (1) | 2025.01.19 |
[GHA] The Battle for Wesnoth 코드 패치 실습 - 비정상적 함수 실행 (0) | 2025.01.13 |
[GHA] The Battle for Wesnoth 코드 패치 실습 - 골드 감소 로직 패치 (0) | 2025.01.13 |