악성코드와 백신/악성코드 개발일지

[악성코드 개발](2)[Windows 아키텍쳐]

황올뱀 2026. 2. 25. 13:56

윈도우 아키텍쳐

  1. 사용자 프로세스: 사용자가 실행하는 응용 프로그램
  2. subsystem DLL: 사용자 프로세스에서 호출되는 API를 포함한 DLL
    예) CreateFile()은 kernel32.dll에 포함되어있음
  3. NTDLL: 시스템 전체 DLL
    user-kernel 전환을 생성하는 특수 DLL
    네이티브 API or NTAPI라고도 함
  4. kernel: 드라이버 및 모듈을 호출해 작업을 완료함
    부분적으로 C:/Windows/System32/ntoskrnl.exe에 일부 저장되기도 함
  • 함수 호출 흐름
    예) CreateFile을 호출한다면...
    사용자 프로세스에서 CreateFile호출
    subsystem DLL (kernel32.dll)에서 CreateFile API 호출
    NTDLL을 통해
        NtCreateFile 호출
        이후 kernel모드로 진입하는 systemcall 실행
        그리고 커널 드라이버와 모듈을 호출해 함수 실행
  • 단, 유저 모드에서 네이티브 API (NTDLL API)를 직접 호출할 수도 있다.

 

윈도우의 메모리 관리


윈도우에서는 가상 메모리 - 물리 메모리로 매핑이 되어있다.

  • 메모리 관리 간소화
    실제 물리적 관리는 운영체제가 하고 프로그램은 신경 안씀.
  • 주소 공간 격리: 메모리에 간접 접근, 프로그램마다 메모리 분리 -> 보안성 좋음
    (자세한 내용은 컴퓨터 구조 25, 컴퓨터 구조 26 참고)

페이지

가상 메모리는 4kb 청크의 페이지 단위로 관리된다

페이지 상태

  • 사용 가능: 아직 요청되지 않은 영역
    접근 시도 시 Segmentation Fault 발생
  • 예약됨: 프로세스가 운영체제에 예약한 영역
    실제 물리적 공간을 예약한 건 아님
  • 커밋됨: 실제 물리적 공간을 할당
    프로세스가 종료되면 할당 공간 해제

페이지 보호 옵션
    페이지가 커밋되면 보호 옵션을 설정해줘야 한다

  • PAGE_NOACCESS: 모든 접근 방지
  • PAGE_EXECUTE_READWRITE: 읽기, 쓰기 활성화
  • PAGE_READONLY: 읽기 전용

 

메모리

메모리 보호

  • DEP: 페이지 보호 옵션이 PAGE_READONLY로 설정될 경우, 그 영역 내부에서 코드 실행 방지
  • ASLR: 주소 공간 레이아웃 무작위화
    기본 주소, 스택, 힙, 라이브러리 등 주요 데이터 영역의 주소를 무작위화 함

x86 VS x64 메모리 공간

  x86 x64
크기 4GB(0xFFFFFFFF) 128TB(0xFFFFFFFFFFFFFFFF)

 

윈도우 이미지

실행 파일이 메모리에 투영된 상태

즉, 파일 시스템의 데이터를 "실행 가능"한 형태로 가공해 "메모리"에 띄운 결과물

예) .exe와 같은 파일이 CPU가 당장 코드를 실행할 수 있는 상태가 됨 (메모리에 로드)

반응형