티스토리 뷰

IT/OS

userinit.exe [펌 genkino.tistory.com]

NineKY 2008. 2. 21. 16:30
Windows라는 운영체제가 윈도우 9X시절의 악명 높던 블루스크린에서 나름 많이 진화하여 NT계열의 2000, XP로 오면서 안정성 측면에서 참 많은 발전이 있었던 것이 사실이며 또 이번 Vista에서는 더더욱 강화된 보안 기능 운운 하며 좀 더 안정적이고 좋은 사용 환경을 만드려고 애를 쓰고 있지만서도, 참으로 Windows는 생각지도 못한 헛점이 참 많다.

그 생각지도 못한 많은 헛점의 가장 큰 원인 중에 하나를 꼽으라면 난 단연 레지스트리를 꼽겠다.

레지스트리의 세계는 알면 알수록 참으로 넓고 지저분하고 원칙없고 오묘하다.


'HKLM\SOFTWARE\Microsoft\Windows NT\CurrentVersion\Winlogon'
이라는 키에는 꽤 중요한 Value가 두 개 있다.

하나는 Shell이라는 ValueName을 가진 값이며 그 값에는 'Explorer.exe'가 기본값이고, 나머지 하나는 Userinit이라는 ValueName을 가진 값이며 그 값에는 'C:\Windows\System32\userinit.exe,' 라는 기본 값을 갖고 있다.(C:\Windows\System32 폴더는 윈도우 설치 경로에 따라 틀리다)

대충 보면 알겠지만 Shell에 등록된 Explorer.exe는 윈도우 로그온시에 실행되어서 일반적으로 화면 하단의 시작 버튼이 포함된 태스크 바를 생성하면서 기본 쉘 역할을 해주게 되며, userinit.exe는 파일명에서 알 수 있듯이 유저 기본 환경 등등을 초기화시켜주는 꽤나 중요한 파일이 되겠다.

이 두 개 Value는 악성코드라 불리는 나쁜 놈들도 자주 애용한다.

예를 들어 저 Shell이란 Value에 등록된 'Explorer.exe'의 경우 기본적으로 윈도우 설치 폴더(XP의 경우 기본적으로 C:\windows)에 해당 파일이 있는데, 일부 악성 코드들은 C:\windows\system32 폴더에 'explorer.exe'라는 같은 이름의 파일을 생성시켜 놓는다.

복잡한 설명은 넘어가고 암튼 윈도우는 실행하기 위해 파일명을 받으면 기본적으로 맨 처음 찾는 폴더는 system폴더로써 저기 c:\windows\system32 폴더가 되겠다.

그러면 윈도우는 c:\windows에 있는 정상적인 explorer.exe를 실행시키지 않고, c:\windows\system32 폴더에 있는 explorer.exe를 실행시켜버리게 되는데, 그러면 이제 사용자도 모르는사이에 악성코드 제작자가 원하는대로 윈도우 시작하면서부터 놀아나게 되는거다.

보통 저 가짜 explorer.exe의 역할이라면 자기가 원하는 다른 악성코드 파일을 생성 또는 실행시켜놓고 정상적인 explorer.exe를 실행함으로써 사용자가 보기엔 지극히 정상적인 부팅과정을 진행하고 있구나. 하고 생각하게 해 주는 것이다.

또 하나의 문제의 Value인 Userinit의 경우 기본값을 보면
'C:\Windows\System32\userinit.exe,'
라고 되어 있어 맨 마지막에 ',' 가 보인다.

눈치가 빠르면 알 수 있겠지만 저 콤마 뒤에 자기가 실행을 원하는 다른 파일 경로를 적어놓으면 로그온시에 그 파일역시 같이 실행되어 버린다.

악성코드들이 저 value의 값에 자신이 원하는 악성코드 파일을 추가해서 암튼 또 시작하자마자 당신의 PC는 악성코드 맘대로 놀아나게 된다.


이 두개의 값 이외에도 꽤 많다. 저런식의 역할을 하는 Value.. 들이.


잡소리가 길다.

암튼 저 Userinit이라는게 참 중요한 역할을 하는 값이라는 거다.
그리고 보통 저 값은 어떤 식으로든지간에 전혀 보호가 되어있지 않다.

보통 일반적인 프로그램들도 그렇지만 악성코드들도 보면 의외로 버그나 문제점이 많다.
그래서 악성코드 제작자도 원하지 않던 엉뚱한 문제들을 일으키는 경우가 있다.

저 Userinit을 건드리는 아주 극악한 놈들의 일부가 수정중에
본래 적혀 있어야 할 'C:\Windows\System32\userinit.exe' 마저 손상시킨다면
어떻게 될까.
최악의 경우 Userinit의 값이 빈칸이 되어버리면 어떻게 될까?

손상된 직후에야 별 문제가 없지만 재부팅하게 되면 이렇게 된다.


손상된 직후에야 별 문제가 없지만 재부팅하게 되면 ... 무한 로그온 로그오프.

자 그럼 이제 어떻게 할 것이냐...

Windows XP부터는 '시스템 복원' 이라는 꽤 괜찮은 복원 솔루션이 제공되는데, (여담이지만 예전에 많이 돌던 winXP 최적화 팁을 보면 하드디스크 공간도 낭비하고 속도도 좀 느려진다는 이유로 시스템 복원 사용 못하게 하기 라는 것이 있는데 이건 참 비추다. 시스템 복원 유용할 때가 꽤 많이 있다. 난 카스퍼스키한테 뒤통수 맞아 시스템 복원을 유용하게 두번이나 썼다.) 이걸로 해볼까 하지만서도 이 프로그램 역시 일단 어떤 계정으로던지 로그인이 된 이후에나 생각해볼 문제다. 로그온도 안되는 저 상태에서는 불가하다.

그럼 다른 방법은 없을까.


여러모로 궁리해봤는데 일단 없다. (물론 내가 실력이 안되 못 찾은 것일수도 있다.)

...


저 Value 값하나 잘못되면 윈도우 다시 깔아야 한다.

이건 무슨 아킬레스의 최대 약점이었다는 아킬레스 건도 아니고 저 Value하나 날아갔다고 윈도우 전체가 손도 못쓸지경이 되는게 참 어이없다. =_=

허접하게 만든 프로그램에서도 설정 파일이 없거나 뭔가 이상하면 기본 설정으로 다시 시작하게 해주는데도 윈도우는 그런 것에 대한 대책이 없어보인다.



부디 Vista에서는 바이러스와 악성코드들로부터만 우리를 지켜주지말고이런 어이없는 상황에서도 우리를 지켜주길 바랄 뿐이다. 흠.. 뭐.. 안 지켜주면 저런 중요한 곳 가드해주는거 만들어주면 인기 좋겠구만. 만들어봐야지 =_=

이올린에 북마크하기(0) 이올린에 추천하기(0)
Posted by 52

트랙백 주소 :: http://genkino.tistory.com/trackback/27

댓글을 달아 주세요

  1. dragonfly 2006/12/25 08:34  댓글주소  수정/삭제  댓글쓰기

    userinit 날아간 경우에 XP가 깔린 하드디스크가 하나 더 있으면 쉽게 해결할 수 있는데요.

    예비 하드디스크를 main으로, 문제 생긴 놈을 sub로 연결하고
    main쪽의 registry편집기(regedit)에서 sub의 registry 하이브
    파일을 불러들여 편집한 후에 sub로 부팅하면 정상으로 돌아옵니다.

    자세한 것은 이쪽을 참조하세요.
    http://qaos.com/article.php?sid=1896

    저는 우연히 하드 파티션이 두개라서 다른 한쪽에 깔린 xp에서 불러들여 간단히 해결했습니다.

  2. 52 2006/12/26 10:10  댓글주소  수정/삭제  댓글쓰기

    오오 감사합니다. 그런 방법이 있군요. ^-^
    정말 좋은 정보 감사드립니다. ㅎㅎ

  3. マサキ君 2007/10/20 01:46  댓글주소  수정/삭제  댓글쓰기

    윈도우가 이래저래 헛점이 많다는건 알고 있었지만 이건 처음 듣네요 +_+
    좋은 정보 잘 읽고 갑니다.

  4. 52 2007/10/20 23:15  댓글주소  수정/삭제  댓글쓰기

    하하 감사합니다. ^^

공지사항
최근에 올라온 글
최근에 달린 댓글
Total
Today
Yesterday
«   2024/05   »
1 2 3 4
5 6 7 8 9 10 11
12 13 14 15 16 17 18
19 20 21 22 23 24 25
26 27 28 29 30 31
글 보관함