Windows에서 프로세스 이름 숨기기
(Delete the process name from being displayed in Windows task manager.)
몇년 전(2005.08.26)에 제 홈페이지(AiRPAGE.ORG)에 올려 놓았던 글을 정리삼아 이곳에 퍼 둡니다.
원본이 있는 사이트 : http://airpage.org/
(Delete the process name from being displayed in Windows task manager.)
몇년 전(2005.08.26)에 제 홈페이지(AiRPAGE.ORG)에 올려 놓았던 글을 정리삼아 이곳에 퍼 둡니다.
뭐? |
Windows Task manager의 프로세스 탭에 나타나는 프로세스 이름을 숨기기 위한 가이드 강좌입니다. 이글과 관련한 내용이 인터넷을 뒤지면 수백개 이상이지만, 속시원히 드라이버 코드를 제시해 놓은 예는 별로 없더군요.(아예 없지는 않습니다.) 그냥 이유가 있겠지 생각하고 저도 걍 따라 하는 대신^^- 자세히 써보려 합니다. | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
|
- 환경 Microsoft Windows® XP에서 테스트 되었습니다. - Tool Microsoft Visual C++® 6.0 Windows® XP DDK - Library GunShadow Library [GunShadow Library page] |
||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
|
진행해 볼 전체 목록 구성은 대충 이렇습니다. - Windows 프로세스 관리를 위한 구조체 파악 - GunShadow Library 드라이버 일부 코드 제시 |
| |||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
|
::TOP | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
|
자, 그럼 시작합니다! 아래 자료는 Windows가 프로세스를 관리하는 내부적인 구조체의 모습입니다. 위의 준비물 링크에서 얻을 수 있는 ntifs.h 파일에서 EPROCESS 구조체의 모습이기도 합니다. 커널 디버거에서 아래와 같이 커맨드를 주면 나타납니다.
UniqueProcessId 는 프로세스의 고유 ID입니다. ImageFileName스트링은 Ctrl - Alt - Tab키를 누를 경우 나타나는 태스크 관리자의 프로세스 탭에서 리스트되어 볼 수 있는 프로세스 이미지 이름입니다. 자- 나머지 하나 ActiveProcessLinks 가 중요합니다. 잠시 아래의 그림을 보겠습니다. 프로세스 정보들은 위와 같이 순환큐처럼 Linked list되어 앞과 뒤의 프로세스 정보를 가르키고 있습니다. 그렇게 앞과 뒤의 프로세스 정보를 가르키고 있는 링크가 바로 ActiveProcessLinks인 것입니다. 이 리스트의 제일 첫 헤드를 가르키고 있는 PsActiveProcessHead를 통해 우리는 프로세스 정보 링크를 순환할 수 있습니다. 하지만, PsActiveProcessHead는 Windows에서 Export되지 않은 심볼입니다. 그래서 다른 방법으로 우회하여 접근해야 하는데, PsInitialSystemProcess라는 노출되어 있는 심볼을 통해서 가능합니다. 물론 이것조차 노출되어 있지 않다 하더라도 각종 서적이나 웹에서 제시하고 있는 방법처럼, 현재 프로세스를 가르키는 PsGetCurrentProcess등의 API로부터 얻는 ActiveProcessLinks 포인터를 순환하여 PsActiveProcessHead를 찾을 수도 있습니다. 그렇게, 얻게되는 PsInitialSystemProcess를 통해 프로세스 정보 리스트를 순환하여 우리는 각각의 프로세스 구조체에서 ImageFileName 변수를 얻어올 수 있습니다.
프로세스를 순환하는 방법은 링크드 리스트 순환방법이랑 똑같습니다.
자 그럼 프로세스를 숨겨 볼까요? 각프로세스 이름도 얻어올 수 있겠다, 프로세스 정보들도 순환할 수 있다면- 프로세스 숨기는 일도 간단하겠죠? 바로 이 링크의 순서를 바꾸는 것입니다.
2005.08.26, 이건우 |
::TOP | |||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
참고 |
Undocumented Windows 2000 Secrets - A Programmer's Cookbook (SVEN B. SCHREIBER) Windows구조와 원리 그리고 Codes (정덕영) 아무도 모르는 Process (www.devguru.co.kr, 곽태진) GunShadow Library page 마이크로 소프트웨어 기고 자료 - 윈도우 커널 해킹 1(마이크로소프트웨어 2005년 11월호) - 윈도우 커널 해킹 2(마이크로소프트웨어 2005년 12월호) |
원본이 있는 사이트 : http://airpage.org/