Palm84 某所の日記

死のうは一定、しのびクマには何しよぞ...

ms-sysコマンドとfdisk

【10/13追記】

ちょっとめも。意味わかってないけど...VMwareでやったので実機とは違うかも。

Knoppix、SystemRescueCd、BG-Rescue Linux、INSERT などのLiveCDにも入ってます。

ブートストラップの比較とNTシグネチャ関連とか。MBRのoffset 0x01B5から0x01BD(パーティションテーブルの直前9バイト)をdump(リトルエンディアンで)。

ms-sys

-m, --mbr Write a Windows 2000/XP/2003 MBR to device

ブートストラップはWindows XPと全く同じ。379バイト。NTシグネチャはさわらない?offset 0x01B5から2C 44 63となる?

  • 実行前
00 00 00 59 49 0C 00 00 00
  • 実行後
2C 44 63 59 49 0C 00 00 00
  • 実行前 (zero)
00 00 00 00 00 00 00 00 00
  • 実行後
2C 44 63 00 00 00 00 00 00
  • 実行前 (urandom)
F4 FE 62 14 49 F2 2C CB 63
  • 実行後
2C 44 63 14 49 F2 2C CB 63
  • ブートスラップがoffset 0x017Aまで?(379バイト?)
  • offset 0x017Bから0x014Bまで00
  • offset 0x014Coffset 0x01B5から2C 44 63で上書き
  • あと6バイトそのまま
  • 440バイト上書き
-9, --mbr95b Write a Windows 95B/98/98SE/ME MBR to device

ブートスラップは98SEのfdisk /mbrとほぼ同じ。offset 0x00DAから0x00DFが98fdiskと若干違うことがあった。98では00だがこっちはたまに4F 74 4E 32 E4 8A

offset 0x015Dまでとすると350バイト。0x0189までだと394バイト?NTシグネチャはそのまま。offset 0x01B5 - 0x01B7が00に。

  • 実行前
2C 44 63 59 49 0C 00 00 00
  • 実行後
00 00 00 59 49 0C 00 00 00
  • 実行前 (zero)
00 00 00 00 00 00 00 00 00
  • 実行後
00 00 00 00 00 00 00 00 00
  • 実行前 (urandom)
F4 FE 62 14 49 F2 2C CB 63
  • 実行後
00 00 00 14 49 F2 2C CB 63
  • ブートスラップがoffset 0x015Dまで?(350バイト?)
  • offset 0x0183 - 0x0189が8B FC 1E 57 8B F5 CB
  • offset 0x01B8から0x01BDそのまま
  • 他00
  • 440バイト上書き
-s, --mbrsyslinux Write a public domain syslinux MBR to device

ブートストラップは300バイト?変化なしかな?

  • 実行前
2C 44 63 59 49 0C 00 00 00
  • 実行後
2C 44 63 59 49 0C 00 00 00
  • 実行前 (zero)
00 00 00 00 00 00 00 00 00
  • 実行後
00 00 00 00 00 00 00 00 00
  • 実行前 (urandom)
F4 FE 62 14 49 F2 2C CB 63
  • 実行後
F4 FE 62 14 49 F2 2C CB 63
  • offset 0x012Bまで上書き(300バイト?)
  • あとはそのまま
-z, --mbrzero Write an empty (zeroed) MBR to device

MBRの先頭から446バイトが 00 となりました。パーティションテーブルはそのまま。

Windows 98SEのfdisk(fdisk /mbr)

ブートストラップはoffset 0x015Dまでとすると350バイト、0x0189までとすると394バイト?更新版でもブートストラップの内容は同じ。

  • 実行前
2C 44 63 59 49 0C 00 00 00
  • 実行後
00 00 00 00 00 00 00 00 00
  • 実行前 (zero)
00 00 00 00 00 00 00 00 00
  • 実行後
00 00 00 00 00 00 00 00 00
  • 実行前 (urandom)
F4 FE 62 14 49 F2 2C CB 63
  • 実行後
00 00 00 00 00 00 00 00 00
  • ブートストラップはoffset 0x015Dまでとすると350バイト?(0x0189までだと394バイト?)
  • offset 0x0183 - 0x0189が8B FC 1E 57 8B F5 CB
  • あと00で上書き
  • 446バイトすべて上書きされる

FreeDOSのfdisk(fdisk /mbr)

ブートストラップはoffset 0x010Eまでとすると271バイト?9バイトオールクリア?

  • 実行前 (zero)
2C 44 63 59 49 0C 00 00 00
  • 実行後
00 00 00 00 00 00 00 00 00
  • 実行前
00 00 00 00 00 00 00 00 00
  • 実行後
00 00 00 00 00 00 00 00 00
  • 実行前 (urandom)
F4 FE 62 14 49 F2 2C CB 63
  • 実行後
00 00 00 00 00 00 00 00 63
  • ブートストラップはoffset 0x010Eまで(271バイト?)
  • あと00で上書き
  • offset 0x01BDは?
  • 446(445?)バイトすべて上書きされる

Linuxのfdiskとか

fdisk

Linuxのfdiskでは先頭446バイトには何も書き込まれない。GPartedでNTFSフォーマットすると先頭へは75バイト書き込み。

  • GPartedでNTFSフォーマット
00,00,00,81,38,0D,00,00,00
syslinuxのmbr.bin
# dd if=/usr/lib/syslinux/mbr.bin of=/dev/hda bs=446 count=1

先頭303バイト304バイト?のみ書き込みのみ

  • 実行前 (urandom)
F4 FE 62 14 49 F2 2C CB 63
  • 実行後
F4 FE 62 14 49 F2 2C CB 63
  • offset 0x012Fまで上書き(304バイト?)
  • あとはそのまま
install-mbrコマンド

先頭446バイト書き込み。内容はWindowsのものとは違う。(パーティションテーブル部分は変化なし。ブートシグネチャが無い場合はMBRの最後に0xAA55書き込み)

  • install-mbr /dev/hda
00,80,00,00,00,00,00,A8,01
  • 実行前 (urandom)
F4 FE 62 14 49 F2 2C CB 63
  • 実行後
00 80 00 00 00 00 00 A8 01
  • 446バイトすべて上書き