학사 나부랭이

Windows - Opening 본문

自習/Windows Operating System

Windows - Opening

태양왕 해킹 (14세) 2021. 5. 14. 21:28

MicroSoft - Disk Operating System

 원래 IBM에 납품하기 위해 개발된 16비트 시스템의 운영체제예요. 이미 8086기반으로 제작한 CP/M의 클론 OS인 86-DOS가 있었지만 지금 애플의 OSX처럼 IBM에 종속된게 아니라 Windows처럼 조립용으로 나온 이 86-DOS를 구매, 수정을 거쳐 나왔어요.

 특징으로는 멀티태스킹을 지원하지 않아요. 싱글 태스킹 && 싱글 유저로만 작업을 진행해 현재 실행하고 있는 프로그램이 시스템의 자원을 독점했어요. 때문에 하드웨어가 멀티태스킹을 지원할 수 있는 수준까지 와서는 램 상주 프로그램(Terminate and Stay Resident)이라는, 원래 프로그램을 한 번에 하나만 실행하고 종료할 때 command.com에 제어권을 돌려주는 식으로 운용했는데, 이를 약간 응용해 프로그램 A를 종료하지 않고 램의 일부분에 남겨둔 채 command.com으로 제어권을 돌려주고 특정 키를 입력하는 등의 트리거를 작동시키면 다시 A를 실행하는 방식으로 야매 멀티태스킹 방식도 있었어요. 유저 인터페이스는 당연히 CLI(Command Line Interface, 콘솔)만 지원해요.

타임스탬프

Windows 1.1~3.1

Windows가 MS-DOS의 그래픽 셸 프로그램

Windows 9x

Virtual Dos Machine으로서 부트 로더, DOS 응용 프로그램 호환 계층

Windows NT

호환성을 위해 NT Virtual Dos Machine 탑재, 32비트 환경에서만 제한적으로 사용 가능

 

Windows 9x

 MS-DOS 기반으로 작동하는 Windows 95, 98, me 세 가지를 일컬어요. me 이후로는 가정용 OS까지 NT기반으로 바뀌었죠.(2000은 NT기반이나 기업 || 전문가 타겟)

1. 먼저 일반적인 MS-DOS의 부팅 과정을 거치고 DOS 부팅 중 MSDOS.SYS에 의해 Logo.sys를 불러들이며 부팅 로고를 표시해요.

2. 그리고 IO.SYS가 레지스트리를 불러들이며 없다면 da0 확장자인 백업 파일을 불러들여 내부적으로 복붙을 해요.

3. 리얼 모드를 설정한 후 드라이버를 불러요.

4. 더블 스페이스(압축)가 설정되어 있으면 그 설정을 부르고 아니면 생략해요.

5. Win.com이 실행되고 가상 장치 드라이버를 점검, 부르는 등의 과정을 끝내고 보호 모드로 전환해요.

6. 동적 가상 장치 드라이버를 모두 부르면 본격적인 GUI 환경을 구축해요.

7. 로그온을 거치고 시작 프로그램, RunOnce 레지스트리의 시작 프로그램(다음 부팅부터는 실행 X)을 불러요.

 그런데 문제는 가정용이라 바탕화면을 공유할 수 있을 정도로 사용자 분리라는 개념이 없었고 관리자 개념은 더 없었어요. 그러니까 리눅스에서 guest 계정도 root, root 계정도 root인 상황에 guest1 계정의 바탕화면에 저장한 파일을 guest2가 접근할 수 있었어요.

그리고 후술할 NT와 구조 자체가 많이 달랐어요. DLL 같은 동적으로 로드해서 사용하는 라이브러리는 NT 커널의 경우 각각 프로세스 주소 공간에 올라가는데 9x는 공유 메모리에 올라가요. 그럼 DLL이 올라간 공간을 잘못 조작하면 값이 완전히 달라져 시스템에 치명적인 에러가 날 수도 있겠죠?커널 모드에서만 사용할 수 있는 Port I/O 명령어 같은 Privileged instruction을 사용자 모드에서 실행되는 응용 프로그램에서도 사용할 수 있었어요. 듣기만 해도 아찔하죠?

 

Windows NT

 MS-DOS 위에서 작동하던 Windows 3.1의 GUI를 그대로 가져와서 기업/서버용으로 제작한 커널과 그 커널을 기반으로 만든 OS예요. NT는 딱히 뭐 대단한 의미는 아니고 New Technology라네요.

윈도우 2000을 기점으로 기업용과 가정용의 경계가 흐려지면서 XP부터 10까지 기업용과 가정용의 구분이 없어졌어요.

여기에는 Windows NT 3.1, 3.5, 3.51, 4.0, Windows 2000, XP, Vista, 7, 8, 8.1, 10, Windows Server 2003, 2008, 2012, 2016, 2019, 2022 등이 있어요.

 

Windows NT - Kernel

Windows NT 커널

 위는 Windows NT 3.1의 기본이자 모든 NT 커널의 대략적인 구조도예요. 버전이 업데이트되면서 약간의 변화는 있지만 기본 구조는 변하지 않았어요.

 

ntoskrnl.exe

 부트 로더가 winload.exe를 실행하고 winload.exe는 ntoskrnl.exe를 로드하는 방식으로 윈도우 부팅 전부터 실행되며 커널을 생성해요. 위치는 시스템 폴더에 있으며 이 파일 그 자체로 커널이며 당연히 커널 모드에서 실행되고 있죠.

이 프로그램에서는 모든 커널 함수가 있으니 Windows API를 사용하지 않아요. System이라는 프로세스 이름을 사용해요. 또 자체에 디지털 서명이 되어있으며 윈도우 부팅 과정에서 서명이 확인되지 않으면 오류를 발생시켜요.

+)잠깐! 시스템 폴더는 OS에서 기능 확장, 제어판, 폰트 등 기본적 파일과 하위 시스템 지원 파일 등을 포함하는 커널을 담고 있는 중요 폴더예요.

OS 위치 비고
MS-DOS \Windows 시스템 구조가 단순했기에 대부분 Windows에 저장
9x Kernel \Windows\System 일부 드라이버 파일만 System32에 저장
NT Kernel 32bit \Windows\System32 Windows2000까지는 \WINNT\System32
16비트 하위 호환에 사용되는 시스템/드라이버 파일은 System에 저장
NT Kernel 64bit \Windows\System32
\Windows\SysWOW64
System32: 64비트용 시스템 파일 저장
SysWOW64: 에뮬레이트 된 32비트용 시스템 파일 저장
(에뮬레이트: CPU 명령어까지 번역, 환경을 똑같이 구성
시뮬레이트: 흉내만 냄, 실기기에서 오류가 날 수 있음
Windows 32-bit On Windows 64-bit)
64비트 윈도우에서 32비트 프로그램이 32비트 커널에서처럼 System32에 접근하려면 SysWOW64에 접근됨
리눅스 등 유닉스 /boot, /dev, /etc,
/root, /usr 등 전부
root가 아니면 수정불가. macOS는 /Library, /System도 포함

svchost.exe

 NT에서 백그라운드 서비스, 그중에서도 별도의 실행파일로 분리되지 않은 OS의 핵심 기능을 담당하는 서비스를 처리하기 위한 포괄적인 호스트 프로세스예요.

그런데 svchost.exe 프로세스는 포괄적인 만큼 그 수가 많아 악성코드의 이름을 svchost.exe로 하는 경우도 있고 몇몇은 svchoost.exe 등 비슷한 것으로 해서 시스템 폴더에 넣어버리는 경우도 있어요. 시스템 프로세스로 위장하는데 있어서는 svchost가 머릿수가 많아서 숨기 적합하다는거죠.

conhost.exe

 일반적인 콘솔 프로그램은 이 프로그램에게 화면 출력(윈도우 창)을 맡겨요.

'自習 > Windows Operating System' 카테고리의 다른 글

Windows - Memory Structure  (0) 2021.07.02
Comments