유저레벨에서 어떤 프로세스가 실행되자마자 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이 실패하고... 너무 늦으면 버스가 떠나버린 후가 되고...


고수님들... 이럴 때 좋은 방법 없을까요?? ^^;;



Posted by kuaaan
,


사랑합니다. 편안히 잠드소서