컴퓨터잡담

윈도 로그인하기 전에 배치파일을 실행하는 방법

by 디케 posted Jul 23, 2010
?

단축키

Prev이전 문서

Next다음 문서

ESC닫기

크게 작게 위로 아래로 댓글로 가기 인쇄

윈도 로그인하기 전에 배치파일을 실행하는 방법


http://blog.nextcube.pe.kr/entry/방학프로젝트-Shadower-4-Process-감추기2


방법 1.

 두 프로세스간 감시자 역할


방법 2.

프로세스 은혜


방법3.

작업관리자 실행시 종료


방법4.

서비스등록으로 백그라운드화



 ini 파일을 이용하는 방법
INI 파일은 초기화라는 initialize의 약자로 윈도우나 여러 가지 프로그램의 최초 정보가 들어 있는 텍스트 기반의 크기가 64 KB로 제한되는 윈도우 초기화 파일이다. 
주요 ini 파일로는 win.ini, system.ini 등이 있고 이들 파일은 윈도우의 기본 구동 설정을 담고 있으며 사용자에 의해 언제든지 수정 가능하다. 이러한 ini 파일의 설정을 변경하여 윈도우가 시작되는 초기에 특정 파일을 실행 시킬 수 있는데 주로 다음과 같은 세 가지 파일을 이용한다. 

① Win.ini
윈도우의 시작시 C:\WINDOWS(윈도우 98 기준) 폴더에 위치한 Win.ini 파일의 load 와 run 부분에 명시된 경우 해당 파일이 자동 실행된다.
윈도우 설치 후 디폴트로 "load="과 run=" 부분은 비어있다. 이 win.ini 파일을 조심스럽게 다루지 않으면 부팅이 되지 않을 수 있으므로 함부로 수정하지 않는 것이 좋다.

[사례]
2000년 12월 발견된 화면에 커다란 회오리 모양의 그림을 출력하는 증상을 나타내어 많은 피해를 일으켰던 Hybris 웜에서 win.ini 파일의 [windows]의 run= 부분을 다음과 같이
수정하는 방법을 이용한다.
run=C:\Windows\System\amiaamia.exe
<※ 생성되는 파일명이 임의로 바뀌어 amiaamia.exe 라는 파일명은 변한다. >


② System.ini
윈도우 시작시 C:\WINDOWS(윈도우 98 기준)폴더에 위치한 System.ini 파일에서 시스템 정보를 읽어 오는데 이때 다음과 같은 boot 부분에 파일명을 명시한 경우 해당 파일이 자동 실행된다.
system.ini 파일 역시 잘못 수정할 경우 아예 윈도우 부팅이 되지 않을 수 있으니 함부로 수정하지 않는 것이 좋다. 


[사례]
2001년 9월에 등장하여 최고의 피해를 일으킨 Nimda에서 system.ini 파일을 수정하여 자동 실행되도록 다음과 같이 수정하였다.
Shell=explorer.exe load.exe - dontrunold
<※ Nimda에 감염된 경우 생성되는 파일명이 load.exe 이다. >


③ wininit.ini
C:\WINDOWS\(윈도우 98 기준) 폴더에 wininit.ini 파일이 존재하면 시작 프로그램에 의해 한번 실행된 후 삭제된다. 예를 들어 wininit.ini 파일의 내용이 다음과 같을 때 
[Rename]
NUL=c:\windows\picture.exe
NUL=c:\windows\picture.exe 문장은 c:\windows\picture.exe를 NUL 로 보낸다는 뜻이며 이것은 삭제한다는 것을 의미한다. 이러한 행동은 은밀하게 일어나므로 사용자는 의식하지 못하는 것이 대부분이기 때문에 악성 코드의 실행 흔적을 감추는 방법으로 많이 사용된다. 


[사례]
2001년 제작된 Nimda에서도 wininit.ini 파일을 이용하여 윈도우 재부팅시 자동으로 삭제되도록 다음과 같이 설정한다.
[Rename]
NUL = [실행되었던 경로]\[파일이름.EXE]
<※ 이때 파일이름은 임의로 정해진다.>



2 . 레지스트리를 이용하는 방법 
레지스트리를 이용하는 방법은 최근 나타나는 웜들이 가장 많이 사용하는 방법으로 특히 스크립트 언어로 제작된 경우 아주 손쉽게 레지스트리를 다룰 수 있다. 레지스트리를 이용한 자동 실행 설정 방법은 다음과 같다. 윈도우의 시작 시 자동 시작 되는 레지스트리의 위치는 다음과 같으므로 원할 경우 해당 레지스트리에 파일을 등록한다. 

[HKEY_LOCAL_MACHINE\Software\Microsoft\Windows\CurrentVersion\RunServices]
[HKEY_LOCAL_MACHINE\Software\Microsoft\Windows\CurrentVersion\RunServicesOnce]
[HKEY_LOCAL_MACHINE\Software\Microsoft\Windows\CurrentVersion\Run]
[HKEY_LOCAL_MACHINE\Software\Microsoft\Windows\CurrentVersion\RunOnce]
[HKEY_CURRENT_USER\Software\Microsoft\Windows\CurrentVersion\Run]
[HKEY_CURRENT_USER\Software\Microsoft\Windows\CurrentVersion\RunOnce]
[HKEY_CURRENT_USER\Software\Microsoft\Windows\CurrentVersion\RunServices]

다음의 레지스트리 값은 실행 파일 쉘들의 디폴트 값이다. 

[HKEY_CLASSES_ROOT\exefile\shell\open\command]@="\"%1\"%*"
[HKEY_CLASSES_ROOT\comfile\shell\open\command]@="\"%1\"%*"
[HKEY_CLASSES_ROOT\batfile\shell\open\command]@="\"%1\"%*"
[HKEY_CLASSES_ROOT\htafile\Shell\Open\Command]@="\"%1\"%*"
[HKEY_CLASSES_ROOT\piffile\shell\open\command]@="\"%1\"%*"
[HKEY_LOCAL_MACHINE\Software\CLASSES\batfile\shell\open\command]@="\"%1\"%*"
[HKEY_LOCAL_MACHINE\Software\CLASSES\comfile\shell\open\command]@="\"%1\"%*"
[HKEY_LOCAL_MACHINE\Software\CLASSES\exefile\shell\open\command]@="\"%1\"%*"
[HKEY_LOCAL_MACHINE\Software\CLASSES\htafile\Shell\Open\Command]@="\"%1\"%*"
[HKEY_LOCAL_MACHINE\Software\CLASSES\piffile\shell\open\command]@="\"%1\"%*" 

여기서 각 키들은 디폴트로 %1%* 값을 갖는데 이들을 "server.exe %1%*" 로 변경할 경우 exe, com, bat, hta, pif 파일들의 실행 시 매번 server.exe 파일이 자동으로 실행된다. 


[사례]
2001년 7월 발생하여 많은 피해를 일으켰으며 특히 정보유출로 인한 사회적인 피해를 초래한 Sircam의 경우 다음과 같이 윈도우가 시작될 때마다 웜이 실행되고 exe 파일이 실행될 때마다 매번 자동 실행되도록 하는 두 가지 방법의 레지스트리 설정을 이용한다.

다음과 같이 설정하여 윈도우 시작마다 자동 실행되고 HKEY_LOCAL_MACHINE\Software\
Microsoft\ Windows\CurrentVersion\RunServices 에 Driv er32= C:\Windows\System
\scam32.exe 값 추가 exe 파일이 실행될 때마다 자동 실행된다. 

HKEY_CLASSES_ROOT\exefile\shell\open\command 에 C:\recycled\sirc32.exe "%1" %*" 값 설정 Sircam과 같이 레지스트리를 설정하는 방법을 이용하는 웜은 쉽게 찾을 수 있을 것이다.



3 . 자동 시작 폴더를 이용하는 방법 
윈도우의 재시작 시 이 폴더 안에 있는 모든 프로그램들은 자동으로 실행된다. 윈도우에서 이러한 자동 
시작 폴더는 다음과 같으며 여기서는 한글 윈도우와 영문윈도우 경우만 명시한다.

- Win 98에서
한글 윈도우 : C:\WINDOWS\시작 메뉴\프로그램\시작프로그램
영문 윈도우 : C:\windows\start menu\programs\startup
시큐어 메신저나 한컴 쪽지 등과 같은 프로그램들이 자동시작 폴더에 위치시켜 윈도우 시작시 마다 자동으로 실행되도록 설정한다.

- Win 2000에서
한글 윈도우 : C:\Documentsand Settings\Administrator\시작 메뉴\프로그램\시작프로그램
영문 윈도우 : C:\Documentsand Settings\Administrator\start menu\programs\startup
이러한 폴더는 다음과 같이 레지스트리에 등록되어 있어 이러한 기능이 제공되는 것이다.

HKEY_CURRENT_USER\Software\Microsoft\Windows\CurrentVersion\Explorer\ShellFolders
에서 Startup의 데이터 값으로 한글 윈도우 경우 C:\WINDOWS\시작 메뉴\프로그램\시작프로그램으로 설정되어 있을 것이다.

이러한 방법은 임의의 프로그램이 자동 시작 폴더에 특정 파일을 복사함으로써 윈도우 시작마다 자동으로 동작하도록 설정할 수 있는 쉬운 방법이다. 



4 . bat 파일을 이용하는 방법 
배치파일의 기능은 순차적이고 반복된 동일한 과정을 몇 개의 혹은 수십, 수백 개의 연관된 명령어를 하나의 파일로 집약하여 그 하나의 파일만 실행함으로써 원하는 작업 과정을 수행하도록 만든 것이다. 텍스트 형식으로 이루어져 있으며, 응용 프로그램 실행시 관련파일의 실행 순서와 옵션을 지정한다.

bat는 도스용 파일로 윈도우에서는 자주 사용되지는 않으나 autoexec.bat 파일과 같이 시스템 부팅시 중요하게 이용되기도 한다. 

① Autoexec.bat
C:\ 에 위치한 BAT 파일인 Autoexec.bat은 운영체제의 사용 환경을 설정하는데 사용되는 파일로 프롬프트의 형식이나 기본 경로를 설정하며 여러 가지 유틸리티의 환경 설정을 부팅과 동시에 자동으로 이루어지도록 한다. 부팅 시 필요한 중요한 파일로 악성 프로그램에서 사용하는 BAT 파일 중 가장 많이 이용되며 이 파일에 등록된 경우 윈도우 시작시 도스레벨에서 매번 자동 실행된다. 
웜이나 바이러스와 같은 악성 코드들이 C 드라이브를 삭제하는 등의 명령을 autoexec.bat 파일에 삽입하여 심각한 피해증상을 나타내는데 주로 사용된다. 


[사례]
2002년 1월 발견된 Gigger 웜은 C 드라이브의 모든 파일을 삭제하는 증상을 갖는데 이때 autoexec.bat 파일을 이용한다. 다음과 같은 명령어를 추가하여 C 드라이브를 포맷하며 비슷한 방법으로 사용하는 웜들이 많이 존재한다.
ECHO y lformat c:


② Winstart.bat

C:\WINDOWS(윈도우 98 기준) 폴더에 위치한 winstart.bat 파일은 일반 BAT 파일과 같은
기능을 하며 윈도우 시작마다 자동 실행된다.


[사례]
2001년 8월에 발견된 Cuerpo와 같은 웜에서 winstart.bat 파일을 생성하여 레지스트리 파일을 생성하기도 하며 2001년 7월 국내에서 제작된 Reality 에서는 다음과 같이 특정 파일을 생성하여 실행하도록 설정한다.
@echo off
debug < c:\Windows\System\System.dll > nul
copy c:\Command32.com c:\Windows\Cammand\Command32.com
c:\Windows\Cammand\Command32.com



5 . 응용 프로그램 ICQ의 설정을 이용하는 방법 
특정 응용 프로그램을 설치하는 경우 응용 프로그램에 사용에 맞게 자동으로 실행되도록 설정하는 경우가 있다. 
악성 프로그램에서 이러한 점을 이용하여 다른 응용 프로그램에서 설정된 사항을 사용하기도 하는데 본 문서에서는 세계적으로 많이 사용되고 있는 대표적인 채팅 프로그램 ICQ의 설정 방법을 이용하는 것에 대하여 알아본다.
시스템에 체팅 프로그램 ICQ의 설치 시 다음 레지스트리에 등록된 모든 값은 ICQNET 이 인터넷 연결을 확립할 경우 실행된다. 이때 다음과 같은 값을 등록하여 자동 실행되도록 만들 수 있다. [HKEY_CURRENT_USER\Software\Mirabilis\ICQ\Agent\Apps\test]
"Path"="test.exe "
"Sta rtup"="c:\\test"
"Pa ramete rs "=""
"Ena ble "="Yes " 


[사례]
2001년 1월에 발견된 Leave에서 다음과 같은 설정을 이용한다.
HKEY_CURRENT _USER\Software\Mirabilis\ICQ\Agent\Apps\ 에 icqrun C:\WINDOWS\regsv.exe 값 추가



6 . 파일(확장자) 숨김 방법
바이러스나 웜과 같은 악성 프로그램들이 지능화 되면서 여러 가지 방법들을 이용하는데 파일자체나 확장자를 숨기는 방법은 다음과 같다. 

① 레지스트리 설정
다음과 같이 레지스트리값을 설정할 경우
[HKEY_LOCAL_MACHINE\Software\CLASSES\ShellScrap]
(기본값)="스크랩 개체" "NeverShowExt"=
SHS 파일의 확장자가 보이지 않게 된다. NeverShowExt 키는 파일의 확장자를 숨기는 기능을 갖는데 이 경우는 .SHS 파일이 보이지 않게 된다. 이는 Girl.jpg.shs 파일이 존재할 경우 마치 그림 파일 Girl.jpg인 것처럼 위장할 수 있다는 것이다. 따라서 사용자는 NeverShowExt 키에 등록된 내용은 전부 삭제하여 모든 확장자명이 숨겨지지 않도록 해야한다. 

② 탐색기 설정
탐색기에서 알려진 확장자명이 보이지 않도록 숨기는 기능이 제공되는데 이를 해지하여 모든 확장자명이 정확히 보이도록 해야한다.
탐색기를 실행하여 도구 메뉴의 폴더옵션에서 알려진 파일 형식의 파일 확장명 숨기기 선택을 해지 한 후 현재 폴더처럼 버튼을 클릭 한 후 확인 하여 종료한다. 추가적으로 모든 파일의 숨김 속성을 이용하여 일부 파일이 보이지 않을 수 있는데 숨김 파일도 표시되도록 한다. 


[사례]
2001년 2월 발견된 AnnaKournikova는 메일로 전파시 첨부 파일명이 AnnaKournikova.jpg.vbs 이다. 이때 확장자명이 보이지 않도록 설정되어 있는 경우 AnnaKournikova.jpg 까지만 보이게 되므로 그림파일로 혼동하도록 유도한 것이다.



③ API HOOKing
가장 최근에 나온 방법으로 원도우즈상의 모든 파일을 접근하는 Find 류의 함수를 가로채서 해당 웜 파일의 이름을 건너 뛰게 하여 탐색기 뿐만 아니라 백신등에서 조차 파일이 없는 것처럼 인식되게 하는 방법이다. 이는 최근의 모든 백신에서 추가된 [스텔스파일탐지기능] 으로 해결이 가능하다. 

여기 까지가 현재 발생하는 웜의 현 주소이다. 
이후의 발전될 웜이 어떨지 상상만 해도 두렵다. 파일감염 바이러스 처럼 다형성과, 좀 더 진화된 스텔스와, 저레벨적인 시스템접근이 이루어진다면, 아마 FORMAT 이 최선일 수 밖에 없지 않을까 생각한다. 

하지만 사용자들은 백신을 믿고 있으면 될 것이다. 
우리들 백신 개발자들은 어떤 새로운 방법이 나타나든 헤쳐나갈 것이니까.. 사용자들의 몫은 꾸준한 백신과 윈도우즈의 업데이트이다.


1.1 AutoExNT 서비스를 이용
  1. http://windows2000faq.com/download/autoexnt.zip 또는 autoexnt.zip 을 다운받아 임의의 디렉토리에 압축을 푼다
  2. %systemroot%/system32 디렉토리에 autoexnt.exe, autoexnt.bat, servmess.dll파일을 넣는다
  3. 명령프롬프트에서 instsrv install 라고 입력한다
  4. 서비스에 AutoExNT라는 서비스가 생성된걸 확인한다.
  5. %systemroot%/system32/autoexnt.bat파일을 편집하여 부팅시에 실행하고자 하는 명령어를 입력한다.
     AutoExNt 서비스를 시작했을때 autoexnt.bat 파일의 내용이 실행됨, autoexnt.bat 파일 작성
      @echo off
      cd /d D:\mydir\
      myprogram.exe
  6. 서비스 실행
      - 제어판->관리도구->서비스 메뉴에서 AutoExNt 를 시작
      - 또는 도스창에서, net start AutoExNt 를 입력
      - 중지시에는 net stop AutoExNt 를 입력
  7. 작업관리자에서 실행된 프로그램을 확인할 수 있음 
  주의) fork된 이미지는 서비스 중지에 문제가 있을 수 있다.


일반 윈도 프로그램 서비스에 등록하기
1. 개요
MFC Dialog 기반 프로그램으로 원격접속 터미털에서 실행하였을 경우 그 세션이 닫히면 실행된 프로그램도 같이 종료어 서비스가 중지된다. 이 때문에 친구찾기 서버를 리부팅하였을 경우 반드시 터미널에서 로그인하여 실행시켜 주어야 하는 번거로움을 해소하기 위하여 서비스에 등록하고, 시스템 재부팅시 자동으로 서비스가 시작 되도록 한다.
2. 작업순서[다운로드/사이트]
  A. Windows Resource Kit에서 INSTSRV.EXE, SRVANY.EXE 파일을 C:\WINNT 폴더에 복사한다.
      INSTSRV.EXE : 응용 프로그램을 서비스에 등록하는 유틸리티
      SRVANY.EXE : 서비스에서 응용 프로그램을 실행시켜주는 유틸리티
  B. 레지스트리 백업
  C. KidsServer.exe 서비스 등록
      CMD 창에서 아래의 명령을 실행하여 서비스 추가
      >INSTSRV.EXE MyServiceName SRVANY.EXE
  D. 레지스트리 편집기(Regedt32.exe)를 실행하고 생성된 KidsServer 서비스를 찾는다.
      HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\MyServiceName 
  E. 편집기 메뉴에서 키 추가를 눌러 다음의 키를 추가한다.
      키 이름 : Parameters
      클래스 : <비워 둠>
  F. Parameters 키를 선택하여 그 하위에 다음의 값을 추가한다.
      값 이름: Application
      데이터 형식: 문자열 값
      문자열: D:\MyService_Path\MyService.exe
  G. 레지스트리 편집기를 닫는다.
  H. 제어판의 서비스 목록에 MyServiceName 가 있는지 확인하고, 있다면 서비스를 시작한다.
  I. 작업관리자에서 MyService.exe 가 실행중인지 확인한다.
  K. 서비스 삭제
      >INSTSRV.EXE MyServiceName remove

2. 시작프로그램 등록에 의한 자동로그인 및 실행

  2.1 [시작]->[프로그램]->[시작프로그램]에 실행파일을 등록하거나 bat파일을 작성하여 등록한다.
       이 방법의 단점으로는 해당 사용자에 의한 로그인이 필수적이며, 터미널 서비스를 사용할 경우 여러개의 데몬이 생성될 수 있다.
      직접 데몬에 해당 실행 파일이 띄워 있는지 체크하여야 한다.


  • 개요 

그룹 정책을 사용하여 배치 파일, VB 스크립트 또는 JScript인 시작 스크립트를 실행하도록 Windows 2000 (또는 그 이상의 버전)을 구성할 수 있다.
이러한 정책은 도메인 전체에 적용되는 정책이거나 특정 컴퓨터에만 적용되는 로컬 정책일 수 있다.
AutoExnt 유틸리티는 Windows 2000 또는 Windows NT 4.0 도메인에서 Microsoft Windows NT 4.0 기반 워크스테이션을 실행할 때 사용할 수 있도록 Resource Kit에 포함되어 있다.
AutoExNT 서비스를 통해 관리자는 컴퓨터를 처음 시작할 때 사용자 지정 배치 파일을 실행하도록 Windows 2000 기반 컴퓨터를 구성할 수 있다. 또한 사용자나 관리자는 이 사용자 지정 배치 파일을 실행할 때 로그온할 필요가 없다.


  • AutoExNT 서비스 설치
  1. 메모장과 같은 텍스트 편집기를 사용하여 Autoexnt.bat라는 배치 파일을 만들고 이 파일에 시작할 때 실행할 명령을 포함시킨다.
  2. 방금 만든 Autoexnt.bat 파일을 Resource Kit CD-ROM에 있는 Autoexnt.exe, Servmess.dll 및 Instexnt.exe 파일과 함께 컴퓨터의 %SystemRoot%\System32 폴더에 복사.
  3. 명령 프롬프트에서 instexnt install을 입력한 다음 Enter.


그러면 다음과 같은 메시지가 나타난다.
CreateService AutoExNT SUCCESS with InterActive Flag turned OFF
데스크톱에서 실행 중인 설치 프로세스를 보려면 /interactive 스위치를 사용하여 AutoExNT 서비스를 설치해야 한다. 예를 들어, 명령 프롬프트에서 instexnt install 대신 instexnt install /interactive를 입력한 다음 Enter 키를 누른다.


※ 참고: /interactive 스위치를 사용하면 로컬로 로그온한 모든 사용자가 실행 중인 프로세스를 중지할 수 있다.


  • AutoExNT 서비스 테스트

AutoExNT 서비스를 테스트하려면 관리자 계정으로 컴퓨터에 로그온하고 명령 프롬프트에서 net start autoexnt를 입력한 다음 Enter 키를 누른다. 그러면 Autoexnt.bat 파일이 MS-DOS 창에서 실행된다.


참고: AutoExNT 서비스에는 AT 명령어의 /interactive 스위치와 유사한 /interactive 스위치가 포함되어 있다. 이 스위치를 사용하면 실행 중인 프로세스 상태를 확인할 수 있다. 시스템 시작 시 AutoExNT가 실행될 때 어떤 사용자 환경 변수도 선언되지 않았기 때문에 전체 경로 이름을 사용해야 한다.


또한 종속 프로세스를 실행하기 전에 서비스를 실행해야 하는 경우에는 Autoexnt.bat 파일의 시작 부분에 이 서비스를 시작하는 명령을 포함시켜야 한다. 예를 들어, 배치 파일에 서버 서비스가 실행 중이어야 실행할 수 있는 명령이 포함되어 있으면 Autoexnt.bat 파일의 시작 부분에 net start server 명령을 포함시켜야 한다.


  • 시작할 때 AutoExNT 서비스가 실행되도록 구성
  1. 시작을 누르고 프로그램, 관리 도구를 차례로 가리킨 다음 컴퓨터 관리를 누른다.
  2. 서비스 및 응용 프로그램 분기를 두 번 눌러 확장한 다음 서비스를 누른다.
  3. AutoExNT 서비스를 두 번 누르고 시작 유형 상자에서 자동을 누른 다음 확인을 누른다.