2008-09-02 2 views
7

Windows의 MBR을 수정해야하며 Windows에서이 작업을 수행하고 싶습니다.Windows의 MBR 수정

내 질문 사항은 다음과 같습니다. CreateFile을 호출하여 물리적 장치에서 핸들을 얻을 수 있다는 것을 알고 있습니다. MBR은 항상 \\. \ PHYSICALDRIVE0에 있습니까? 또한 디스크에서 직접 읽을 수있는 Windows API를 배우고 있습니다. readabsolutesectors와 writeabsolutesectdors는 MBR이 포함 된 디스크 섹터를 읽고 쓰는 데 사용해야 할 두 가지 기능입니까?

내가 직접 배운 것에서 편집하십시오. MBR이 항상 \\. \ PHYSICALDRIVE0에있는 것은 아닙니다. 또한 MBR이 포함 된 드라이브의 장치 이름으로 CreateFile을 호출하여 부트 섹터에 적어도 XP의 관리자로 쓸 수 있습니다. 또한 WriteFile을 호출하고 CreateFile을 호출하여 생성 된 장치의 핸들을 전달하여이 드라이브에 쓸 수 있습니다.

조엘 Coehoorn 주소를 편집하십시오. BIOS에서 POST 후 하드웨어 레지스터를 수정해야하는 프로젝트에서 작업 중이므로 Windows를 부팅 할 수 있기 전에 MBR을 편집해야합니다. 우리의 계획은 Windows 부팅 전에 코드를 실행하도록 부트 로더를 수정하여 이러한 변경을 수행하는 것입니다.

Cd-MaN 용 편집. 정보를 제공해 주셔서 감사합니다. 당신의 대답에는 아무 것도 없지만, 나는 몰랐습니다. 당신의 대답은 제 질문에 대답하지 않습니다. 레지스트리는 특히 여러 가지 이유로 우리가 필요로하는 것을 절대 수행하지 않을 것입니다. Windows가 우리 제품으로 실행될 여러 소프트웨어 계층 중에서 가장 높은 계층이라는 큰 이유가 있습니다. 이러한 변경 사항은 하위 수준이 실행되기 전에도 발생해야하므로 레지스트리가 작동하지 않습니다.

P. Cd-MaN. 나는 그것을 이해함에 따라 귀하가 제공 한 정보가 정확하지 않습니다. 비스타의 경우, 섹터가 부트 섹터 인 경우 볼륨에 쓸 수 있다고 생각합니다. http://support.microsoft.com/kb/942448

답변

4

부트 로더를 수정하는 것은 나쁘고 나쁜 생각입니다. 다음은 가능한 잡았다의의 몇 가지 있습니다 :

  • 잠재적
  • 잠재적 AV 제품 (무섭게 사용자)
  • 을 여행합니다 전체 디스크 암호화 제품 (등의 TrueCrypt, PGP, 비스타의 BitLocker를) 죽일 것이다
  • 잠재적으로
  • 직접 디스크 액세스 인 TPM 모듈을 사용할 때 (그것이 실행 전에 변경 내용 MBR를 확인하기 때문에)
  • 이 신뢰의 체인을 죽 (등 체인 부트 로더) 복잡한 부팅 시나리오를 죽일 Vista에서 시작하는 것은 허용되지 않습니다 (드라이버 만 사용).

대체 방법 (부팅시 또는 Windows 부팅 후로드하도록 설정된 드라이버를 통해 Windows 부팅 중에 하드웨어 레지스터를 수정하는 것과 같은)을 실제로 고려해야합니다. 수정 즉, 포트에 쓰기로 간단 경우

다음
OUT AX, BL 

드라이버가이 작업을 수행 할 수있는 윈도우의 모든 버전의 존재 (읽기/특정 포트에 /에서 값을 쓰기)라고 할 수있는 사용자 모드에서.

+0

각 부트 섹터 코드 프로그래머는 가능한 문제점 목록을 알아야합니다. 감사! –

+1

그리고이 문제가 9x의'fdisk/mbr'과 XP의'fixmbr'을 이기기 위해 적용된다고 말할 수 있겠습니까? 극소수만이 풀 디스크 암호화를가집니다. MBR이 손상되면 AV를 트립하는 것이 중요하지 않습니다. 대부분의 사람들은 복잡한 부팅 시나리오를 가지고 있지 않습니다. 만약 그들이 MBR을 수정해야한다면 fdisk/mbr이나 fixmbr은 그들이 가진 것보다 더 큰 혼란을 일으키지 않을 것이라고 확신합니다. – barlop

5

일단 OS가 시작되면 MBR은 일반적으로 바이러스 때문에 보호됩니다. 이것은 책에서 가장 오래된 바이러스 트릭 중 하나입니다. 플로피에서 바이러스로 플로피로 넘어갑니다.

제한되지는 않았지만 파일 시스템의 일부가 아니지만 하드 드라이브의 특정 위치에있는 저수준 코드를 작성해야합니다.

이로 인해, 당신은 꽤 많이 낮은 수준 (대부분의 프로그램은 어셈블리에서 이것을 구현합니다) 또는 16 비트 DOS를 목표로하는 C 코드를 작성하는 것으로 제한됩니다.

대부분이 프로그램은 BIOS interface (13h, 나는 믿습니다)을 사용하여 디스크 섹터에 직접 액세스합니다. 인라인 어셈블리 나 컴파일러가 제공하는 인터페이스를 사용하여 C에서 액세스 할 수 있습니다. OS의 협력없이 BIOS에 일반적으로 액세스 할 수 없으므로 프로그램이 다시 DOS로 제한됩니다. 액세스 할 수 있다면 거의 자유 롭습니다. BIOS에 대한 좋은 점은 시스템에 어떤 유형의 HD가 있는지 걱정할 필요가 없다는 것입니다. RAID 카드조차도 BIOS 루틴에 삽입되어 액세스 할 수 있습니다. 메모리에 ATA 또는 SATA 컨트롤러가 어디에 있는지 알지 못하고 저수준에서 명령을 실행합니다.

OS에서 절대적으로 액세스해야하는 경우 BIOS 또는 HD 컨트롤러가있는 메모리 공간에 액세스하기 위해 장치 드라이버를 작성해야합니다. 그러나 현대 컴퓨터는 HD 컨트롤러를 다른 IRQ로 메모리에 저장하고 각 칩셋은 최소한의 인터페이스를 제공 할 수 있기 때문에 조금 더 난해하게되었습니다. 부팅을위한 BIOS, Windows 용 특정 드라이버 등이 있습니다. 그들은 호환이 더 비싸기 때문에 다른 컨트롤러와 호환 될 것으로 생각되는 다른 모든 인터페이스를 무시합니다.

Windows의 드라이버 수준에서는 직접 드라이브 섹터에 액세스하는 방법 (또는 의사가 직접적으로)을 사용할 수 있지만 앞서 언급 한 바이러스 문제로 인해 매우 잘 보호 될 수 있습니다.

행운을 빈다.

2

아마도 PXE 부팅 시나리오가 도움이 될 수 있습니까? 단순히 수정해야하는 하드웨어 레지스터를 수정 한 제작 된 PXE 이미지로 부팅 한 다음 마스터 부트 레코드 또는 활성 파티션의 부트 레코드로 제어를 반환하십시오.

이렇게하면 부팅 레코드를 수정할 필요가 없습니다.