제 질문은 Windows 7 용 드라이버 개발에 관한 것입니다.Windows 7 드라이버 후킹
드라이버에 대한 시스템 호출을 가로 챌 필요가 있습니다. 이론적으로 이러한 경우 필터 드라이버를 만드는 것이 좋지만 필자의 경우 드라이버는 필터 호환 인터페이스를 노출하지 않습니다. 정확하게 Vista/7 디스플레이 미니 포트 드라이버입니다.
디스플레이 드라이버가 표준 WDM 드라이버로로드됩니다. 자사의 DriverEntry
에서는 DxgkInitialize
시스템 루틴 (win32k.sys에 의해 수출 됨)을 호출 할 것으로 예상됩니다. 내 목표는이 전화를 가로 채는 것입니다.
아무에게도 유용한 소스를 제안 할 수 있습니까?이를 수행하는 방법에 대한 정보를 찾을 수 있습니까?
승리의 열쇠는 드라이버 실행 가능 가져 오기 섹션 내의 DxgkInitialize
을 내 기능의 주소로 대체하는 것일 수 있습니다. 문제는 이후에 을 실행해야하며 (필요한 경우 매핑 된 + 재배치 됨 + 모든 가져 오기 테이블 항목이 준비 됨), 전에 전에 드라이버의 진입 점이 호출되어야합니다.
나는 다음과 같은 옵션에 대해 생각 :
- 가 (즉 로더의 일을) 시스템 메모리에 실행 파일을지도하고 수동으로 "준비". 그런 다음 필요한 기능을 패치하고 진입 점을 실행하십시오. 어떤 노력
ZwSetSystemInformation
와 - 는
- 어쩌면
DxgkInitialize
수출 모듈의 수출 부분을 패치 모듈 로딩 (?) 사용할 수 있습니다. 로더가로드 된 모든 모듈을 자동으로 내 손으로 리디렉션합니다.
미리 감사드립니다.
모든 것을 완벽하게 수행하더라도 64 비트 시스템에서는 블루 스크린이 발생합니다. Windows Vista 및 7은 특히로드 된 후에 수정 된 코드를 찾습니다. 보다 안전한 대체 방법은 디스크의 드라이버 가져 오기 테이블을 바꾸고 가져온 모듈 이름을 변경하는 것이지만 64 비트 Windows는 유효한 서명이없는 드라이버를로드하지 않으며 유효하지 않습니다 가져 오기 테이블을 편집하는 경우 –
@Ben Voigt : 고마워요, 당신의 요지를 봅니다. 그러나 "코드 수정 감지"가 정확히 어떻게 작동하는지 궁금합니다. 실행 파일이로드되면 ** 로더에 의해 ** 변경됩니다. 특히 가져 오기 섹션. 다시 한 번 변경 한 다음, 즉시 원래 상태로 복원하면 (드라이버가 해당 기능을 호출 한 후) – valdo
@Ben Voigt : 또한 원하는대로 달성 할 수있는 합법적 인 방법이 있는지 알고 계십니까? "표시"활동. 즉, 화면에 무언가가 표시 될 때를 알고 싶습니다. 최소한 - 어디에서. 멋지네요 - 정확하게 (명령 시퀀스 그리기). 고마워. – valdo