BLOG main image
분류 전체보기 (17)
Life (2)
Dump Analysis (9)
Reversing (1)
Windows (1)
Book (2)
Reference (2)
32,737 Visitors up to today!
Today 0 hit, Yesterday 3 hit
daisy rss
tistory 티스토리 가입하기!
'Windows'에 해당되는 글 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

Name
Password
Homepage
Secret
prev"" #1 next