728x90
Trampoline Code Hooking은 후킹할 함수의 첫 5바이트를 수정하여 자신이 원하는 함수를 호출시키는 방법이다.
왜 하필 5바이트인가?
그 이유는 EIP의 흐름(실행 흐름)을 변화시키는 JMP문이 5바이트 이기 때문이다.
ex) JMP 00400000
E9 xxxxxxxx -> 5byte
보통 이런 API Hooking은 DLL Injection과 함께 사용하여
타 프로세스의 기능을 개선시키거나 혹은 기능을 제거하는 등 폭넓게 사용할 수 있다.
(사용 소프트웨어에 하면 불법이라 한다.)
그러나 이번에는 DLL Injection 없이 API Hooking만 실시하였다.
위 코드에서는 새 바이트값을 WriteProcessMemory 함수를 이용해서 덮어씌웠지만
VirtualProtect 함수를 이용해서 해당 메모리의 속성(읽기, 쓰기 등)을 변경하여
memcpy(pFunction, NewBytes, 5); 이런 식으로도 할 수도 있다.
디버거로 확인해 보면
main 함수에서 HookCode()를 호출하기 전 printf의 바이트 값은
이랬지만 HookCode() 호출 후
이렇게 JMP Project1.00401500
HookFunc함수로 jump하는 코드로 바뀐것을 확인할 수 있다.
실행 시켜보면
hooking 되어 메시지박스를 호출하는 것을 확인 할 수 있다.
[소스 코드] :
728x90
'리버스엔지니어링 > API Hooking' 카테고리의 다른 글
Win32 API Hooking + DLL Injection - Trampoline Code Hooking (0) | 2015.06.02 |
---|