728x90
728x90

'Basic Programming > Hooking' 카테고리의 다른 글

Hooking - Game Resize  (0) 2020.10.23
Hooking - mhook-lib  (0) 2020.04.29
Hooking - API Hooking의 종류  (0) 2020.03.31
728x90

Hooking을 이용한 Resize 원리

  1. MoveWindow()를 이용하여 Game Main Window의 크기를 변경해준다.

  2. SwapChain의 BackBuffer들의 크기를 변경해준다.

  3. RenderTarget의 크기를 변경해준다.

  4. DepthStencilBuffer의 크기를 변경해준다.

 

 

 

728x90

'Basic Programming > Hooking' 카테고리의 다른 글

Hooking - 안티 디버깅 방안  (0) 2023.04.07
Hooking - mhook-lib  (0) 2020.04.29
Hooking - API Hooking의 종류  (0) 2020.03.31
728x90

mhook-lib는 windows api hook library이고 open source이다.

 

이번에 이걸 이용해봤는데 쓸만함.

 

https://github.com/martona/mhook

 

martona/mhook

A Windows API hooking library. Contribute to martona/mhook development by creating an account on GitHub.

github.com

http://codefromthe70s.org/mhook.aspx

728x90

'Basic Programming > Hooking' 카테고리의 다른 글

Hooking - 안티 디버깅 방안  (0) 2023.04.07
Hooking - Game Resize  (0) 2020.10.23
Hooking - API Hooking의 종류  (0) 2020.03.31
728x90

API Hooking은 크게 유저모드와 커널모드 두가지로 나뉜다.

 

 

User-Mode Hooking
 

  • IAT(Import Address Table) Hooking: IAT 에 적혀있는 API 의 주소를 자신의 함수주소로 바꾸고 자신의 함수 끝에 다시 원래 API 주소로 돌려주는 방식. 가장 일반적으로 바이러스에서 사용하는 기법.

  • Inline Function Hooking (Detour Hooking): 사용할 API 의 첫 5바이트를 자신의 함수주소로 Jmp 하는 코드로 바꾸고 자신의 코드에서 다시 원래 API 의 바뀐 코드를 수정해주고 API 시작위치로 돌려주는 방식. IAT 후킹보다 지능적이여서 찾아내기가 쉽지 않다. 요새 많이 등장한다.

 

Kernel-Mode Hooking (루트킷)
 

  • SSDT(System Service Descriptor Table Modification): SSDT 가 가리키는 주소를 후킹 함수의 주소로 바꾸고 그 함수 호출후 다시 원래 커널 API 의 주소로 돌려주는 기법. 50% 이상의 루트킷이 사용하는 기법. 이런 기법은 프로세스, 파일의 은폐에 많이 사용됨.

  • DKOM(Direct Kernel Object Modification): 커널 Object 를 직접 조작해서 실행되는 프로세스, 스레드, 서비스, 포트, 드라이버 및 핸들의 Entry 를 실행리스트(PsActiveProcessHead, PsActiveModuleHead....)에서 감추는 기법.

  • SYSENTER: 유저모드에서 시스템 호출로 넘어갈때 INT 2E(for Windows 2000)/ SYSENTER 를 사용하게 되는데 호출후 시스템 서비스의 핸들러는 IA32_SYSENTER_EIP 라는 레지스터리에 저장된다. 커널 드라이버를 설치하여 해당 값을 수정하여 루트킷을 호출하고 다시 원래 값으로 돌려주는 기법.

  • Filter Device Drivers: 시큐리티 제품의 하단에 filter device driver 로 등록하는 기법이다. 부트 타임에 로드됨으로써 다른 어떤 안티바이러스 제품보다 먼저 실행된다.

  • Runtime Detour Patching: 커널 메모리를 직접 조작함으로써 그 메모리의 포인터가 루트킷을 가르키게 함으로써 커널 함수들을 후킹하는 기법. 예를 들면 Exception 을 일으키고 Exception Handle 을 컨트롤하는 IDT 레지스터를 자신을 가리키는 주소로 써줌으로써 후킹목적을 달성한다.

  • IRP table Modification: 디바이스 드라이버가 네트웍 패킷을 처리하거나 파일을 쓸때 사용하는 I/O Request Packets을 제어하는 Dispatch Routine 은 DEVICE_OBJECT 구조체에 저장된다. 바이러스에서 사용하는 루트킷은 IoGetDeviceObjectPointer 란 API를 사용하여 DEVICE_OBJECT 구조체에서 DRIVER_OBJECT 의 위치를 선정해줄수 있다. 즉 다른 Original Driver Call 이 일어나기 전에 자신의 루트킷을 먼저 실행하여 Call 결과를 조
    작한다.



출처: https://ajlab.tistory.com/entry/Hooking의-종류?category=395542 [AJLab - Since 2012.1.20]

728x90

'Basic Programming > Hooking' 카테고리의 다른 글

Hooking - 안티 디버깅 방안  (0) 2023.04.07
Hooking - Game Resize  (0) 2020.10.23
Hooking - mhook-lib  (0) 2020.04.29

+ Recent posts