웬디의 기묘한 이야기

글 작성자: WENDYS
반응형

WIndows Message Hooking 하기에 앞서 DLL Main에서 하면 안 되는 작업

최근 주력 업무 및 시스템 분석을 하게 되면서 DLL Main 에서 몇 가지 동작들에 의해서 문제가 발생한 적이 많이 있어서 정확하게 정리를 했습니다.

후킹을 하기위해 DLL을 로드했을 때 보장되어있는 상황은 Kernel32.dll 이 로드되어있다는 보장 외에는 보장된 상황이 없습니다.

 

 

그렇다면 어떠한 상황들에서 어떠한 문제가 생길까요??

가장 큰 문제는 해당 DLL에 데드락(Dead Lock)이 걸리게 되어 더 이상 흐림이 진행되지 못하여 프로그램이 실행되지 못하는 상황이 발생할 수 있습니다.

주의사항

  • LoadLibrary, LoadLibraryEx 등을 호출하게되면 데드락 또는 크래시를 유발할 수 있습니다.
  • CoCreateInstanceEx를 사용하여 COM Thread를 초기화하는 경우 특정 상황에서 LoadLibraryEx가 호출될 수 있습니다.
  • 다른 스레드와의 동기화 처리는 데드락을 유발할 수 있습니다.
  • 로더 락을 획득하려는 코드가 가지고있는 동기화 오브젝트를 획득하게 되면 데드락을 유발할 수 있습니다.
  • CreateProcess 프로세스를 새로 생성하는 경우 다른 DLL을 로드할 수 있습니다.

가장 좋은건 DLL Main에선 깔끔하게 비워두는 것이 좋습니다.

하지만 메시지 후킹을 넘어 API 후킹을 하게되면 DLL Main 타이밍에 처리해야 할 일들이 생기기 때문에 여러 가지 상황에 주의하여 개발을 해야 합니다.

 

반응형