Reversing-Global API Hooking and General API Hooking
-General API Hooking
일반적인 API후킹의 문제는 후킹을 원하는 프로세스가 생성될 때마다 매번 API후킹을 해주어야 한다는 것입니다. 밑의 그림은 DLL Injection 기법을 이용한 일반적인 API 후킹을 표현한 것입니다.
<그림1>
이 그림에서 후킹 대상 프로세스는 Test.exe(1)입니다. InjDll.exe 프로그램을 이용하여 Hook.dll을 인젝션해서 원하는 API를 후킹하였습니다.
그런데 이후에 또 다른 Test.exe(2) 프로세스가 생성되었다면 이 프로세스에도 역시 Hook.dll을 인젝션해줘야 정상적인 API후킹이 이루어질 것입니다.
즉 후킹 대상 프로세스가 새로 생성될 때마다 계속해서 수동으로 API 후킹을 해야 합니다.
-Global API Hooking
<그림2>
InjDll.exe는 Windows OS의 기본 셸(Shell)인 Explorer.exe 프로세스에 gHook.dll을 인젝션 합니다. 후킹하고자 하는 Test.exe가 아닌, Test.exe를 실행시켜주는 프로세스인 Explorer.exe를 후킹한다는 것이 핵심입니다. gHook.dll은 <그림1>의 Hook.dll의 기능에다가 자식 프로세스 생성에 관련된 API를 후킹하여 자식 프로세스를 생성할 때마다 자신(gHook.dll)을 인젝션하는 기능을 가지고 있습니다.--<그림2>참고
따라서 Windows 셸인 Explorer.exe 프로세스에 gHook.dll을 한 번 인젝션해놓으면, 이후 Explorer.exe.에서 생성되는 모든 자식 프로세스들에게 자동으로 gHook.dll이 인젝션 됩니다. 이것이 자동 API 후킹의 기본 개념이며, 이를 시스템에 실행 중인 모든 프로세스를 대상으로 확장한 것이 바로 글로벌 API 후킹입니다.
-출처: 리버싱 핵심원리
0 개의 댓글