[이전 이야기]
001. 커널은 뭐다? 서버다! : http://sapzape.tistory.com/4
002. 커널은 서버라고? 직접 보여줘! : http://sapzape.tistory.com/6
003. 커널은 서버라고? 더욱 생생하게 보여줘봐! : http://sapzape.tistory.com/7
안녕하십니까.. 삽잡이입니다. 눈이 왔습니다...
눈오는날 삽하니까 군대에서 얼음깰때 쓰던 각삽이 떠오르네요...
하... 손이 얼었습니다... 뭐이리 추운거죠...
눈보라가 제 얼굴을 좋아하는지 정면으로 맞으면서 와서... 얼굴이 말이 아닙니다...
원래는 괜찮은...
그런 의미에서
한번 보면 헤어나오지 못하는 화려한 문장 하나하나 얼어붙게 쓰도록 하겠습니다.
죄송합니다.. 뇌도 얼었나봅니다...
지난 시간에 process hacker라는 오픈 프로젝트 프로그램을 통해
handle값이 실제로 던져지는지 확인했었습니다. (기억 안나시는 분들은 요기를 눌러주세요)
오늘은 그림이 좀 많습니다... (저의 발 그림이 아닌, 캡쳐요...)
왜냐하면 실제로 process hacker 소스코드를 파헤쳐보려하거든요 ㅎㅎㅎ
기존 window에 있는 작업관리자같은 경우에는 handle값을 확인할 수 없었는데요...
Process hacker 소스코드를 한번 파헤쳐봄으로써
실제 프로세스들의 handle 값을 구경해보도록 하겠습니다...
추우신데 편하게 스크롤만 내리실 수 있도록 내용의 90%가 캡쳐입니다... 허허...
이해가 안가시는 부분들이 많으실 수 있는데
지속적으로 수정하면서 더욱 쉽게 이해가도록 노력하겠습니당
그렇다면~ GO GO GO!
우선 시작점이죠... WinMain을 시작으로 들어가 봅시다~!
그런데.. 어딜 들어가야하는건가요?
잘생각해봅시다...
우리는 "프로세스를 클릭함으로써 해당 프로세스의 속성창에서 handle값을 확인하고자하는 목표"를 가지고 있습니다.
허허.. 그렇다면 클릭을 할때의 처리하는 부분을 찾아가봐야겠습니다.
PhTnpWndProc안에 클릭을 하면 호출되는 함수가 있네요~
우선 함께 하시는 분들은 살포시 검색 기능으로 들어가봅시다.
(어떻게 찾았는지에 대한 설명은 추후 설명해드리겠습니다 ^^)
요기있네요~ 왼쪽 버튼 더블 클릭시
요기~ 함수를 호출! (한번에 캡쳐하려했지만 잘 안보여서 잘라서 캡쳐했습니다...)
PhTnpOnXxxButtonXxx 으로~ 빠져봅시다~
쭉 내려가보니 WM_LBUTTONDBLCLK가 있네요~
break point를 걸고 F5 GOGOGO
ClickMessage 변수에 TreeNewLeftDoubleClick 저장하고~
PhTnpSendMouseEvent 함수 호출
들어가봅시다~
Callback이 나오네요... 음...
여기서 잠깐! Callback이란 등록 된 함수를 어디에선가 Call한다는 뜻인데요...
(Callback에 대해서는 나중에 자세하게 설명하도록 하겠습니다... 추가할 내용이 많네요 ^^)
어디에서 call하는 것일까요... 그럼 이어서 GO GO GO!
잠깐만~ 우리 이제 한번 해봐요~ 사랑을 나눠요~ 여기서 잠시 중간 점검을 해봅시다!
Call Stack을 보겠습니다.~!
아하... 이런 과정을 밟고 왔군요!
자... Callback에 들어가봅시다.
이 안에 우리가 찾는 왼쪽 마우스 버튼 더블 클릭에 관해 나옵니다.
더 들어갈 수 있나 해서 F11와 동행했지만... return TRUE; 를 반환하고 나가지네요...
SendMessage에 F5를 과감하게 따닥 하는 순간!
우리가 원하던 Handle을 보여주는 속성창이 나왔습니다.
음... 뭔가 ID_PROCESS_PROPERTIES에 우리가 찾고자하는 해답이 있을거 같습니다.
ID_PROCESS_PROPERTIES 를 찾아봅시다.
(Ctrl + F 로 검색해서 찾으셔도 상관없습니다~)
자 ~~ processItem 변수에 선택했던 프로세스에 대한 값을 넣어주는거 같습니다.
그 변수값 받은 PhMwpShowProcessProperties() 안으로 들어가봅시다~
딱봐도 이리 오세요 하는 함수명입니다... (너무... 억지인가요... 허허...)ㅋㅋㅋ
PhShowProcessProperties()로 GO GO GO!
Thread를 만드네요... 오우.. 그 안에 PhpProcessPropertiesThreadStart 가 눈에 뜁니다...
PhCreateThread 함수에 대한 정의를 살펴봤습니다.
흠... 시작 주소라...
시작 주소... 찾아봐야겠습니다.
찾았습니다.. 캬... 모든 참조 찾기라는 기능이 정말 좋군요!
이 함수에 대해서 쭉 내려가보는데~~~
흠... 많이 봤던건데...많이 봤었어... 뭘까요?
오늘은 여기까지!
추가적으로 설명해드려야할 부분이 매우 굉장하게 많은것 같네요...
날씨가 굉장히 추워요... 모두 따듯하게 몸조리 잘하시길 바랍니다.
내일 또한 승리하시는 하루 되세요!
이상 삽잡이였습니다!
[참고 자료]
[구글 키워드]
processhacker
handle
callback
http://sapzape.tistory.com/9
'삽질의 현장 > - 윈도우 커널' 카테고리의 다른 글
윈도우커널_#006_삽질의 시작! NtQuerySystemInformaton 정복기 (0) | 2015.06.09 |
---|---|
윈도우커널_#005_Handle 서비스하는거 보러갈사람!(2) (0) | 2015.06.09 |
윈도우커널_#003_커널은 서버라고? 더욱 생생하게 보여줘봐! (0) | 2015.06.09 |
윈도우커널_#002_커널은 서버라고? 직접 보여줘! (0) | 2015.06.09 |
윈도우커널_#001_커널은 뭐다? 서버다! (0) | 2015.06.09 |