Thread Environment Block
Thread Environment Block TEB는 스레드에 대한 정보를 포함하고 있는 구조체입니다. 프로세스 가상 메모리 영역에 존재하며, NtCurrentTEB 함수를 통해 획득할 수 있습니다. 함수 내부에서는 Segment Register를 통해 TEB 주소를 획득합니다. // x86 architecture ntdll!NtdllNtCurren...
Thread Environment Block TEB는 스레드에 대한 정보를 포함하고 있는 구조체입니다. 프로세스 가상 메모리 영역에 존재하며, NtCurrentTEB 함수를 통해 획득할 수 있습니다. 함수 내부에서는 Segment Register를 통해 TEB 주소를 획득합니다. // x86 architecture ntdll!NtdllNtCurren...
Process Environment Block PEB는 프로세스에 대한 정보를 포함하고 있는 구조체입니다. 프로세스 가상 메모리 영역에 존재하며, 다음과 같이 EPROCESS를 통해 PEB 주소 확인이 가능합니다. 19: kd> dt_eprocess nt!_EPROCESS +0x550 Peb : Ptr64 _PEB ...
RamMap 물리 메모리 영역에 대한 정보는 SysInternals RAMMap를 통해 확인할 수 있습니다. 현재 제 테스트 PC에서 사용 중인 물리 메모리 영역 정보는 다음과 같습니다. Start End Size 0x1000 0x9F000 ...
STATUS_SINGLE_STEP 최근 진행했던 과제에서 디버깅 시 프로세스가 종료되는 Anti-Debugging 기법을 확인하였습니다. 당시에 Debug Register를 통해 디버깅을 시도하였습니다. DebugAcitveProcess를 통해 Debug Object 또한 정상적으로 생성되는 부분을 확인하였고, 디버깅 과정에서 문제될 요소가 없었습니...
MDL (Memory Descriptor List) 가상 메모리 주소는 항상 연속적인 반면, 물리 메모리 주소는 연속성이 보장되지 않습니다. MDL은 이러한 불연속적인 물리 메모리 주소를 추적하는데 사용됩니다. 아래는 MSDN에서 설명하는 MDL에 대한 내용입니다. An I/O buffer that spans a range of contiguou...
Virtual Address Descriptor Virtual Address Descriptor (VAD)는 프로세스의 가상 주소를 관리하는 데이터 구조입니다. VAD는 AVL 트리(_RTL_AVL_TREE) 구조로 이루어져 있으며, 가상 주소 범위 및 페이지 보호 속성 등을 포함하고 있습니다. AVL Tree Adelson-Velsky and...
pte-protect 해당 글에서는 PTE 조작을 통해 PAGE_EXECUTE 권한이 없는 코드를 실행하고, 유저 레벨에서 메모리를 숨기는 anti-cheat bypass 기술을 리뷰합니다. PTE의 nx 비트를 변경 시, 아래 사진과 같이 PAGE_EXECUTE 권한이 존재하지 않더라도 코드 실행이 가능합니다. VAD에는 변경 전 정보가 남아 있기...
Hyper-V Hyper-V는 Windows 10 이상부터 OS에서 지원하는 가상 머신입니다. 가상화 타입1(Bare-Metal)에 해당하기 때문에 높은 성능, 빠른 속도를 자랑합니다. 다음과 같이 [Windows 기능 켜기/끄기]를 통해 Hyper-V를 활성화하여 사용합니다. Create a virtual machine in Hyper-V Hy...
Intel 4-level paging 해당 글에서는 Intel x86-64 프로세서에서 가상 주소가 물리 주소로 변환되는 상세과정을 리뷰합니다. 가상 메모리는 다음과 같이 4단계를 거쳐서 물리 메모리 주소로 변환되며, 이러한 과정을 Intel 4-level paging이라고 표현합니다. DirBase (DirectoryTableBase) 가장 ...
Converting Virtual Addresses to Physical Addresses 해당 글에서는 Windbg를 통해 가상 메모리 주소를 물리 메모리 주소로 변환하는 방법을 리뷰합니다. 물리 메모리를 확인하기 위해서는 전체 메모리 덤프 파일이 필요합니다. 다음과 같은 시스템 설정을 통해 전체 메모리를 덤프합니다. Virtual addres...