2011-04-11 8 views
2

제 질문은 Windows 7 용 드라이버 개발에 관한 것입니다.Windows 7 드라이버 후킹

드라이버에 대한 시스템 호출을 가로 챌 필요가 있습니다. 이론적으로 이러한 경우 필터 드라이버를 만드는 것이 좋지만 필자의 경우 드라이버는 필터 호환 인터페이스를 노출하지 않습니다. 정확하게 Vista/7 디스플레이 미니 포트 드라이버입니다.

디스플레이 드라이버가 표준 WDM 드라이버로로드됩니다. 자사의 DriverEntry에서는 DxgkInitialize 시스템 루틴 (win32k.sys에 의해 수출 됨)을 호출 할 것으로 예상됩니다. 내 목표는이 전화를 가로 채는 것입니다.

아무에게도 유용한 소스를 제안 할 수 있습니까?이를 수행하는 방법에 대한 정보를 찾을 수 있습니까?

승리의 열쇠는 드라이버 실행 가능 가져 오기 섹션 내의 DxgkInitialize을 내 기능의 주소로 대체하는 것일 수 있습니다. 문제는 이후에 을 실행해야하며 (필요한 경우 매핑 된 + 재배치 됨 + 모든 가져 오기 테이블 항목이 준비 됨), 전에 전에 드라이버의 진입 점이 호출되어야합니다.

나는 다음과 같은 옵션에 대해 생각 :

  • 가 (즉 로더의 일을) 시스템 메모리에 실행 파일을지도하고 수동으로 "준비". 그런 다음 필요한 기능을 패치하고 진입 점을 실행하십시오. 어떤 노력 ZwSetSystemInformation
  • 어쩌면 DxgkInitialize 수출 모듈의 수출 부분을 패치 모듈 로딩 (?) 사용할 수 있습니다. 로더가로드 된 모든 모듈을 자동으로 내 손으로 리디렉션합니다.

미리 감사드립니다.

+1

모든 것을 완벽하게 수행하더라도 64 비트 시스템에서는 블루 스크린이 발생합니다. Windows Vista 및 7은 특히로드 된 후에 수정 된 코드를 찾습니다. 보다 안전한 대체 방법은 디스크의 드라이버 가져 오기 테이블을 바꾸고 가져온 모듈 이름을 변경하는 것이지만 64 비트 Windows는 유효한 서명이없는 드라이버를로드하지 않으며 유효하지 않습니다 가져 오기 테이블을 편집하는 경우 –

+0

@Ben Voigt : 고마워요, 당신의 요지를 봅니다. 그러나 "코드 수정 감지"가 정확히 어떻게 작동하는지 궁금합니다. 실행 파일이로드되면 ** 로더에 의해 ** 변경됩니다. 특히 가져 오기 섹션. 다시 한 번 변경 한 다음, 즉시 원래 상태로 복원하면 (드라이버가 해당 기능을 호출 한 후) – valdo

+0

@Ben Voigt : 또한 원하는대로 달성 할 수있는 합법적 인 방법이 있는지 알고 계십니까? "표시"활동. 즉, 화면에 무언가가 표시 될 때를 알고 싶습니다. 최소한 - 어디에서. 멋지네요 - 정확하게 (명령 시퀀스 그리기). 고마워. – valdo

답변

0

당신은 사업상의 이유를 제공하지 않으므로 나는 가혹한 것을 말하기를 주저합니다. 그러나 전화 걸기와 관련된 경우 기술 접근 ​​방식을 재고해야합니다. 내가 걸릴 것

단계는 아마도 포함됩니다 :

  1. 누가 DxgkInitialize 수출? win32k를 추측하지 마십시오. (나는 대답을주지 않을 것이다). 어쩌면 발신자가 아닌 수신자를 쉽게 연결할 수 있습니다.

  2. 드라이버 모듈을로드했지만 시작하기 전에 콜백이 있습니까? 조회 PsSetLoadImageNotifyRoutine. 아마도 IAT 드라이버를 패치하기 위해 적절한 타임 슬롯을 제공 할 것입니다 (Import Address 테이블이 무엇인지 모르는 경우, 후킹을 재고하십시오).

주로 "디스플레이 활동에 대한 감시"에 관심이있는 것으로 보았습니다. 그게 당신이 완전히 통제하지 못하는 컴퓨터에 정확하게 허용되는지 모르겠습니다. 그러나 이것이 합법적이라는 질문에 대한 가정을 할 수 있습니다.

원하는 해상도에 따라 드라이버가 필요하지 않습니다. 빌어 먹을, 당신은 거의 DLL이 필요합니다. 부분 솔루션 및 내게 필요한 옵션 콜백은 Window hooks입니다.