SEO

[GHA] The Battle for Wesnoth 코드 패치 실습 - 골드 감소 로직 패치 본문

Security/Game Hacking

[GHA] The Battle for Wesnoth 코드 패치 실습 - 골드 감소 로직 패치

Crain 2025. 1. 13. 00:40
반응형

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를 제거하고 계속해서 군대를 늘려보면 골드가 줄어들지 않았음에도 크루원을 계속해서 늘릴 수 있음을 확인할 수 있습니다.

반응형