[이전 이야기]
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 냐구요?
뭔말이냐 하면...
예를 들어서... 삽잡이는 핸들을 뽑아오는 프로그램을 만들라는 미션을 받았습니다...
다른 프로세스의 핸들값이 필요합니다...
백날 때를 써도 그 핸들값을 사용할 수 없었습니다... (이런 슬픈 일이...)
그때 결심을 합니다... "그래... 그x을 복사하겠어!"
슬피 울던 삽잡이는 Kernel에 찾아갑니다...
삽잡이가 원하는 개체에 대해서 핸들을 다시 할당해서
삽잡군의 쿠폰함에 찍어주는군요!
아하... 이 Story를 통해 왜 NtDuplicateObject를 사용해야할지 좀 감을 잡으셨나요?
커널에 요청을 통해 핸들이 가르키는 개체에 대해서
사용할 수 있는 핸들을 다시 할당해서 핸들 테이블에 저장해두고
그 테이블의 핸들값을 넘겨주는 것입니다 ...
자 여러분은
IT버전 "내꺼인듯 내꺼아닌 내꺼같은 너~" 를 읽고 계십니다....
곱씹어 보세요... 이해가 가실것입니다... 허허허....
다음시간에는 LoadLibrary와 GetProcAddress 에대해서 알아보도록 하겠습니다!
왜냐?! 저 NtDuplicateObject를 쓰기 위해서입니다... 허허...
물론 이전 시간에 알아본 NtQuerySystemInformation도 마찬가지고요!
그럼, 다음시간에 뵙겠습니다!
이상 삽잡이였습니다!
[참고자료]
http://msdn.microsoft.com/en-us/library/windows/hardware/ff556502(v=vs.85).aspx
<-- NtDuplicateObject 설명
[구글 키워드]
http://sapzape.tistory.com/12
'삽질의 현장 > - 윈도우 커널' 카테고리의 다른 글
윈도우커널_#009_삽질은 언제 끝나나... LoadLibrary와 GetProcAddress! (0) | 2015.06.09 |
---|---|
윈도우커널_#008_삽질은 끝나지 않는다! NtDuplicateObject ! (2) (0) | 2015.06.09 |
윈도우커널_#006_삽질의 시작! NtQuerySystemInformaton 정복기 (0) | 2015.06.09 |
윈도우커널_#005_Handle 서비스하는거 보러갈사람!(2) (0) | 2015.06.09 |
윈도우커널_#004_Handle 서비스하는거 보러갈사람!(1) (0) | 2015.06.09 |