0x0102
Debugging Fundamentals 본문
1. 목표
메모리 수정을 통한 해킹은 강력하지만 한계가 있기에 게임 코드를 수정해야하는 경우가 존재한다.
이전 해킹에서 골드를 조작하여 유닛을 구매했다면 골드 없이도 유닛을 모집하는 것과 같은 해킹도 생각해 볼 수 있다.
이를 위해서는 게임이 실행되는 동안 게임 코드를 보는 '디버깅'을 통해 게임 코드를 수정해야 한다.
2. 도구
디버깅을 위해서는 디버거라는 도구가 필요하다.
디버거를 통해 게임을 일시 중지하거나 코드를 변경하거나, 레지스터를 수정하는 등의 작업이 가능해진다.
그러나 게임 코드를 잘못 변경하면 게임이나 컴퓨터 디스플레이 자체가 정지될 수 있으므로 해킹 머신과 개인 머신을 반드시 분리해야한다.
디버거에는 많은 종류가 있으나 IDA나 gbd를 주로 사용한다.
실습에서는 x64라는 오픈 소스 디버거를 사용할 것이다.
3. 디스어셈블리 및 디버깅
게임은 일반적으로 c++과 같은 고급언어로 프로그래밍되지만 실제 실행파일에는 cpu가 실행할 opcode만 포함되어 있다.
프로그램을 어셈블할 때 어셈블리 코드의 각 줄은 opcode로 변환되며 디스어셈블리는 opcode가 다시 어셈블리로 변환되는 프로세스이다.
주로 디버깅과 디스어셈블리는 같은 의미로 사용되지만 디버깅하지 않고 디스어셈블하는 것이 가능한 것 처럼 별도로 수행도 가능하다.
디스어셈블리를 통해 원본 고급 코드를 부분적으로 다시 생성할 수도 있는데, 이는 디컴파일이라고 한다.
디스어셈블리는 항상 실행되는 코드를 대표하지만 디컴파일은 그렇지 않으며 종종 코드의 원래 구조를 추측해야한다.
따라서 본 실습에서는 디컴파일은 다루지 않도록한다.
'Study > Game Hacking' 카테고리의 다른 글
Using Breakpoints (1) | 2024.02.15 |
---|---|
Assembly Fundamentals (0) | 2024.02.14 |
Memory Hacking (1) | 2024.02.13 |
Hacking Fundamentals (0) | 2024.02.07 |
Game Fundamentals (1) | 2024.02.06 |