본문 바로가기

Cheating

Wesnoth 해킹하기 (3) Assembly 변경

728x90

본 포스트는 게임 Wesnoth의 코드를 변경하여 골드가 소모되지 않도록 해킹하는 방법을 설명한다.

 

Wesnoth 게임과 Cheat Engine을 실행해주자.

 

Debugger를 이용해 Wesnoth게임을 디버깅할 것이다.

C:\ProgramData\chocolatey\lib\x64dbg.portable\tools\release\x32\x32dbg.exe를 실행하자.

Wesnoth게임은 32비트 프로그램이기 때문에 x32 디버거를 실행해야 한다.

 

 

x32dbg 첫실행화면이다.

우선 설정부터 만져주자.

 

 

설정 - 환경설정에 진입하여 TLS 콜백을 꺼주자.

 

파일 - 부착을 클릭하여 wesnoth.exe를 디버깅하자.

 

 

메인화면에 ntdll.dll의 실행코드가 뜬다.

아래쪽에 덤프는 wesnoth가 실행되고 있는 메모리를 나타낸다.

오른쪽 상단에는 레지스터와 레지스터 값을 볼 수 있다.

오른쪽 하단에는 wesnoth의 stack을 볼 수 있다.

 

기호 탭에서 wesnoth.exe 더블클릭
게임 코드

기호(Symbol) 탭으로 이동하여 wesnoth.exe를 더블클릭해보자.

그리고 CPU탭으로 돌아오면 게임의 코드를 볼 수 있다.

 

 

 

 

자, 이제 Cheat Engine으로 들어가 골드가 저장되어 있는 변수의 주소를 알아내자.

주소 0x09F05E54에 저장되어 있음을 알 수 있다.

 

 

x32dbg로 돌아와 하단 덤프 영역에서 우클릭 후 이동(Go to...) - 표현식(Expression)을 클릭한다.

 

 

아까 Cheat Engine에서 찾은 골드가 저장된 변수의 주소를 넣어준다.

 

 

그럼 덤프영역에 주소 09F05E54에 저장되어 있는 값을 보여준다.

0x000002DC(Little Endian이므로)가 저장되어 있다.

현재 나의 골드는 732골드로 16진법으로 변환하면 정확히 일치함을 알 수 있다.

 

 

자, 이제 덤프영역에서 해당 주소를 우클릭하고 중단점(Breakpoint) - 하드웨어, 쓰기(Hardware, Write) - DWord를 클릭한다.

이는 해당 주소에 write operation이 일어나는 지점을 중단점으로 설정한다.

 

 

중단점 탭으로 이동해 중단점이 잘 설정되었는지 확인해주자.

 

 

 

Wesnoth 게임으로 돌아가 병력을 소집하여 골드를 소모해주자.

그 순간 게임이 freeze될 것이다.

이는 우리의 debugger에 중단점을 설정했기 때문이다.

 

Debugger로 돌아오면 cmp byte ptr ss:[ebp-385],0에서 코드 실행이 중단된 것을 알 수 있다.

참고로 EIP(Extended Instruction Pointer)는 program의 실행 위치를 나타내는 special purpose register다.

EIP위에 다음 코드가 보인다.

 

sub dword ptr ds:[edx+4],eax

 

병력을 소집할 때 위 코드가 실행되고 중단되었다.

아마 edx+4에 RAM에 gold가 저장되어 있는 변수의 주소가 들어있고, eax는 소집한 병력의 가격이 들어있지 않을까?

위 코드가 병력 소집 시 우리의 골드를 깎는 코드가 아닐까하고 합리적인 의심을 해본다.

 

해당 코드를 nop로 바꿔보자.


표현식은 debugger가 알아서 채워준다.

의심하지말고 확인.

 

 

NOP(no operation)가 채워진 모습이다.

 

 

이제 실행버튼을 눌러 게임으로 돌아가자.

그리고 병력소집을 해보자.

더 이상 병력을 소집해도 골드가 깎이지 않을 것이다.

 

해킹 성공.

'Cheating' 카테고리의 다른 글

Wesnoth 해킹하기 (5) Code Cave  (0) 2024.02.28
Wesnoth 해킹하기 (4) Assembly 유추하기  (1) 2024.02.27
Wesnoth 해킹하기 (2) Memory Scan  (1) 2024.02.27
Wesnoth 해킹하기 (1) 기본세팅  (0) 2024.02.27
HxD 사용법  (1) 2024.02.24