Cheating (12) 썸네일형 리스트형 Wesnoth 해킹하기 (9) Code Caves with DLL Wesnoth 해킹하기 (5)편 요약 Wesnoth 해킹하기 (5) 편에서 x64WinDbg를 이용하여 code cave을 만들었고 인게임에서 Terrain Description으로 진입 시 골드를 추가해주는 해킹을 해봤다. https://bithub.tistory.com/32 Wesnoth 해킹하기 (5) Code Cave Wesnoth 해킹하기 (4) 편에서는 assembly어의 기능을 유추함으로써 인게임에서 terrain description, recruit, recall 등에 해당하는 assembly어를 찾을 수 있었다. Wesnoth 해킹하기 (5)편에서는 code cave를 만들고 terr bithub.tistory.com Wesnoth 해킹하기 (5)편을 간략하게 요약하자면, 우리는 code.. Wesnoth 해킹하기 (8) DLL Memory Hack Wesnoth 해킹하기 (7) 편에서 external program을 통해 Wesnoth의 가상메모리를 read, write하였고 이를 통해 게임의 재화인 골드를 바꿀 수 있었다. External Hacking의 한계 아무래도 external program을 통해 게임 메모리를 해킹하는 것이다보니 제약사항이 많다. 예를 들어, ReadProcessMemory API를 통해 API 공식 문서에 의해 지정된 자료형으로만 받아올 수 있다. 게임 골드처럼 간단한 값을 받아올 때는 상관없지만 복잡한 데이터나 클래스를 받아올 때는 굉장히 어려움을 겪을 수 있다. 이러한 한계점을 극복하기 위해 DLL injection이 활용된다. 그래서 Wesnoth 해킹하기 (8) 편에서는 DLL injection하는 방법을 소개.. Wesnoth 해킹하기 (7) External Memory Hack 짜기 저번 시간에 Wesnoth의 디버깅을 실시함으로써 골드라는 재화가 *(*(0x17EECB8 + 0x60) + 0xA90)+0x4에 저장되어 있음을 알았다. 이번 시간에는 C++로 골드를 변경하는 핵을 만들 것이다. 핵을 만들기 위해 Windows API를 사용할 것인데 필요한 함수는 아래와 같다: HWND FindWindow( LPCWSTR lpClassName, LPCWSTR lpWindowName ); HANDLE OpenProcess( DWORD dwDesiredAccess, BOOL bInheritHandle, DWORD dwProcessId ); BOOL ReadProcessMemory( HANDLE hProcess, LPCVOID lpBaseAddress, LPVOID lpBuffer, SIZ.. Wesnoth 해킹하기 (6) DMA 파훼하기 게임을 해킹하다 보면 DMA로 인해 매번 원하는 정보가 있는 주소가 틀어진다. 예를 들어, 플레이어의 골드가 담겨있는 주소가 어제는 0x01CD0000 내일은 0x02CEABCD일 수 있다. 이를 파훼하기 위한 3가지 방법을 소개한다. 1번째 방법. Pointer Scan 아래 글에 방법이 자세히 소개되어 있다. https://bithub.tistory.com/29 Wesnoth 해킹하기 (2) Memory Scan 본 포스트는 wesnoth의 메모리를 스캔하고 수정함으로써 게임의 재화인 골드를 올리는 방법을 설명한다. Wesnoth 시작 Wesnoth를 실행해보자. Multiplayer - Local Game을 만들어보자. 게임이 시작된다. 현재 bithub.tistory.com 2번째 방법. Code.. Wesnoth 해킹하기 (5) Code Cave Wesnoth 해킹하기 (4) 편에서는 assembly어의 기능을 유추함으로써 인게임에서 terrain description, recruit, recall 등에 해당하는 assembly어를 찾을 수 있었다. Wesnoth 해킹하기 (5)편에서는 code cave를 만들고 terrain description 진입 시 code cave를 실행하도록 만들 것이다. 그리고 code cave에는 999 골드를 주는 코드를 넣어 terrain description 진입 시 999 골드를 받을 것이다. 바로 시작해보자. 주소 0x134360E 번지로 내려가보자. 위와 같이 아무 의미없는 코드가 분포되어 있다. 프로그램의 코드는 항상 이런 빈공간이 있는데 우린 이 공간을 활용하여 code cave를 만들 수 있다. W.. Wesnoth 해킹하기 (4) Assembly 유추하기 Wesnoth라는 게임에서 케릭터가 꼭 성에 있어야지만 병력 소집이 가능하다. 이번 포스트에서는 모든 지형에서 병력 소집이 가능하도록 해킹해보겠다. 3편에서 병력 소집 시 골드가 감소하는 코드를 찾았고 중단점을 설정하였다. 자, 처음으로 돌아가보자. 플레이어가 병력 소집을 하기 위한 interaction은 다음과 같다. 1. 성에서 우클릭. 2. 옵션창이 뜬다.(Recruit, Recall, Terrain Description... 등) 3. Recruit. function handle_options() { switch() { case A: recruit(); case B: recall(); case C: terrain_description(); } } function recruit() { reduce_.. Wesnoth 해킹하기 (3) Assembly 변경 본 포스트는 게임 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 해킹하기 (2) Memory Scan 본 포스트는 wesnoth의 메모리를 스캔하고 수정함으로써 게임의 재화인 골드를 올리는 방법을 설명한다. Wesnoth 시작 Wesnoth를 실행해보자. Multiplayer - Local Game을 만들어보자. 게임이 시작된다. 현재 732골드가 있다. Cheat Engine 실행 Process Memory Open 컴퓨터 돋보기 아이콘을 눌러 wesnoth의 virtual memory를 열자. 골드가 저장되는 메모리 위치를 알아내기 위해 732를 검색해본다. 732를 입력하고 First Scan을 누르자. 33건의 일치결과가 있다. 게임에서 골드를 조금 사용해보자. 케릭터가 성에 있는 상태에서 Ctrl + R을 눌러 Recruit창을 띄울 수 있다. 골드를 소모해 병력을 모집해보자. 14골드 Bowm.. Wesnoth 해킹하기 (1) 기본세팅 본 포스트는 wesnoth라는 게임을 해킹하기 위한 기본세팅을 소개한다. BoxStarter 설치 Windows Powershell을 관리자 권한으로 실행하고 다음 명령어를 실행한다. . { iwr -useb https://boxstarter.org/bootstrapper.ps1 } | iex; Get-Boxstarter -Force Cheat Engine, x64dbg, Chocolatey 설치 Install-BoxstarterPackage -PackageName https://raw.githubusercontent.com/GameHackingAcademy/vmsetup/master/vmsetup.txt -DisableReboots Cheat Engine은 메모리 스캐너, x64dbg는 디버거, Cho.. HxD 사용법 HxD는 hex editor다. 본 포스트에서는 게임의 save file을 불러와서 hex editing을 해보겠다. UI 설명 HxD를 실행하면 위에 사진과 같은 UI가 뜰 것이다. 16은 한 줄에 몇 바이트를 출력할 것인지를 의미한다. Windows(ANSI)는 어떤 디코딩을 사용할 것인지 의미한다. Hex는 어떤 number base로 출력할 것인지 의미한다. Search 특정 정보가 위치한 곳을 찾고 싶을 때 Search 기능을 사용할 수 있다. 예를 들어, 게임 저장 파일을 열고 골드를 건드리고 싶다 하자. 현재 보유한 골드는 88골드라고 하면, Ctrl + F를 눌러보자. 위와 같이 Find 창이 뜬다. Integer number 탭에서 88을 검색해보자. Byte order는 Little E.. 이전 1 2 다음