Reversing/Hooking

[Hooking] 1. 기초지식 - Detours Hook

Inline Function Hook (detours Hook )

후킹은 정말 여러가지 종류가 있다. 목표 대상으로 하는 함수 내부 어셈코드를 패치하여 공격자가 원하는 목표를 실행하게 하거나, 원래 실행될 함수의 인자를 바꿔 아예 다른 결과를 만들게도 한다. 혹은 내부에서만 왔다갔다해야 할 정보를 끄집어내 가져오기도 한다.

inline 후킹 기법은 원본 함수의 내부 실행코드 시작부분을 공격자가 실행하고자 하는 함수로 점프하는 어셈으로 변경하는 방식인데, Detours는 이에 더해 포인터나 테이블을 추가로 변조하지 않고 어셈블리를 건드려 코드 실행 흐름을 바꾼 다음 원본 함수의 동작을 그대로 실행하게 한다.

 

다른 후킹과의 차별점은 추가적인 메모리 할당이나 불필요한 코드 패치등이 이뤄지지 않는다는 것.

일반적인 후킹이 원본함수의 내부실행코드 어셈이나, 함수를 불러오는 포인터 구문을 건드려 목표 함수를 후킹한다면, Detours 방식은 조금 더 복잡하다.

위와 같이 더 많은 단계를 거쳐 목표 hooking 함수에 다다르게 한다. 목표함수는 그대로 두고, 목표함수의 실행 전,후로 더 다양하고 효과적인 조작이 가능하다.

 

요약하자면, 

 

1. 로드된 DLL 에서 원본 함수 특정 구문에 Jmp 코드문 삽입

2. 해당 jmp 코드문을 통해 로드된 DLL의 트램폴린 코드로 점프

3. 트램폴린 코드에서는 원본함수의 일부 구문을 실행하고, 임의 동작을 수행하는 후킹 코드를 별도로 실행함

4. 지정 후킹코드가 종료된 다음 다시 트램폴린 코드로 이동

5. 트램폴린 코드가 종료될 때 원본 함수로 이동함 

6. 이후 원본함수의 동작을 계속해서 진행 

 

목표함수에 전달되는 인자의 조작, 목표함수 종료 후 리턴값 조작등에 더불어 트램펄린 함수가 실행되며 원본함수 → 목표함수 의 실행 루틴이 정상적으로 이뤄진 것 처럼 조작하기 때문에 후킹의 안정성또한 더 높다고 볼 수 있다.

 

https://www.microsoft.com/en-us/research/project/detours/

 

Detours - Microsoft Research

Detours is a software package for re-routing Win32 APIs underneath applications. For almost twenty years, has been licensed by hundreds of ISVs and used by nearly every product team at Microsoft. What’s New? Detours 4.0.1 is now open source under the MIT

www.microsoft.com

MSDN에서 제공하는 Detours 라는 API 후킹 라이브러리가 존재하는데, 이 라이브러리가 위 방식대로 만들어 진 것.

허나 후킹 자체가 익숙해지기 전까지는 라이브러리 사용을 자제하는걸로 하자.


참고 문서 : http://index-of.co.uk/Reverse-Engineering/Detours Hook-[NullBr4in].pdf