« SA1Fの内蔵ディスクをバックアップ | トップページ | SA1F00Dキーボード改造 »

2007年2月26日 (月)

SA1F内蔵HDD上のPSAの解析

 では引き続き,SA1F等で利用されているリカバリの仕組みに関する技術的な話に関して少々解説.

 

 なお,具体的なバックアップ方法を解説した前の記事はこちら

 ATA-5コマンドが利用可能なHDDであれば,SETMAXコマンドを使用することにより,設定した場所以降の領域を見えなくすることが可能になります.例えば,80GBのディスクの終端4GBの場所にSETMAXすることにより,これ以降の領域は見えなくなり,74GBの容量を持ったディスクとして認識されます.これがHPA(Hidden Protected Area)という仕組み.

 そしてHPA内には,リカバリに必要なプログラムやデータを収めた,いくつかのPSA(Protected Service Area)が格納されています.そしてPSAの全体的な情報を記録しているレコードがBEER(BIOS Engineering Extension Record)で,各PSAの記録場所などを記録しているのが,DoS(Directory of Services)エントリーです.つまり,PSAは,Win上からは通常の方法でアクセス出来なくなっており,また,その構造なども解析できないようになっています.

 そしてディスクからの起動時にまず読み込まれるMBR(から始まる11セクタ)にも細工がしてあり,これらPSAを使用するためのコードが書かれています.SA1F起動時に F4 が押されていなければ,通常通り,アクティブなパーティションにインストールされているWindowsXPが起動します.しかし,F4が押下されている場合は,これら仕込まれたコードにより,MBRから順繰りにコードを読み込み&実行していき,最終的にPSAに記録されているリカバリ用のアプリが起動するようになっています.

 HPA内にある大半のPSAは,実はパーティションとしての構造を持っています.私がSA1Fでの構造を調べた限りでは,8つのPSAが存在し,そのうちの4つ("RADA DATA","Factory Restore Data","Factory Restore","prism")がFATで,1つ("CONSOLE")がext2,そして残りの3つ("Recover Pro Records","Recover Pro","FirstWare Reserved Area")は不明でした(何某かのファイルやワークエリアだと思われる).

 このような特殊な仕組みを採ることにより,Windows上で発生した何らかのトラブルやウイルス等から,リカバリ用の領域を守れるというワケです.

 全体的な話に関し,もう少し詳しく知りたい方は,Phoenixの公開しているPhoenix cMEのwhite paperを参照してみて下さい.

 で,ThinkPad では,fwbackup.exe や fwrestore.exe というDOS上で動作するコマンドがPSA上に存在し,これらコマンドを使用することによりPSAを全てバックアップ可能で,また,別ディスクにリストア出来ました.しかし,SA1Fにはこれらコマンドは存在せず,リカバリに必要な最低限のファイルやコマンドしかありません(ライセンス料の関係?).

 では,PSAの中身を取り出そうとする際にはどうしたら良いかということですが,まずはHPAを覗く方法を説明すると,最近のlinuxを使っていれば特に何もすることはありません.ideドライバが下記のように勝手に認識してくれる上,dddやmountコマンド等であれば特に意識することなく,利用することが可能です.

   hda: Host Protected Area detected.
     current capacity is 148503558 sectors (76033 MB)
     native  capacity is 156301488 sectors (80026 MB)

   ※dmsgで確認出来る.SA1F00D内蔵の80GB HDDの場合.HPAは
    148503558~156301488セクタの約4GBであることが分かる

上記の部分だけをファイルに取り出す場合は,

   dd if=/dev/hda of=foo/bar/hogehoge.img skip=148503558 \
     count=7797930

のような形でddでダンプすればOKです.

 で,HPA領域をツールを使って解析を行う(直接HDD内のデータを解析しても良い)と,PSAはこのような構造になっていることが分かりました.もし,幸いにしてPSA領域にfwdir.exeコマンドが入っているマシンで解析を行おうとしているのであれば,これを利用しても位置情報は得ることが可能です.

 そして特定のPSA部分のみを取り出す場合は,同じくddでダンプしても良いのですが,場所が分かっているのであれば&パーティションとして有効なPSAの場合は,以下のように直接マウントすることも出来ます.

  mount /dev/hda /foo/bar -t vfat \
      -o ro,offset=`expr 512 "*" 149388294`

  ※149388294セクタからの場所に"Factory Restore Data"がある場合

 なお,HPAを別ファイルに書き出して作業している場合は,/dev/hdaをそのダンプしたファイル名にし,offsetするセクタ数の場所を,今回の例の場合はDoSに書かれているservice_area_startの数字から148503558を引く必要があります(/dev/hdaの148503558からダンプしたから).

 この情報を元にPSAの中身を見ると,以下のようなファイルが存在することを確認できます.

○RADA Data (FAT)
 eulaccep.ted registra.tio

○Factory Restore Data (FAT)
 stware.dat firstdis/ fwscript.ics
 image.002 image.imc resource.dar
 resource.dat
 (firstdisの下)
 fdscript.txt fdsetup.exe fwareapi.phx
 fwinit.phx fwint40.phx fwmbr.phx

○Factory Restore(FAT)
 autoexec.bat command.com fwdata.exe
 fwreboot.exe icmouse.com chooser.exe
 config.sys fweula.txt ibmbio.com
 nobreak.sys client.exe engl46.lng
 fwmount.exe ibmdos.com psadisk.sys

○prism
 errors/ html/ psadesc/ sysconf/ ui/

○CONSOLE (ext2)
 boot.b* initrd.gz kernel lost+found/ map

 "Factory Restore"はファイル名を見て分かるように,リカバリ時に起動するDOSのFDイメージになります.psadisk.sysはPSAを扱うためのドライバで,これを組み込んでいると,PSA領域をfwmount.exeを実行することによって任意のPSAをマウント可能になります.

 そして一連のリカバリ動作はautoexec.batに書かれています.まずは"Factory Restore Data"をマウントし,必要なファイルが一式あるかを確認し,マウスドライバ(icmouse.com)を読み込み&実行し,fwdata.exeを実行.その後にchooser.exeを実行して動作を選択させ,リカバリを選んだ場合はリカバリを実行し(内部的にclient.exeを呼んでる?),"firstdis"の下のfdsetup.exeを実行してfdscript.txtの設定通りにMBRやcME実行に必要となるデータをディスク先頭から書き込み(*.phxがそのイメージファイル).一通り終わったらfwreboot.exeを実行してリブートという感じ.

 ただ,ネットに転がっているImageCastのマニュアルを見たり,client.exeのヘルプ画面を見てみたりする限りにおいては,"Factory Restore Data"にあるデータ一式および"Factory Restore"にある一部のファイルのみでリカバリは出来る感じです.

 ちなみにfwscript.icsはclient.exe用のスクリプトとなっており,第一パーティション(Winを上げたときにCドライブとして見えるパーティション)のみをリカバリするように設定されていました.F4を押してリカバリを実行した際の挙動とも一致.

 前のエントリで触れたプログラムでは,リカバリに必要なファイル一式をDVD/CDに焼くようになっているので,後はUSBドライバを組み込んだDOSでブート出来れば,SA1F単体で(リカバリ領域の復元を除く)リカバリが可能になる筈です.

 この方法はいずれまとめるようにしますが,先のプログラムで焼いたメディアには,client.exeに渡す実行パラメータのサンプルを書いたファイルも入れるようにしてあるので,覗いてみると参考になるかもしれません.ただし,無保証なので,実行は自己責任で :-)

|

« SA1Fの内蔵ディスクをバックアップ | トップページ | SA1F00Dキーボード改造 »

コメント

すばらしい!!
PSAってこんな構造になっていたんですね。
解析ご苦労様です!

幸いにも手元にfwdir.exeとかあるので、私もいろいろ調べてみるつもりです!

投稿: Datniodeath | 2007年3月 2日 (金) 02時01分

>>Datniodeathさん
こちらこそDOSへの降り方の情報ありがとうございました.
とりあえずservice_area_idが分かれば,DOSでもfwmountでマウントして色々といじれそうですね.

投稿: tadachi | 2007年3月 5日 (月) 17時05分

コメントを書く



(ウェブ上には掲載しません)


コメントは記事投稿者が公開するまで表示されません。



トラックバック

この記事のトラックバックURL:
http://app.cocolog-nifty.com/t/trackback/198640/14059619

この記事へのトラックバック一覧です: SA1F内蔵HDD上のPSAの解析:

» 映画 話題 [映画 話題]
映画を見る前に映画の感想を [続きを読む]

受信: 2007年2月26日 (月) 23時44分

« SA1Fの内蔵ディスクをバックアップ | トップページ | SA1F00Dキーボード改造 »