.
물론, Windows 사용자 인 경우 IOCTL 인터페이스가 있습니다.
그런 다음 모든 가상 장치는 게스트 OS와 호스트 OS의 일부 코드로 어떤 식 으로든 에뮬레이트됩니다. 따라서 입력 장치 (키보드 및 마우스), 비디오 장치, 스토리지 (디스크), 네트워크 카드, 통신 포트 (직렬, 병렬), 표준 PC 장치 (PIC, PIT, RTC, DMA), CPU APIC 등에 액세스하는 것도 가능합니다. 가상화 코드를 연습하십시오.
Windows에서 VMBUS를 통해 작동하는 합성 장치에 대해 언급하지 않는 한 다양한 PC 장치의 가상화는 장치 메모리 맵핑에 액세스하는 명령을 인터셉트, 구문 분석 및 에뮬레이션/실행함으로써 수행됩니다 버퍼 및 레지스터 및 I/O 포트가 있습니다. 이것은 파운드화할 또 다른 "인터페이스"를 제공합니다.
장치 관련 버그뿐만 아니라 명령 관련 버그도 발견 할 수 있습니다. 후자에 관심이 있다면 x86 CPU가 다양한 모드 (실제, 가상 8086, 보호, 64 비트)에서 명령어 수준에서 어떻게 작동하는지, 인터럽트 및 예외를 처리하는 방법 및 또한 PC 장치에 액세스하는 방법 (메모리 주소 및 I/O 포트 번호)과 방법을 알아야합니다.
Btw, Windows에서 커널에서 코드가 실행되고 있지 않으면 Windows에서 직접 이러한 작업에 액세스 할 수 없습니다. Windows의 과도한 보호 기능을 피하기 위해 비 Windows 게스트 VM을 설치하고자 할 수 있습니다. 엣지 케이스, 비정상적인 명령어 인코딩 (잘못된 인코딩 포함) 또는 일반적인 작업 (예 : FPU/MMX/SSE/etc 또는 특수 보호 모드 명령어 (SIDT와 같은)을 사용하여 장치에 액세스)에 대한 비정상적인 지침을 찾습니다. 생각하고 장난 꾸러기.
또 다른 고려해야 할 사항은 경쟁 조건과 계산 또는 I/O 부하입니다. 당신은 그 방향으로 탐구하는 행운을 가질 수도 있습니다.
멋진 덕분에 이런 일을하기 위해 이미 유용한 도구가 있습니까? 나는 ioctlfuzzer를 보았습니다. 그러나 그것에 관한 것입니다. – rhinox80
나는 어떤 것도 모르고있다. –
그러면 ioctlfuzzer가 시작하기에 좋은 곳이겠습니까? Windows 장치에서 IOCTL을 무작위로 퍼지한다고합니다. – rhinox80