BLOG main image
분류 전체보기 (17)
Life (2)
Dump Analysis (9)
Reversing (1)
Windows (1)
Book (2)
Reference (2)
Visitors up to today!
Today hit, Yesterday hit
daisy rss
tistory 티스토리 가입하기!
'드라이버로드'에 해당되는 글 1건
2015. 1. 23. 00:11

참고로, 아래 블로그를 먼저 읽고 오면 좋다.

※ StartService 시 ERROR_FILE_NOT_FOUND(2) 가 발생하는 경우
    http://thepassion.tistory.com/30 


일단 이런 상황을 만나면 당황하기 마련이다.


디버깅을 해보니 ERROR_FILE_NOT_FOUND 케이스와 동일하게 DriverEntry 에서 IoCreateDevice() 호출시 ERROR_ALREADY_EXISTS 에러를 리턴하고 있었다.

하지만, Unload 루틴에서 IoDeleteDevice() 를 호출하는 부분에서는 문제가 없었다.

즉, 드라이버에 대해 정상적으로 StopService() 가 호출되었음에도 어떤 이유로 언로드되지 못하고 메모리 상에 남아 있어 다음 StartService() 호출시 ERROR_ALREADY_EXISTS 에러로 실패하는 케이스다.

1) 처음 MyDrv.sys 로드에는 성공한다.

2) 어떤 이유로 시스템이 비정상적인 상황이 된다.

3) MyDrv.sys 를 언로드한다.

4) 서비스 매니저(SCM)에는 MyDrv.sys 의 서비스 상태가 "Stopped"(sc query MyDrv)로 변경된다.
    하지만, 실제 메모리 상에는 언로드 대기 상태로 남아있다.
    ※ MyDrv.sys 의 DeviceObject 를 확인해보면 상태 플래그에 DOE_UNLOAD_PENDING 이 확인된다.

5) 이후 MyDrv.sys 에 대한 로드는 IoCreateDevie() 에서 ERROR_ALREADY_EXISTS 에러로 실패한다.



결론부터 말하면 외부의 비정상적인 영향에 의한 것으로 MyDrv.sys 의 잘못은 아니었다.

이제 궁금한건 그 어떤 이유일 것이다.

다음 덤프 분석글은 해당 원인을 분석한 것이다.

http://www.paullabsoft.com/3

prev"" #1 next