windows process
윈도우에서 실행되는 프로그램 또는 응용 프로그램
-> 프로세스 간 기본적으로는 자원 격리
각각의 프로세스에는 ID가 있고 (PID)
프로세스 내에서 스레드는 유일한 ID를 갖는다 (TID)
프로세스 메모리
페이지 단위로 운영체제가 할당
- private memory: 다른 프로세스와 공유 못함
- mapped memory: 프로세스간 공유 가능
다른 프로세스에 의해 변경되지 않음 (read only) - image memory: 실행파일의 코드, 데이터 포함
주로 dll파일과 관련
프로세스 환경 블록 (PEB)
사용중인 프로세스에 대한 정보를 담은 구조체
-> 운영체제가 실행중인 프로세스 정보를 저장할 때 사용
-> user 메모리 영역에 저장됨
핵심 필드
- BeingDebugged: 이 프로세스가 디버깅 당하고 있나
-> 디버깅을 탐지해 anti-debugging 기능을 구현할수도? - Ldr: 로드된 dll 목록
-> 내가 로드한 dll을 숨길수도?
-> kernel32.dll같은 dll의 주소를 찾을수도? - ProcessParameters: 전달된 인자, 환경변수, 실행 파일 경로 저장
- AtlThunkSListPtr: thunking 함수와의 연결 포인터 저장
- PostProcessInitRoutine: 모든 스레드의 TLS 초기화 후 운영체제에서 호출하는 함수의 포인터 저장
- SessionID
- ImageBaseAddress: Image base의 주소
스레드
프로세스 내에서 독립적으로 실행될 수 있는 실행 단위
- 같은 프로세스 내의 자원을 공유
코드
데이터
힙 - 전역변수나 힙을 통해서 직접 통신 가능
프로세스간 통신은 IPC를 이용해야 함... - TLS: 스레드 별 고유의 데이터를 저장하는 공간스레드 환경 블록 (TEB)스레드 정보를 담은 구조체
- TlsSlots: 스레드 별 데이터를 저장하는 장소
- TlsExpansionSlots: 추가 TLS Slot
dll이 사용하게 예약됨 - 참고) TEB 안에는 PEB의 주소가 저장되어 있다
x86: FS:[0x30]
x64: FS:[0x60]
프로세스 & 스레드 핸들
윈도우가 리소스 식별, 제어하기 위한 값
프로세스마다 고유의 값이 있음
OpenProcess(권한, 상속핸들, PID)OpenThread(권한, 상속핸들, TID)
- 핸들 테이블
프로세스마다 가지고 있는 핸들 값과 커널 객체를 연결하는 테이블
-> OpenProcess로 가져온 핸들값(정수)는 이 핸들 테이블의 인덱스임! - handle leaking
memory leak마냥 핸들도 leak의 대상이 될 수 있다
-> 따라서 CleoseHandle()로 닫아줘야 한다
반응형
'악성코드와 백신 > 악성코드 개발일지' 카테고리의 다른 글
| [악성코드 개발](7)[metasploit] (0) | 2026.03.09 |
|---|---|
| [악성코드 개발](6)[페이로드 저장] (0) | 2026.03.06 |
| [악성코드 개발](4)[DLL] (0) | 2026.02.27 |
| [악성코드 개발](3)[Windows API] (1) | 2026.02.26 |
| [악성코드 개발](2)[Windows 아키텍쳐] (0) | 2026.02.25 |