본문 바로가기

reversing/Windows Driver

(16)
IRP, I/O Stack 관련 내용 정리 디바이스를 관리하기 위한 드라이버들이 존재한다. 이 드라이버들이 디바이스를 컨트롤 하는데 참여한다는 의미로 드라이버 마다 디바이스 오브젝트를 생선한다.그리고 이 디바이스 오브젝트들이 순서를 가지고 쌓여서 디바이스 스택이 된다.그러면 이제 하드웨어나 드라이버 통신을 위해서 어떻게 구성되어 있는지 이해한대로 정리해보려 한다. 윈도우에서 드라이버나 하드웨어를 통신 할 때, I/O Manager 가 참여하게 된다. 그 이유는 시스템 상에서 드라이버를 파일로 취급하여서 파일 입출력을 통해서접근을 하는데, 파일 입출력은 I/O Manager[관리자]가 제공하기 때문이다.응용프로그램에서 드라이버에 접근하여, 하드웨어를 제어한다고 생각해 본다. [응용프로그램] — [파일 입출력 드라이버에 대한]-----> [I/O M..
Driver Object , Deivce Object 연관성 및 함수 정리 디바이스 스택과 디바이스 오브젝트, 디바이스 드라이버는 다음과 같은 연관성을 가진다. 위와 관련되어 있는 함수를 정리 123456789NTSTATUS IoCreateDevice( _In_ PDRIVER_OBJECT DriverObject,/ _In_ ULONG DeviceExtensionSize, _In_opt_ PUNICODE_STRING DeviceName, _In_ DEVICE_TYPE DeviceType, _In_ ULONG DeviceCharacteristics, _In_ BOOLEAN Exclusive, _Out_ PDEVICE_OBJECT *DeviceObject);Colored by Color Scriptercs PDRIVER_OBJECT : 호출자인 드라이버 오브젝트의 포인터 값 Devi..
[Device Stack] 디바이스 스택 디바이스 스택하나의 디바이스(하드웨어)를 관리하기 위해서는 디바이스를 관리하는 여러개의 드라이버가 필요하다. 그리고 각 드라이버들은 해당 디바이스의 관리를 위해서 각 디바이스에 자신의 디바이스 오브젝트를 생성한다.그리고 여러개의 드라이버가 하나의 디바이스를 위해서 생성한 디바이스 오브젝트가 스택처럼 이루어지는데 해당 내용이 디바이스 스택이다. 디바이스 스택 형성 과정 버스 드라이버 —> 특정 디바이스를 발견 [가상으로 발견된 것 처럼 해도 됨] 버스 드라이버는 발견한 디바이스의 디바이스 오브젝트를 생성 버스드라이버는 I/O Manager (PnP관리자)에게 보고 시스템 레지스트리 확인해서 설지 정보 확인—> 이 장치가 이전에 설치 되었는지, 아니면 관련된 정보가 있는지 확인함 기능 드라이버(Functio..
MDL(Memory Descriptor List) 보호되어 있는 글입니다.
DPC (Deferred Procedure Calls) ------https://docs.microsoft.com/en-us/windows-hardware/drivers/kernel/introduction-to-dpc-objects -------- Because ISRs must execute as quickly as possible, drivers must usually postpone the completion of servicing an interrupt until after the ISR returns. Therefore, the system provides support for deferred procedure calls(DPCs), which can be queued from ISRs and which are executed at a later t..
[PAE] Linear Address to Physical Address 32bit 환경에서 활성화된 page만 가져오는 부분을 진행하다가 PAGE를 찾아가는데 어려움이 있어서 정리하려 한다. 작업 환경 Win7 32bit [PAE on] Windbg 위와 같은 환경에서 calc.exe 선형 주소에서 물리 주소를 찾아가는 내용이다. 하루 종일 삽질을 한 결과를 낳게한 CR4 를 확인하지 않아서이다. 1. CR4 확인여기서 5번째와 4번째 Bit를 확인하여야 한다.5번째 PAE Bit는 PAE가 적용되어 있는지를 확인 할 수있는 BIT이다.4번째 PSE Bit는 PAGE SIZE EXTENSION이 적용되어 있는지 확인 하는 것이다. 1로 셋팅 되어 있으면 페이지 크기가 2MB 0로 셋팅되어 있으면 4KB이다. Binary로 b11111001로 표현되어 있다. 4번째 bit 5..
PAGED_CODE() 드라이버를 제작하면서 여기저기 코드를 찾다보면PAGED_CODE()위와 같은 함수들이 DriverEntry 시작부분에 등록되어 있다.뭐지 하면서 찾아보았다.#define PAGED_CODE() { if (KeGetCurrentIrql() > APC_LEVEL) {KdPrint(("EX: Pageable code called at IRQL %d\n", KeGetCurrentIrql()));PAGED_ASSERT(FALSE);}} 보통 메크로 함수로 사용된다고 한다.현재 IRQL을 확인하고 APC LEVEL보다 높으면 종료하는 코드이다.*IRQL[Interrupt Request Level] 인터럽트의 우선순위? Level이 현재 코드의 우선순위 보다 높으면 쫓겨나기 때문에? 인거 같다. 만약에 코드를 PAG..
DRIVER OBJECT 구조체 보호되어 있는 글입니다.