일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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 |
- malware
- 디포전
- 디지털 포렌식 트랙
- BoB 12기 최종합격 후기
- 디지털 포렌식 전문가 2급
- 세마포어
- DLL 사이드로딩
- h4ckinggame
- 코드엔진
- 논문리뷰
- 리버싱
- 프로그래머스
- dll side-loading
- 필기
- CodeEngn
- BoB 12기
- 정보기
- 뮤텍스
- bob
- Best of the Best
- race condition
- 디포전 2급
- 정보보안기사
- cve-2022-26923
- cve-2024-6387
- Active Directory
- Today
- Total
SEO
[GHA] The Battle for Wesnoth 코드 패치 실습 - 골드 감소 로직 패치 본문
https://gamehacking.academy/pages/2/04/
이 글은 Gamehacking Academy의 자료를 참고하여 작성된 것입니다.
이전에 포스팅 했던 방법으로 골드 변수의 메모리 주소를 찾았습니다. 이 메모리 주소를 바탕으로 디버깅을 통해 골드로 그룹을 만들었을 때, 골드 값을 감소 시키는 로직을 찾아보겠습니다.
TLS Callbacks 관련 옵션을 체크 해제합니다. 이를 통해 TLS Callbacks이 일어날 때 x32dbg가 자동으로 팝업되는 것을 비활성화합니다.
이후 실행 중인 게임에 attach하여 실습을 진행합니다.
메모리 덤프에서 치트 엔진에서 확인한 메모리 값을 따라갑니다. 그럼 치트 엔진에서 확인한 것과 같은 골드 변수의 값을 확인할 수 있습니다.
이 메모리에 BP를 걸기 위해 해당 값을 오른쪽 버튼 클릭 → BP → Hardware, Write → DWORD를 선택합니다.
게임에서 골드 16을 지불하고 유닛을 키워보겠습니다.
골드 변수가 사용되게 되고, 위 코드에서 중단점이 설정되게 됩니다.
이 두 코드에 집중해서 해석을 해보면, 0x007CCD9B에 있는 코드는 사용자가 지불하기로 결정한 recruit에 해당하는 값을 가져오는 것을 알 수 있습니다. 저는 16 골드를 지불하고 군대를 늘렸기 때문에 eax에는 0x10 이란 값이 담겨 있습니다.
0x007CCD9E에 있는 코드는 골드 값을 계산하기 위해 사용되는 코드임을 알 수 있습니다. 따라서 0x007CCD9B 코드를 통해 가져온 recruit의 값을 현재 골드 변수에서 빼는 동작을 수행합니다.
만약 0x007CCD9E 코드를 실행되지 않게 패치한다면 골드를 줄이지 않고서도 계속해서 군대를 늘릴 수 있겠죠?
0x007CCD9E 코드 오른쪽 버튼 클릭 → Binary → Fill with NOPs 를 선택하면 바이너리를 패치할 수 있습니다.
0x007CCD9E 코드에 있던 3바이트의 opcode를 모드 90인 NOP으로 패치하였습니다.
운영체제는 90(NOP)을 만나면 실행 시 아무런 동작을 하지 않고, 다음 동작으로 넘어가게 됩니다.
이후, BP를 제거하고 계속해서 군대를 늘려보면 골드가 줄어들지 않았음에도 크루원을 계속해서 늘릴 수 있음을 확인할 수 있습니다.
'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 Memory Hacking 실습 (0) | 2025.01.09 |