본문 바로가기

드라이버5

드라이버에서 파일 읽기 예제/ ZwOpenFile ,ZwReadFile 유저모드 프로그램에서 파일을 읽을 때에는 CreateFile API를 통해 파일을 열고 ReadFile함수 이용하여 파일을 읽습니다. 드라이버 개발을 할 때에도 간혹 파일 처리를 해야할 때가 있는데 이때 사용 가능한 커널모드 함수로는 Zw계열 함수인 ZwOpenFile, ZwReadFile입니다. 다음 코드는 ZwOpenFile, ZwReadFile 의 예시입니다. void FileRead() { NTSTATUS status = STATUS_SUCCESS; HANDLE hFile = NULL; IO_STATUS_BLOCK iostatus; OBJECT_ATTRIBUTES oa; LARGE_INTEGER byteOffset; UNICODE_STRING uFilename; unsigned char buf[1.. 2020. 11. 12.
Windows Defender 드라이버 분석 https://www.n4r1b.com/tags/wdfilter/ Wdfilter :: Up is Down and Black is White — n4r1b www.n4r1b.com 2020. 8. 13.
Windows 드라이버 커널모드에서 파일 해시 구하기 일반적으로 보안 프로그램에 쓰이는 디바이스드라이버들은 파일이벤트, 레지스트리, 프로세스이벤트 등을 탐지하여 자신이 가지고 있는 정책에 따라 차단을 하거나 로깅을 합니다. 특히 특정 파일이나 프로그램을 찾기위해서 파일 해시를 구하는 경우가 많습니다. 파일 해시를 구하기 위해서는 암호화 라이브라리 등을 사용하여 유저영역에서 구하는 경우가 일반적입니다. 하지만 이벤트를 유저모드 애플리케이션에 통지하고 해시를 구하고, 다시 차단하는 로직을 수행하면서 컨텍스트 스위칭이 잦아지는 문제점이 있습니다. 파일 해시를 커널모드에서 구해서 필터링이 가능할까? 이러한 의문점에 검색을 해보니 많은 내용이 검색되지는 않았지만 단서가 될만한 내용을 다음 사이트에서 찾을 수 있었습니다. http://www.rohitab.com/di.. 2020. 7. 23.
DeviceIoControl에서 Overlapped I/O 사용하기 DeviceIoControl에서 Overlapped I/O 사용하기 커널드라이버에서 발생한 빈번한 대량의 이벤트를 유저모드에서 하나하나 모니터링 하기위해서 이벤트를 이용하여 동기화, polling으로 이벤트를 계속 수신하거나 하는 방법 등 다양한 방법이 쓰일 수 있다. 문제의 시나리오 비교적 간단한 polling으로 이벤트를 계속 수신한다고 생각해보자. 커널드라이버에서는 발생한 이벤트를 큐에 큐잉하고 유저모드 애플리케이션에서는 IOCTL을 발생시켜 큐의 내용을 꺼내온다. 이런식의 로직에서 유저모드 애플리케이션은 While과 같은 반복문을 수행하며 DeviceIoControl를 호출하여 드라이버와 계속 통신할 것이다. while(true) { BOOL ret = DeviceIoControl(hDevice,.. 2020. 2. 18.
장치 드라이버와 커널 오브젝트 (Device Driver & Kernel Object) Kernel Object(커널 오브젝트) Windows OS가 구동되는데 많은 요소들이 존재한다. 프로세스가 실행되고, 레지스트리의 값을 읽고, 쓰고, 쓰레드가 생성되고, 파일에 접근한다. 이 모든 리소스들은 Kernel에서는 Kernel Object로 관리된다. Windows의 Kernel Object는 크게 25가지 이상의 유형으로 나뉜다. https://docs.microsoft.com/ko-kr/windows-hardware/drivers/kernel/windows-kernel-mode-object-manager Kernel Object Manager Windows NT Kernel 내부에는 Kernel Object를 관리하는 역할을 하는 것이 있는데 이것을 Kernel Object Manager.. 2019. 12. 30.