본문 바로가기

language/Driver

드라이버 MajorFunction ☞ DeviceObject - 드라이버가 가장 최근에 생성한 DeviceObject를 가르키는 포인터 ☞ DeviceExtension - 하위 레벨 드라이버에서 하드웨어 장치와 주변 장치들을 관리하기위한 PnP 지원 필드 ☞ DriverStart - 드라이버가 메모리에 보관된 시작 위치 ☞ DriverName - 드라이버의 서비스 이름 ☞ HardwareDatabase - 드라이버가 등록되어 있는 서비스 키 ☞ DriverInit - DriverEntry 함수 주소 ☞ MajorFunction - 드라이버가 처리하는 IRP 명령어를 위한 Dispatch Routine들 출처 : http://hasu0707.tistory.com/211 더보기
레퍼런스 카운트와 USB 플러그 앤 플레이 윈도우(XP 이상)에서 USB 키보드(USB Composite 장치)를 꽂으면 기본적으로 usbccgp.sys가 로드 됩니다. 마찬가지로 USB 메모리를 꽂으면 usbstor.sys가 로드 됩니다. 각 USB 장치를 빼면 해당 드라이버는 언로드 됩니다. (단 같은 종류의 USB 장치가 여러개 꽂혀 있을 때 모든 장치가 빠져야 해당 드라이버가 언로드 됩니다.) 여기서 중요한 것은 ObReferenceObjectByName과 같은 함수를 이용하여 \\Driver\usbccgp나 \\Driver\usbstor를 참조 했을 때 입니다. usbccgp.sys나 usbstor.sys와 같이 장치의 장착 여부에 따라 로드, 언로드 되는 드라이버는 ObReferenceObjectByName로 드라이버 오브젝트를 참조 .. 더보기
NT api? PVOID p = ExAllocatePoolWithTag ( type, //NonPagedPool or PagedPool nbytes, // 할당 받을 메모리 블록의 크기 MEM_TAG ); 더보기
DriverEntry - 드라이버 시작점 부터 디버깅 하기 출처 : http://bananamilk-textcube.blogspot.kr/2010/03/ssdt-hooking-%ED%94%84%EB%A1%9C%EC%84%B8%EC%8A%A4-%EC%9D%80%EB%8B%89.html 프로세스 은닉을 커널모드에서 구현하기 위해 SSDT(System Service Dispatch Table) Hook을 이용해 보겠습니다. 프로세스 정보와 관련된 시스템 함수는 ntdll.dll의ZwQuerySystemInformation() 입니다. 먼저 유저레벨 ZwQuerySystemInformation() 부터 커널레벨 진입점 sysenter 를 지나서 SDT를 참조하는 KiFastCallEntry 까지 따라가 봅니다.0:001> u ntdll!ZwQuerySystemInfor.. 더보기
DriverEntry - 드라이버 시작점 부터 디버깅 하기 출처 : http://bananamilk-textcube.blogspot.kr/2010/03/driverentry-%EB%93%9C%EB%9D%BC%EC%9D%B4%EB%B2%84-%EC%8B%9C%EC%9E%91%EC%A0%90-%EB%B6%80%ED%84%B0-%EB%94%94%EB%B2%84%EA%B9%85-%ED%95%98%EA%B8%B0.html 드라이버(.sys)파일의 시작점(Entry-Point)부터 디버깅 하는 방법 입니다. 커널 디버깅 환경이 준비 되어야 하며 분석대상 드라이버 PDB 파일의 유무에 따라 분석 방법이 조금 달라 집니다. 먼저 디버기 시스템(Virtual PC 2007)에서 드라이버를 등록(Register Service)하고 나서 디버거(WinDBG)에 입력되는 명령어는 아.. 더보기