프로그래밍/C++

[C++ WinAPI] Window NT계열에서는 원칙적으로 Ctrl + Alt + Del 를 막을수 없다?

당근천국 2010. 12. 26. 03:18

다른 포스팅에서 키보드 후킹을 해보았습니다.

그런데 'Ctrl + Alt + Del'만은 막아지질 않습니다.

 

연관글 영역

 

 

1. 가짜 'GINA'를 이용한 방법

98때는 약간의 꼼수를 써서 막을수 있었는데 NT계열은 그게 불가능합니다.

 

그래서 자료를 찾다가 찾은것이 가짜'GINA'를 이용한 Ctrl + Alt + Del호출을 막는 방법입니다.

(참고 : GINA )

 

이 방법은 원래는 OS가 'MSGINA'를 이용한여 'Ctrl + Alt + Del'를 호출하는 것을

자신이 만든 DLL을 통하여 'MSGINA'를 호출하게 한다음 'Ctrl + Alt + Del'가 들어오면 정보를 보내지 않는 방식으로 막는 것입니다.

(참고 : http://www.devpia.com/MAEUL/Contents/Detail.aspx?BoardID=51&MAEULNo=20&no=4541&ref=1532 )

 

프로그램에서 레지스트를 수정하는 것은 가능하므로 넘어가고 가짜DLL은 프로그램설치시 같이 깔아주고 재부팅하도록 유도하면 됩니다.

 

이 방법의 가장큰 단점은 재부팅을 해야지만 적용이 된다는 점입니다.

 

'GINA.dll'이 갱신되는 타이밍을 잡기위해 이것저것 테스트해보니....

윈도우에서 계속 물고 있습니다.....

이말은 리붓을해야만 내가원하는 내용이 적용된다는 것을 의미합니다.

 

 

2. DLL 인잭트(DLL Inject)를 이용한 방법

DLL 인잭트(DLL Inject)를 이용하여 동작중인 프로세스에 가짜 DLL을 인잭트 하는 방식입니다.

(참고 : http://greatwarm.tistory.com/4)

 

프로세스ID(PID)만 알면 아까 만들었던 가짜DII을 집어넣을수 있는 것입니다.

 

그럼 PID를 어떻게 받아올까?

아까 가짜DLL을 불러오게 하는 글을 잘읽어본 사람이라면 'winlogon.exe'를 보았을 것입니다.

바로 이 녀석이 가짜DLL을 들고있던 녀석이므로 인잭트도 이 녀석한테 하면 됩니다.

 

프로세스이름으로 PID찾는 코드는 널려있으므로 찾아보시기 바랍니다.

 

 

어찌됐건 원리는 알았고 구현만하는 상황에서 정말 좋은 소스를 구했다.

winlock_demo.zip
다운로드
winlock_source.zip
다운로드

 

데모를 돌려보면 알겠지만 'Ctrl + Alt + Del' 잘막힙니다.

오리지널 C라는게 문제지만(도데체 왜?) 귀찬다면 WinLockDll.dll만 갔다쓰던지 필요없는 내용지우고 빌드하던지 해서 사용해도 되겠습니다.

 

 

마무리

그렇지만 결론은 제목그대로 입니다.

위 방법들은 정상적인 프로그램이라고 보기 힘들기 때문입니다.

그래도 되는게 어딥니까 ㅎㅎㅎ