책 소개
최신 코드는 여기에서 내려 받으실 수 있습니다.
요약
인터넷에서 쉽게 구할 수 있는 간단한 툴을 이용해 게임 봇을 만들고 게임을 해킹하는 다양한 기법을 다룬다. 메모리 스캐닝 같은 고전 기법에서부터 반응형 해킹에 이르기까지, 책의 내용을 천천히 따라가다 보면 게임 해킹의 기본 소양을 쌓을 수 있게 될 것이다. 어떤 게임을 대상으로 실습할지 고민할 필요 없다. 제공되는 간단한 게임 코드를 직접 수행하면서 게임 해킹의 원리를 파악할 수 있을 것이다.
추천의 글
닉은 정말 훌륭한 사람이다. 우리는 당신이 상상할 수 있는 모든 방법대로 죽이 척척 잘 맞았다. 나는 잠시 동안 보안 관련 일을 한 적이 있었고, 그는 나보다 조금 더 젊었다. 나는 대학을 다녔었고 그는 대학에 대해 잘 알지 못했다. 나는 신앙이 있지만 그는 그렇지 않았다. 흥미로운 사실은 그 모든 게 그다지 중요하지 않았다는 점이다. 우리는 이 모든 것을 크게 신경 쓰지 않았다. 나이, 인종, 성별, 학위 이런 것들은 게임과 해킹 그리고 코딩에서는 아무 의미도 없는 것들이다!
그는 결국 해냈다. 그는 재미있는 사람이고, 영리하며, 열심히 일한다. 또한 누구보다 인내심이 강한 사람이다. 게임과 해킹, 코딩에 대한 공통점을 누구보다 잘 이해할 수 있는 친구다. 그는 이런 분야에서 일하면서 가장 수익이 높은 봇을 만들어내는 사람이다.
이 책의 첫 부분에서 그는 게임을 찬찬히 뜯어보게 만들고 당신에게 소프트웨어를 조사할 수 있는 툴과 간단한 트릭을 가르쳐줄 것이다. 당신은 게임의 내부에 대해, 그리고 이들을 어떻게 분해하며 어떻게 플레이를 수정할 수 있는지 배우게 될 것이다. 예를 들어, 그는 당신에게 안티 치트를 피하면서 어떻게 플레이를 자동화할 수 있는지에 대해 알려줄 것이다. 당신이 만든 봇이 당신이 자리에 없는데도 경험치와 골드, 아이템을 모은다고 상상해보라. 멋지지 않은가?
치터들이 어떻게 치팅을 수행하는지 궁금하지 않았나? 당신이 만든 게임을 패치하거나 봇으로부터 보호하고 싶어 하지 않았나? 커피 한 잔을 시키고 노트북을 열어보자. 그리고 이제 이 책을 즐겨보자.
- 자레드 드모트(Dr. Jared DeMott) / 보안 전문가 & 소프트웨어 개발자
이 책에서 다루는 내용
█ 치트 엔진을 사용해 메모리 스캔하고 수정하기
█ OllyDbg를 사용해 프로그램 구조를 살펴보고 플로우 수행하기
█ 프로세스 모니터를 사용해 프로세스 로그를 남기고 필요한 데이터 파일 찾아내기
█ NOPing, 후킹과 그 밖의 기법들을 사용해 컨트롤 플로우 조작하기
█ 일반적인 게임 메모리 구조 찾아내고 분석하기
█ 월핵이나 헤드업 디스플레이 같은 평소에 알 수 없는 정보 쉽게 나타내기
█ 자동 힐러나 콤보 봇 같은 반응형 해킹 기법
█ 동굴 탐험가나 자동 루터 같은 인공지능을 겸비한 봇
이 책의 대상 독자
소프트웨어 개발을 가르치는 것을 목적으로 하지 않으며, 독자들이 소프트웨어 개발에 대한 기본 지식을 어느 정도 갖추고 있다고 상정한다. 윈도우 기반의 소프트웨어 개발뿐만 아니라 게임 개발과 메모리 관리에 대한 일정 정도의 지식이 있다고 가정한다. 이 정도 소양을 갖추고 있다면 내용을 따라가기에 충분하며, 만약 X86 어셈블리와 윈도우 인터널 개발에 대한 경험이 있다면 좀 더 자세한 구현 방법을 알 수 있을 것이다.
이 책의 구성
이 책은 크게 4개의 부로 구성돼 있으며, 각 부는 게임 해킹의 각기 다른 핵심적인 부분들을 다루고 있다.
1부, ‘해킹 도구’에서는 게임을 해킹하는 데 사용되는 도구에 대해 알아본다.
1장, ‘치트 엔진을 사용하는 메모리 스캐닝’에서는 치트 엔진을 사용해 중요한 값들을 획득하기 위해 어떻게 게임 메모리를 스캔하는지에 대해 알아본다.
2장, ‘OllyDbg를 이용한 게임 디버깅’에서는 OllyDbg를 활용한 디버깅과 리버스 엔지니어링에 대한 집중 훈련을 받을 수 있다. 여기서 배운 기법들은 추후 봇을 만들고 코드 인젝션을 수행할 때 유용하게 쓰일 것이다.
3장, ‘프로세스 모니터와 프로세스 익스플로러 살펴보기’에서는 이 두 가지 정보 수집 툴을 사용해 게임이 파일이 그 밖의 프로세스, 네트워크, OS 등과 어떻게 상호작용하는지 감시하는 법을 배울 것이다.
1부의 각 장에서 새로 습득한 스킬을 테스트하고 연마하는 데 필요한 커스텀 바이너리를 포함해 다양한 온라인 리소스들이 제공될 것이다.
1부에서 제공되는 툴을 어느 정도 다루게 된다면, 2부, ‘게임 해부’를 통해 게임 내부에 침입해 어떻게 게임이 동작하는지를 배우게 될 것이다.
4장, ‘코드에서 메모리로: 기본 원리’에서는 게임 바이너리 안에 게임 소스 코드와 데이터가 컴파일되고 나면 어떤 모습인지를 배우게 될 것이다.
5장, ‘고급 메모리 포렌식’은 4장에서 배운 지식을 좀 더 심화하는 과정이다. 가상 메모리 값을 그럴듯하게 배치하고 복잡한 클래스와 구조를 분해하기 위해 어떻게 메모리를 스캔하고 디버깅을 활용할 수 있는지에 대해 배우게 될 것이다.
6장, ‘게임 메모리 읽고 쓰기’에서는 현재 구동 중인 게임에서 어떻게 데이터를 읽고 수정할 수 있는지 보여줄 것이다.
2부에서도 배운 내용을 검증하기 위해 심도 있는 예제 코드들이 제공될 것이다.
3부, ‘인형 가지고 놀기’에서는 게임을 마리오네트 인형으로 만들어 가지고 놀 수 있는 퍼피티어링(puppeteering) 스킬에 대해 배울 것이다.
1부와 2부에서 배운 기법들을 기반으로 7장, ‘코드 인젝션’에서는 게임 주소 공간에 직접 만든 코드를 인젝션하고 수행하는 방법을 설명한다.
코드 인젝션을 마스터했다면 8장, ‘게임 컨트롤 플로우 조작하기’에서 게임이 수행하는 기능을 중간에 가로채 이를 수정하고 무력화하는 방법을 배워볼 것이다. 어도비 AIR와 다이렉트3D의 일반 라이브러리 예제로 마무리된다.
클래스를 완벽하게 조종하기 위해 3부에서는 미리 작성된 방대한 양의 코드를 제공한다. 이 코드를 기반으로 봇을 만들 수 있을 것이다.
4부, ‘봇 만들기’에서는 앞서 배웠던 툴과 해체 능력, 퍼피티어링 스킬 그리고 소프트웨어 엔지니어링 배경지식을 활용해 강력한 봇을 만드는 법을 배워볼 것이다.
9장, ‘초능력으로 전장의 안개 걷어내기’에서는 기본적으로는 표시되지 않는 유용한 정보를 게임상에 표시하는 방법에 대해 배워본다. 여기에는 숨어 있는 적의 위치, 시간당 획득할 수 있는 경험치 등이 포함된다.
10장, ‘반응형 해킹’에서는 체력이 감소하는 것과 같은 인게임 이벤트를 감지하고 봇이 이런 이벤트에 사람보다 빨리 반응할 수 있게 해주는 코드 패턴을 보여줄 것이다.
11장, ‘스스로 움직이는 봇 만들기’에서는 사람이 조작하지 않고 봇이 게임을 자동으로 플레이할 수 있는 방법에 대해 배워볼 것이다. 여기서 만드는 자동 봇은 제어 이론과 상태 머신, 검색 알고리즘과 수학적 모델이 한데 모인 결과물이다.
이 장은 또한 이 주제들에 대한 핵심 과정이 될 것이다.
12장, ‘숨어 있기’에서는 만들어진 봇을 감지하고 방해하는 시스템에서 벗어나 이를 회피하는 고급 기술에 대해 배워볼 것이다.
이전 장들과 마찬가지로 4부에서도 다양한 예제 코드를 제공한다. 4부의 예제들 중 일부는 이전 장들의 코드를 기반으로 작성됐다. 그 밖의 코드들 역시 독자 여러분이 봇을 만들 때 바로 활용할 수 있도록 간단하고 직관적인 디자인 패턴을 갖고 있다. 4개 부를 모두 읽는다면 가상 세계에서 초능력을 가진 히어로가 될 수 있을 것이다.
목차
목차
- 1부. 해킹 도구
- 1장. 치트 엔진을 사용하는 메모리 스캐닝
- 왜 메모리 스캐너가 중요한가
- 기본적인 메모리 스캐닝
- 치트 엔진 메모리 스캐너
- 스캔 유형
- First Scan 수행하기
- Next Scan
- 정확한 결과를 얻지 못하는 경우
- 치트 테이블
- 게임 메모리 변조
- 치트 엔진을 통한 수동 변조
- 트레이너 제너레이터
- 포인터 스캐닝
- 포인터 체인
- 기본적인 포인터 스캐닝
- 치트 엔진을 사용한 포인터 스캐닝
- 포인터 재검색
- 루아 스크립팅 환경
- 어셈블리 패턴 찾기
- 스트링 찾기
- 마치며
- 2장. OllyDbg를 이용한 게임 디버깅
- OllyDbg 사용자 인터페이스 살펴보기
- OllyDbg의 CPU 창
- 게임 어셈블리 코드 표시하고 탐색하기
- 레지스터 내용 표시하고 편집하기
- 게임 메모리 표시하고 탐색하기
- 게임 콜 스택 표시하기
- 코드 패치 제작하기
- 어셈블리 코드를 통해 트레이싱하기
- OllyDbg 표현식 엔진
- 표현식으로 브레이크포인트 만들기
- 표현식 엔진에서 연산자 사용하기
- 기본 표현식 활용하기
- 표현식을 사용해 메모리 콘텐츠에 접근하기
- OllyDbg 표현식 실제로 활용하기
- 특정한 플레이어 이름이 출력되면 연산 중단하기
- 캐릭터의 체력이 떨어졌을 때 수행 멈추기
- 게임 해커를 위한 OllyDbg 플러그인
- Asm2Clipboard를 사용해 어셈블리 코드 복사하기
- 치트 유틸리티로 OllyDbg에 치트 엔진 추가하기
- 명령줄 플러그인을 통해 OllyDbg 제어하기
- OllyFlow를 활용해 컨트롤 플로우 시각화하기
- 마치며
- 3장. 프로세스 모니터와 프로세스 익스플로러 살펴보기
- 프로세스 모니터
- 인게임 이벤트 로그 남기기
- 프로세스 모니터 로그의 이벤트 조사하기
- 더 많은 데이터를 얻기 위해 게임 디버깅하기
- 프로세스 익스플로러
- 프로세스 익스플로러의 사용자 인터페이스와 제어
- 프로세스 속성 조사하기
- 핸들 조작 옵션
- 마치며
- 프로세스 모니터
- 2부. 게임 해부
- 4장. 코드에서 메모리로: 기본 원리
- 변수와 그 밖의 데이터가 메모리에 저장되는 방법
- 숫자 데이터
- 스트링 데이터
- 데이터 구조체
- 유니온
- 클래스와 VF 테이블
- x86 어셈블리 크래시 코스
- 명령어
- 프로세서 레지스터
- 콜 스택
- 게임 해킹에서 중요한 x86 명령어
- 마치며
- 변수와 그 밖의 데이터가 메모리에 저장되는 방법
- 5장. 고급 메모리 포렌식
- 고급 메모리 스캐닝
- 목적 추론하기
- OllyDbg로 플레이어의 체력 확인하기
- 게임 업데이트 이후 새로운 주소 찾아내기
- 복잡한 게임 데이터 식별하기
- std::string 클래스
- std::vector 클래스
- std::list 클래스
- std::map 클래스
- 마치며
- 고급 메모리 스캐닝
- 6장. 게임 메모리 읽고 쓰기
- 게임 프로세스 식별자 알아내기
- 프로세스 핸들 획득하기
- OpenProcess()로 작업하기
- 메모리 접근
- ReadProcessMemory()와 WriteProcessMemory()로 작업하기
- ReadProcessMemory()와 WriteProcessMemory()로 메모리의 값 읽어오기
- 정형화된 메모리 액세스 함수 작성하기
- 메모리 보호
- x86 윈도우 메모리 보호 속성 구별하기
- 메모리 보호 변경
- 주소 공간 배치 난수화
- 간편한 봇 개발을 위해 ASLR 비활성화하기
- 보호 모드에서 ASLR 우회하기
- 마치며
- 게임 프로세스 식별자 알아내기
- 3부. 인형 가지고 놀기
- 7장. 코드 인젝션
- 스레드 인젝션으로 코드 케이브 주입하기
- 어셈블리 코드 케이브 만들기
- 어셈블리를 셸코드로 변환하기
- 메모리에 코드 케이브 작성하기
- 스레드 인젝션 활용해 코드 케이브 수행하기
- 코드 케이브를 실행하기 위해 게임 메인 스레드 하이재킹하기
- 어셈블리 코드 케이브 만들기
- 스켈리톤 셸코드 작성하고 메모리 할당하기
- 메인 스레드 찾고 멈추기
- 완벽한 제어를 위해 DLL 주입하기
- DLL 로딩을 위해 프로세스 속이기
- 주입된 DLL 안에서 메모리 접근하기
- 주입된 DLL을 통해 ASLR 우회하기
- 마치며
- 스레드 인젝션으로 코드 케이브 주입하기
- 8장. 게임 컨트롤 플로우 조작하기
- NOP를 통해 코드 삭제하기
- NOP를 사용해야 하는 경우
- NOP를 사용하는 방법
- 게임 실행 변경을 위해 후킹하기
- 콜 후킹
- VF 테이블 후킹
- IAT 후킹
- 점프 후킹
- 어도비 AIR에 콜 훅 적용하기
- RTMP 접근하기
- RTMPS encode() 함수 후킹하기
- decode() 함수로 RTMPS 후킹하기
- 훅 배치하기
- 다이렉트3D에 점프 훅과 VF 훅 적용하기
- 드로잉 루프
- 다이렉트3D 디바이스 찾기
- EndScene() 훅 작성하기
- Reset() 후킹 작성하기
- 다음으로 할 일은?
- 마치며
- NOP를 통해 코드 삭제하기
- 4부. 봇 만들기
- 9장. 초능력으로 전장의 안개 걷어내기
- 배경지식
- 라이트핵을 사용해 숨겨진 정보 찾아내기
- Central Ambient Light 소스 추가하기
- Absolute Ambient Light 증폭하기
- 그 밖의 라이트핵 기법들
- 월핵을 통해 숨어 있는 적 파악하기
- z 버퍼링으로 렌더링하기
- 다이렉트3D 월핵 생성하기
- 드러내려는 모델의 지문 채취하기
- 줌핵을 통해 더 넓은 시야 확보하기
- 줌핵 NOP 하기
- 줌핵 후킹 맛보기
- HUD에 숨겨진 정보 표시하기
- 경험치 HUD 만들기
- 데이터 위치를 찾기 위해 후킹 사용하기
- 그 밖의 ESP 해킹
- 마치며
- 10장. 반응형 해킹
- 게임 이벤트 관찰하기
- 메모리 모니터링하기
- 시각적 단서 찾아내기
- 네트워크 트래픽 가로채기
- 게임
- 실제 게임 안에서 액션 수행하기
- 키보드 에뮬레이팅
- 패킷 전송하기
- 한 번에 묶기
- 퍼펙트 힐러 만들기
- CC 스킬에 저항하기
- 마나가 줄어드는 것 막기
- 마치며
- 게임 이벤트 관찰하기
- 11장. 스스로 움직이는 봇 만들기
- 제어 이론과 게임 해킹
- 상태 머신
- 제어 이론과 상태 머신 결합하기
- 기본적인 힐러 상태 머신
- 복잡한 가상 상태 머신
- 에러 수정
- 탐색 알고리즘을 사용한 패스파인딩
- 2개의 일반적인 탐색 기법
- 탐색을 방해하는 장애물
- A* 탐색 알고리즘
- A* 탐색이 특히 유용한 경우
- 평범하지만 멋진 자동화 해킹 툴
- 케이브봇으로 루팅하기
- 워봇으로 자동 전투하기
- 마치며
- 12장. 숨어 있기
- 저명한 안티 치트 소프트웨어들
- 펑크버스터 툴킷
- 시그니처 기반 검출
- 스크린샷
- 해시 검증
- ESEA 안티 치트 툴킷
- VAC 툴킷
- DNS 캐시 스캔
- 바이너리 검증
- 긍정 오류
- 게임가드 툴킷
- 사용자 모드 루트킷
- 커널 모드 루트킷
- 워든 툴킷
- 봇의 흔적 관리하기
- 흔적을 최소화하기
- 흔적 가리기
- 디버거를 검출하기 위해 봇을 교육하기
- 안티 디버깅 기법
- 시그니처 기반 검색 무력화하기
- 스크린샷 무력화하기
- 바이너리 검증 무력화하기
- 안티 치트 루트킷 무력화하기
- 휴리스틱 무력화하기
관련 블로그 글
게임 해킹, 어떻게 활용할 것인가?
게임이 등장한 이후 지금까지 해커와 게임 개발자 간의 전쟁이 계속 이어져 왔다.
게임 개발자들은 그들이 만든 게임을 해커에게서 보호하기 위해 노력하고 해커들은 강화되는 보안을 뚫기 위해 은밀하고
복잡한 기법을 사용하기 시작했다.
게임 해킹에는 익스플로잇(Exploit), 계정 도용, 치팅(Cheating), 매크로(봇) 등 사용하는 목적과 방법에 따라 다양한 기법이 존재한다.
해커들이 해킹을 하는 이유도 여러가지다. 그래픽을 자기 마음대로 고쳐보거나, 좀 더 나은 성능을 원하거나, 개인적인 방법을 사용해 좀 더 게임을 쉽게 플레이하고, 다른 사람보다 앞서 나가고 싶은 욕구가 바로 해킹을 하는 계기가 된다.
게임을 플레이하면서 다른 사람들보다 빠르고 쉽게 앞서 나가고 이를 통해 실제로 금전적인 이익까지 얻게 되는 것이다.
인기 있는 게임일수록 해커들의 목표가 되기 쉽지만 게임 회사들이 해커들의 공격에 속수무책으로 당하고 있는 것만은 아니다.
게임 해킹이 점점 교묘해지면서 최근 해킹을 강력하게 제제하려는 움직임이 커지는 가운데 불법 게임 해킹 사용으로 인해 처벌을 받은 사례도 늘고 있다.
인기 게임 <오버워치>나 <배틀그라운드>
역시 해킹에서 자유롭지 못했다.
올해 1월 19일 블리자드는
오버워치는 공식 홈페이지를 통해 불법 핵 프로그램 개발자 및 유포, 판매자 13명을 적발해 검찰에 송치했다고 밝혔다.
또한 배틀그라운드는 전체 사용자 중 절반을 차지하는 중국 사용자들의 핵 사용으로 인한 불만이 속출하자 배틀그라운드의
중국 독자 플랫폼 서버를 개시하기 전 핵 제작 및 배포 관계자 120명을 체포하는 강도 높은 단속을
펼쳤다.
이처럼 게임 해킹의 잘못된 사용으로 인해 법적인 처벌을 받는 경우가 있는 반면 게임 해킹을 긍정적인 방법으로 사용한 사례도 있다.
밸브 사는 온라인 게임 배급 플랫폼인 스팀 내 게임의 보안 결함을 개선하기 위해 버그 바운티 프로그램을 진행했다.
버그 바운티는 해킹을 통해 발견한 버그나 취약점을 제출하고 그 경중에 따라 보상금을 지급하는 제도다.
기업은 버그 바운티를 통해 보안을 강화할 수 있고 해커는 개인의 역량을 높이고 실제 포상금을 받을 수 있기 때문에 양측 모두에게 도움이 되는 제도라고 볼 수 있다.
<봇을 이용한 게임 해킹>에서는 실제로 게임 해킹에 사용하는 봇을 만드는 방법을 다룬다.
인터넷에서 쉽게 구할 수 있는 간단한 툴을 이용해 게임 봇을 만들고 게임을 해킹하는 다양한 기법을 다루며,
메모리 스캐닝 같은 고전 기법에서부터 반응형 해킹에 이르기까지, 책의 내용을 천천히 따라가다 보면 게임 해킹의 기본 소양을 쌓을 수 있다.
이론적인 부분과 함께 간단한 게임 코드를 제공하고 있어 코드를 실행해보면서 게임 해킹의 원리를 쉽게 파악할 수 있을 것이다.
하지만 책의 첫 부분에서도 언급하고 있듯이 불법적인 목적의 게임 해킹은 게임을 영구적으로 사용할 수 없도록 조치되고 금전적인
소송을 당할 수도 있으며, 심지어는 법적으로 구속될 수도 있다는 사실을 항삼 명심해야 할 것이다.
지피지기 백전불태라는 말처럼 게임 개발과 보안에 관심이 있는 사람이라면 게임 해킹에 대해 잘 알고 있어야 실제 해킹에 대비할 수 있다.
이 책을 통해 게임 해킹의 원리와 사용을 이해하고, 이를 바탕으로 게임 개발과 보안에 긍정적으로 활용할 수 있기를 바란다.
크리에이티브 커먼즈 라이센스 이 저작물은 크리에이티브 커먼즈 코리아 저작자표시 2.0 대한민국 라이센스에 따라 이용하실 수 있습니다.