-
[리버싱 핵심원리 study] 29장 API 후킹 : 리버싱의 '꽃'Reverse Engineering 2021. 1. 18. 11:51
1. API 후킹
Win32 API를 후킹 하는 기술을 API 후킹이라고 한다. API(Application Programming Interface)란 사용자 애플리케이션이 시스템 커널에 대한 접근을 요청할 때 사용되는 것으로, Windows에서는 MS에서 Win32 API라는 것을 제공하고 있다. API 후킹을 통해서 Win32 API 호출을 중간에서 가로채 제어권을 얻어낼 수 있는데, 도식화하면 아래와 같은 구조를 갖는다.
위와 같이 CreateFile() API를 후킹 한 경우 호출될 때마다 중간에 있는 hook.dll의 MyCreateFile()이 호출된다.
2. 태크 맵
책에서는 아래와 같이 API 후킹에 대한 기술적 범주를 테크 맵으로 나타내고 있다. (32bit 기준)
Method Object Location(where) Technique(how) API static File (1) IAT
(2) Code
(3) EATX X dynamic Process
Memory
00000000
~
7FFFFFFFFA) Debug
(Interactive)DebugActiveProcess
GetThreadContext
SetThreadContextB) Injection B-1)
Independent
CodeCreateRemoteThread B-2)
DLL fileRegistry(AppInit_DLLs)
BHO (IE only)SetWindowsHookEx
CreateRemoteThread각 내용을 간단하게 설명하면 다음과 같다.
1) Method Object(what)
후킹에 관한 대분류로, static(작업 대상이 파일)인지 dynamic(작업 대상이 프로세스)인지를 나눈다. static 방식은 dynamic에 비해 잘 쓰이지는 않는다고 한다.
2) Location(where)
API 후킹을 위해 공략해야 하는 부분에 대한 분류로, IAT, Code, EAT로 나뉜다.
IAT : 가장 단순하며, 구현 방법이 간단하지만 IAT에 없는 API들에 대해서는 후킹 할 수 없다.
Code : 프로세스에 매핑된 dll에서 API의 실제 주소를 찾아가 코드를 수정하는 방법(가장 많이 쓰임)
EAT : DLL의 EAT에 기록된 API 시작 주소를 후킹함수 주소로 변경하는 방법 (Code에 비해 잘 사용되지 않음)
3) Technique(how)
후킹 함수를 설치하는 구체적인 기법으로 디버그 방법과 인젝션 방법으로 나뉜다.
디버그 : 대상 프로세스를 디버깅하며 후킹하는 방법으로, 제작한 프로그램에서 Debug API를 이용하여 대상 프로세스에 후킹 함수를 설치한다.
인젝션 : 대상 프로세스의 메모리에 침투하는 기술로 DLL 인젝션과 Code injection으로 나뉜다. (이전 실습 내용)
반응형'Reverse Engineering' 카테고리의 다른 글
[리버싱 핵심원리 study] 32장 계산기, 한글을 배우다 (0) 2021.01.22 [리버싱 핵심원리 study] 30장 메모장 WriteFile() 후킹 (1) 2021.01.18 [리버싱 핵심원리 study] 28장 어셈블리 언어를 이용한 Code 인젝션 (0) 2021.01.15 [리버싱 핵심원리 study] 27장 Code 인젝션 (0) 2021.01.14 [리버싱 핵심원리 study] 25장 PE 패치를 이용한 DLL 로딩 (0) 2021.01.10