후킹?
정보 가로채기, 실행 흐름 변경하기 -> 원래와는 다른 기능을 제공함
후킹의 과정
- 디스어셈블러/디버거를 이용해 프로그램의 구조와 동작 원리를 파악
- 버그 수정 또는 기능 개선에 필요한 훅(Hook) 코드를 개발
- 실행 파일과 프로세슷 메모리를 자유롭게 조작해 훅 코드 설치
Win32 API를 후킹하는걸 API 후킹이라 함. 메시지 후킹이랑 같이 젤 많이 사용된다.
API란?
애플리케이션이 시스템 자원을 쓰려면 시스템 커널에 요청해야됨. 이 때 Win32 API를 이용한다.
실제 애플리케이션 코드 실행하려면 DLL 로딩되는데 모든 프로세스에는 기본적으로 kernel32.dll이 로딩되고 이거는 ntdll.dll을 로딩시킨다.
API 후킹
Win32 API 호출을 중간에서 가로채서 제어권을 얻어내는 것
장점?
- API 호출 전/후에 사용자의 훅 코드 실행 가능
- API에 넘어온 파라미터나 API 함수의 리턴 값을 엿보거나 조작 가능
- API 호출 자체를 취소시키거나 사용자 코드로 실행 흐름 변경 가능
테크 맵
Method | Object (what) | Location (where) | Technique (how) | API | |
static | File | 1) IAT 2) Code 3) EAT | x | x | |
dynamic | Process Memory 00000000 ~ 7FFFFFFF | A) Debug (Interactive) | DebugActiveProcess GetThreadContext SetThreadContext | ||
B) Injection (stand alone) | B-1) Independant Code | CreateRemote Thread | |||
B-2) DLL file | Registry(AppInit_DLLs) BHO (IE only) | ||||
SetWindowsHookEx CreateRemote Thread |
API 후킹 테크 맵
후킹 작업할 때 적절한 기법 골라서.. 하면된다고 한다. 많이쓰는거는 밑줄임
Method Object(what)
API 후킹 방식에 대한 대분류인데 동적과 정적으로 나뉨
정적은 파일을 대상으로 동적은 프로세스 메모리를 대상으로 한다. 일반적으로 API 후킹이라하면 동적방식..
Static | Dynamic |
파일 대상 | 메모리 대상 |
프로그램 실행 전 후킹 | 프로그램 실행 후 후킹 |
최초 한 번만 후킹 | 실행 시마다 후킹 |
특수한 상황에서 사용 | 일반적인 상황 |
Unhook 안됨 | 프로그램 실행 중에 Unhook 가능 |
Location(where)
어느 부분을 조작해야되는지에 대한 내용임
일반적으로는 세군데가 있다.
IAT: IAT에 있는 API 주소를 후키 함수 주소로 변경하는 방법. 구현이 가장 쉬움
Code: 프로세스 메모리에 매핑된 dll에서 API의 실제 주소를 찾아가 코드를 직접 수정하는 방식. 시작 코드를 JMP 명령어로 패치하거나 함수 일부를 덮어쓰거나 필요한 부분을 변경하는 식으로 한다.
EAT: DLL의 EAT에 기록된 API의 시작 주소를 후킹 함수 주소로 변경하는 방법
Technique(How)
후킹 대상 프로세스 메모리 침투해 후킹 함수를 설치하는구체적 기법에 대한 내용 디버그랑 인젝션으로 나눠지고 인젝션은 Code랑 DLL로 나뉘어짐
Debug: 대상 프로세스를 디버깅하면서 API를 후킹. 구현만 완벽하면 제일 강력한 후킹방법. 근데 디버거 지식도 많이 필요하고 테스트가 많이 필요함
인젝션: 해당 프로세스 메모리 영역에 침투하는 기술. DLL 인젝션이 제일 널리 사용된다. DLL 인젝션은 대상 프로세스로 하여금 강제로 사용자가 원하는 DLL파일을 로딩하게하고 code injection은 좀더 복잡하고 탐지가 어려워서 악성코드에서 많이 사용됨.
'공부해요 > 리버싱_핵심원리' 카테고리의 다른 글
31. 디버거 이야기 (0) | 2024.11.17 |
---|---|
30. 메모장 WriteFile() 후킹 (0) | 2024.11.17 |
28. 어셈블리 언어를 이용한 Code 인젝션 (0) | 2024.11.12 |
27. Code 인젝션 (1) | 2024.11.12 |
26. PE Tools (0) | 2024.11.06 |