유저레벨에서 어떤 프로세스가 실행되자마자 DLL을 Injection 하려면 보통 ...
1. 프로세스 실행을 탐지하기 위해 실행중인 모든 프로세스에 DLL을 Injection하여 CreateProcess 류의 api를 후킹
2. CreateProcess가 호출되어 프로세스가 생성된 후 return된 직후에 DLL을 Injection
이런 식으로 합니다. 그런데 전 지금...
1. 커널 드라이버에서 PsSetCreateProcessNotifyRoutineEx 를 통해 Callback을 등록
2. Callback이 호출되었을 때 Application에 통지하여 새로 실행된 프로세스에 DLL을 Injection
이렇게 하고 있는데요... 문제가 있습니다.
PsSetCreateProcessNotifyRoutineEx 콜백이 호출되었을 때 즉시 Dll을 Injection하면 실패하는 경우가 발생합니다. 정확히 분석해본 것은 아니지만 아마도 Callback된 시점이 대상 프로세스가 완전히 생성되기 전이라 그렇다고 보여집니다. Sleep(100) 정도 쉬어준 후에 Dll을 Injection하면 잘 되거든요. (경우에 따라서는... 탐색기에서 에러창이 뜰때도 있습니다. -_-;;)
문제는... 지금 저의 상황에서 Sleep(100)이 너무 길다는 거죠...
후킹해야 할 api가 그 전에 호출되어버리면 말짱 꽝이거든요...
DLL을 Injection할 수 있는 시점이 언제인지... 그걸 탐지하기가 참 곤란하네요...
너무 빠르면 DLL Injection이 실패하고... 너무 늦으면 버스가 떠나버린 후가 되고...
고수님들... 이럴 때 좋은 방법 없을까요?? ^^;;
'Kernel Inside' 카테고리의 다른 글
EV인증서 갱신 후 MS 파트너센터(하드웨어 센터)에서 MS Attestation Signing에 실패함. (0) | 2020.02.03 |
---|---|
BSoD 발생 시 메모리 덤프가 생성되지 않는 경우 (0) | 2015.05.12 |
Windbg Extension - 커널 콜백 뷰어 (KnCbView) 1.0.0.1 (0) | 2013.09.13 |
RtlInsertElementGenericTable 의 이상한 행동(?) (0) | 2013.08.28 |
ObOpenObjectByPointer()에 의한 프로세스 오브젝트 손상 (0) | 2013.08.16 |