본문 바로가기

리버싱!

D3D Hooking 공부

D3D Hooking이란?

Direct3D Hooking은 이전부터 온라인 게임분야, 특히 FPS 게임에서 Wall Hack 이라는 것으로 게임 진행에서 일반 유저들에게 심각한 피해를 입히는 Game Hack을 만들때 사용된 기술이다.

 

위키피디아에서는 다음과 같이 설명하고 있다. 

 

다이렉트3D(영어: Direct3D)는 마이크로소프트의 DirectX API에서 3차원 그래픽스 연산과 출력을 담당하는 부분이다. 마이크로소프트의 윈도우 운영 체제(윈도우 95 이상)에서만 작동하며, 엑스박스와 엑스박스 360 게임 콘솔의 그래픽 API로 사용되고 있다. 다이렉트3D와 비슷한 역할을 하는 API로는 OpenGL이 있으며 역할은 같지만 각자가 서로 다른 장단점을 가지고 있다.

 

정리하면 3D게임이나 3D를 요구하는 작업에서 뭔가를 그릴 때 사용하는 게 Direct3D이다.

 

D3D 후킹을 진행할 때는 DirectX에서 장면의 랜더를 종료할떄 사용하는 함수인 EndScene 함수를 주로 후킹 한다. 해당 함수의 주소를 Vtable을 이용해 후킹을 진행한다. Vtable의 시작주소만 알고있다면 오프셋 계산 을 통해 해당 바이너리에서 사용되는 모든 가상함수들의 주소를 얻어낼 수 있다.

 

D3D 후킹은 다음과 같은 순서로 진행된다.

1. dll injection을 통해 목표 프로세스에서 dll 메인을 실행

2. dll 메인에서 후킹을 위해 만든 함수가 호출되며 d3d9.dll의 vTable 시작주소 탐색

3. 알아낸 vTable 시작주소에서 오프셋 연산을 진행해 Endscene 함수의 실제 주소를 찾아냄

4. 코드 패치 (후킹) 진행 후킹이 완료되면 EndScene 함수가 호출될 때 마다 hook 함수가 먼저 실행되고 그다음 EndScene 함수가 호 출될 것이다.

 

순서에 맞게 진행하려면 vtable 시작주소 탐색을 위한 코드 패턴과 Endscene 함수의 오프셋이 필요하다.

 

필요한 사전지식

Detour Patching 또는 inline Function Hooking 이라고도 불리는 Detours Hook 지식

실제 함수 전, 후로 전부 후킹이 되기 때문에 매우 효과적인 조작이 가능하다.

한번에 이해하기 좋은사진이다.

https://nameng.tistory.com/148

 

detours를 이용한 hooking

설치 visual studio 개발자 명령 프롬프트를 열어 실행하거나 해당 링크에서 다운받아준다. git clone https://github.com/Microsoft/Detours.git 해당 경로로 이동한뒤 makefile이 있는곳에서 nmake를 사용한다...

nameng.tistory.com

 

Vtable 지식

https://nameng.tistory.com/149

 

가상 함수(Virtual function)와 가상 함수 테이블(vtable) 공부

오버라이딩 공부 클래스에서 선언된 함수에 대해, 해당 클래스의 자식 클래스가 정의되었을 때 자식 클래스에 서 상속받은 함수를 새롭게 정의하여 사용하는것을 오버라이딩이라 한다. 부모 클

nameng.tistory.com