Windows
7 posts
윈도우 힙 관리자

Window Heap Management 메모리 할당 방식이 상위일경우 더 높은 수준의 구현을 사용한다. Kernel-Mode Memory Manager 운영 체제에 대한 모든 메모리 예약 및 할당 메모리 매핑 파일 공유 메모리 쓰기 작업 복사 사용자 모드에서 직접 접근 불가 VirtualAlloc/VirtualFree User Mode 에서 사용할 수 있는 가장 낮은 수준의 API 를 호출하고 해당 기능을 바탕으로 빠른 SYSCALL을 으로 호출하여 추가 처리를 커널 메모리 관리자에 다시 할당한다. 두 가지 주요 조건 경계에 정렬된 메모리 블록만 할당할 수 있다. 의 배수인 크기의 메모리 블록만 할당할 수 있다. 시스템 세분화 에 호출시 해당 정보를 받을 수 있는데 매개 변수로 반환된다. 해당 값의 구현(및 하드웨어)에 따라 달라지지만 64bit Window System에서는 0x10000 바이트 또는 64kb로 설정된다. 즉, 시스템 세분화는 다음과 같이 8바이트 …

March 30, 2021
Windows
PEB (Process Environment Block)

window NT 데이터 구조체 이며 프로세스 정보를 담고 있는 구조체 PEB 접근 방법 TEB.ProcessEnvironmentBlock 멤버가 PEB 구조체의 주소 TEB 구조체는 FS 세그먼트 셀렉터가 가리키는 세그먼트 메모리의 base address에 위치한다. 그리고 ProcessEnvironmentBlock 멤버는 TEB 구조체 시작 부터 30 옵셋만큼 떨어져 있다. method 1 바로 PEB 주소를 구하는 방법 method 2 TEB 주소를 구한후 ProcessEnvironmentBlock 멤버를 이용 FS:[0x30] 주소 값을 확인할 수 있다. PEB 구조체 정의 PEB.BeingDebugged Kernel32!IsDebuggerPresent() API 현재 프로세스가 디버깅을 당하는지를 판단해서 결과를 반환한다. API가 참조하는 정보가 바로 PEB.BeingDebugged 멤버이다. (디버깅 중이면1, 아니면 0을 반환) PEB.ImageBaseAddress…

January 03, 2021
Windows
Windows SEH (Structured Exception Handler) 1

SEH 는 각 Thread와 관련된 구성된다. 원칙적으로 해당 목록의 노드는 stack에 할당된다. 목록의 Head는 TEB(Thred Environment Block)의 시작 부분에 있는 포인터로 가리키므로 코드가 새 예외처리기를 추가하려는 경우 새 노드가 목록의 헤드와 포인터에 추가된다. TEB에서 새 노드를 가리키도록 변경된다. 각 노드는 유형이며 핸들러의 주소와 목록의 다음 노드에 대한 포인터를 저장한다. 이상하게도 목록의 마지막 노드의 “next pointer” 는 NULL이 아니지만 와 같다. TEB는 FS:[0] 부터 시작하는 FS를 통해서도 액세스 할 수 있으므로 다음과 같은 코드르 보는 것이 일반적이다. 컴파일러는 일반적으로 프로그램의 어느 영역이 실행되고 있는지 (전역 변수에 의존) 알고 호출될 될 때 그에 따라 동작하는 단일 전역 처리기를 등록한다. 각 스레드에는 다른 가 있으므로 운영 체제는 에 의해 선택된 세그먼트가 항상 올바른 TEB(즉, 현재…

January 03, 2021
Windows
Windows SEH (Structured Exception Handler) 0

SEH (Structured Exception Handler) SEH Windows 운영체제에서 제공하는 예외처리 시스템이다. 키워드로 간단히 구현할 수 있다. 하드웨어 오류와 같은 특정 예외 코드 상황을 정상적으로 처리하기 위해 C에 대한 Microsoft 확장이다. SEH를 사용하면 실행이 예기치 않게 종료 되는 경우 메모리 블록 및 파일과 같은 리소스가 올바르게 해제 되도록 할 수 있다. SEH 매커니즘 예외 처리기 , 예외에 응답 하거나 해제할 수 있는 블록 Termination Handlers 예외가 종료를 발생 시키는 지 여부에 관계 없이 항상 호출되는 종료 처리기 또는 블록 일반 실행의 경우 예외 처리 방법 OS는 프로세스 실행 중에 예외가 발생하면 프로세스에게 처리를 맡긴다. 프로세스 코드에 (SEH…) 예외처 리가 구현되어 있다면, 해당 예외를 잘 처리한 후 게속 실행될 것이다. 구현되어 있지 않다면 기본 예외 처리기를 동작시켜 프로세스를 종료 시킨다. 디버깅…

January 03, 2021
Windows
TEB (Thread Environment Block)

TEB (Thread Environment Block) 프로세스에서 실행되는 스레드에 대한 정보를 담고 있는 구조체 스레드별로 TEB 구조체가 하나씩 할당된다. OS 종류별로 해당 모양이 조금씩 달라진다. ProcessEnvironmentBlock member 0x30 offset 에 위치한 ProcessEnvironmentBlock member PEB(Process Environment Block) 구조체의 포인터이다. PEB는 프로세스 별로 하나만 생성된다. NtTib member TEB 구조체의 첫 번째 멤버는 구조체이다. _NT_TIB (_NT_Thread information Block) 현재 실행 중인 스레드에 대한 정보를 저장하고 있다. ExceptionList member는 _EXCEPTION_REGISTRATION_RECORD 구조체 연결 리스트를 가리키고 있다. 이것은 SEH(Structured Exception Handler) 라고 하는 Window OS의 예…

January 03, 2021
Windows
TLS(Thread Local Storage CallBack)

Thread Local Storage (TLS) 프로세스의 모든 스레드는 가상 주소 공간을 공유한다. 함수의 지역 변수는 함수를 실행하는 각 스레드에 공유한다. 정적 및 전역 변수는 프로세스의 모든 스레드에서 공유된다. 즉, 스레드 별로 독립된 데이터 저장 공간이며 스레드 내에서 프로세스의 전역(Global) 데이터나 정적(static) 데이터를 마치 지역(Local) 데이터 처럼 독립적으로 취급하고 싶을 때 사용한다. IMAGE_DATA_DIRECTORY[9] PE 헤더의 TLS Table 항목이 세팅된다. IMAGE_NT_HEADERS - IMAGE_OPTIONAL_HEADER - IMAGE_DATA_DIRECTORY[9] {: width=“65%” height=“65%“} RVA 01AAF3A0 주소에는 IMAGE_TLS_DIRECTORY 구조체가 있다. IMAGE_TLS_DIRECTORY IMAGE_TLS_DIRECTORY 구조체는 x86/x64 bit로 설계되어 있다. …

January 03, 2021
Windows
Windows PE

윈도우 실행 파일 구조 PE 파일 (Portable Excutable) 다양한 정보를 포함한 커다란 구조체들로 이루어져 있다. 수만은 테이블과 멤버들을 포함하고 있다. PE 파일의 종류 종류 설명 EXE 실행파일 SCR 실행파일 (화면 보호기) DLL 라이브러리 OCX 라이브러리 (ActivieX) SYS 시스템 드라이버 OBJ 오브젝트 파일 SCR 파일이 실행 파일임을 인지 하지 못한채 악성 코드로 동작하게 되어 피해가 발생한 경우가 다수 첫 바이트 부터 시작된다. PE 파일은 파일에 존재할 때의 구조와 메모리에 로드된 후의 모습이 달라진다. 파일에서는 첫 바이트부터의 거리를 offset을 사용한다. 메모리에서는 VA(Virtual Address), RVA(Relative Virtual Address, 상대적 가상 주소) 고정 주소 대신 상대 주소를 사용하는 이유는 해당 PE 파일이 메모리에 로드 될 때 한 주소에 고정적으로 로딩되는 것이 아니기 떄문이다. 메모리에 로드된 후에 …

June 02, 2020
Windows
Theory