삽질의 현장/- 윈도우 커널

윈도우커널_#007_삽질은 끝나지 않는다! NtDuplicateObject ! (1)

shovelman 2015. 6. 9. 23:22

 

 

[이전 이야기]

001. 커널은 뭐다? 서버다! : http://sapzape.tistory.com/4

002. 커널은 서버라고? 직접 보여줘! : http://sapzape.tistory.com/6

003. 커널은 서버라고? 더욱 생생하게 보여줘봐! : http://sapzape.tistory.com/7

004. Handle 서비스하는거 보러갈사람! : http://sapzape.tistory.com/9

005. Handle 서비스하는거 보러갈사람! : http://sapzape.tistory.com/10

006. 삽질의 시작! NtQuerySystmInformation 정복기(1) : http://sapzape.tistory.com/11

 


안녕하세요 삽잡이입니다~

오늘은 패딩에 달린 모자를 덮어쓴 모습을 표현해봤습니다... 왜냐하면 춥거든요...

(블로그 시작한지도 얼마 되지 않았는데 빠졌군요...)

 

지난시간에 NtQuerySystemInformation 끝판왕을 씹어먹으려 했는데,

이놈... 이분을 씹어 먹기에는 그들의 친구들까지 씹어먹어야 할 필요성이 있어서...

오늘은 NtDuplicateObject에 대해서 알아보도록 하겠습니다.

 

여러분 Duplicate란 무엇일까요?

뭐 인터넷에 뒤져보니...

복사, 사본, ~의 사본을 만들다 , ~을 복제하다... 등의 뜻이 나오네요

 

그렇다면~ 어디한번 NtDuplicate로 들어가 봅시다.

 

어랏? MSDN에서 확인하고자 했더니 두가지의 버전이 있군요...

ZwDuplicateObject로 들어가 봅시다...

 



뭔지는 알아야 이 글이 끝날테니 들어가는거래요~ 하하하 (농담입니다... 맞긴 하죠...) 

 

흠... 우선 NtDuplicateObject가 뭘지... 생각해봅시다..

왜 복사냐... 왜 복사를하지???

 

"내 프로세스에 쓰려면 나도 할당 받아야되!" 라고 생각하시는게 편할듯합니다..

이게 뭔 소린가... 들어가봅시다~

 


 

 

그랑죠 보셨죠? ㅎㅎㅎ 저는 그때라서요 (아직 많이 어리죠? 하하하하)

그랑죠가 변신을 합니다. 저래야 적과 싸우죠..

 

자 그랑죠처럼, 프로세스가 따닥 하는 순간 살아 움직이게됩니다.

(따닥이란 마우스 클릭을 말하는 음성어입니다. 푸하하...)

이때 프로세스가 실행될 수 있는 환경이 만들어지죠...

그 환경안에는 Handle Table 이라는 도장을 찍는 쿠폰함이 생깁니다.

뭔 Dog Sound 냐구요?분노2

뭔말이냐 하면...  

 

예를 들어서... 삽잡이는 핸들을 뽑아오는 프로그램을 만들라는 미션을 받았습니다...

다른 프로세스의 핸들값이 필요합니다...

백날 때를 써도 그 핸들값을 사용할 수 없었습니다... (이런 슬픈 일이...)

그때 결심을 합니다... "그래... 그x을 복사하겠어!"

 

슬피 울던 삽잡이는 Kernel에 찾아갑니다...

 


 

삽잡이가 원하는 개체에 대해서 핸들을 다시 할당해서

삽잡군의 쿠폰함에 찍어주는군요!

 

아하... 이 Story를 통해 왜 NtDuplicateObject를 사용해야할지 좀 감을 잡으셨나요?

 

커널에 요청을 통해 핸들이 가르키는 개체에 대해서

사용할 수 있는 핸들을 다시 할당해서 핸들 테이블에 저장해두고

그 테이블의 핸들값을 넘겨주는 것입니다 ...

 

자 여러분은

IT버전 "내꺼인듯 내꺼아닌 내꺼같은 너~" 를 읽고 계십니다....

곱씹어 보세요... 이해가 가실것입니다... 허허허....

 

 

다음시간에는 LoadLibrary와 GetProcAddress 에대해서 알아보도록 하겠습니다!

왜냐?! 저 NtDuplicateObject를 쓰기 위해서입니다... 허허...

물론 이전 시간에 알아본 NtQuerySystemInformation도 마찬가지고요!

 

그럼, 다음시간에 뵙겠습니다!

 

이상 삽잡이였습니다!

 

 

[참고자료]

 

 http://msdn.microsoft.com/en-us/library/windows/hardware/ff556502(v=vs.85).aspx 

<-- NtDuplicateObject 설명

 

[구글 키워드]

 

NtDuplicateObject

MSDN


http://sapzape.tistory.com/12