BochsでMBR debugging

今回は前回取り出したPetyaに書き換えられてしまったMBRをBochsで動かしてみよう。
https://ja.wikipedia.org/wiki/Bochs

Bochsはここから入手できる。
http://bochs.sourceforge.net/getcurrent.html

Bochsも前に出てきたVMware同様PCエミュレータなのだけど、
こいつはMBRのdebugができてしまうんだ。
OSが起動するより前のコードを追えるってわけだね。
そりゃ面白そうだ~笑

キモは設定ファイルの書き方くらいかなと。
サンプルの設定ファイルがあるのでチェックしてみて。
Bochs-2.6.9\bochsrc-sample.txt 

多分もっとシンプルにもできるんだと思うんだけど、、
筆者のはこんな感じ。
romimage: file=$BXSHARE/BIOS-bochs-latest
vgaromimage: file=$BXSHARE/VGABIOS-lgpl-latest
megs: 16
ata0: enabled=1, ioaddr1=0x1f0, ioaddr2=0x3f0, irq=14
ata0-master: type=disk, path="petya.img", mode=flat, cylinders=1, heads=16, spt=63
boot: disk
vga: extension=vbe
mouse: enabled=0
log: nul
logprefix: %t%e%d
panic: action=fatal
error: action=report
info: action=report
debug: action=ignore 


こいつをファイル名を変えてbochsrcとして保存。.txtもいらない。
Bochs-2.6.9\bochsrc

設定ファイルのポイントは赤文字のところ!!
path=""
には取り出したMBRのパスを記入する。

そして、もうひとつ重要なのが、Bochsに読み込ませるディスクイメージのサイズは512の倍数でなければいけないんだ。
どういうこっちゃ??なのだけど、、
切り出したMBRをバイナリエディタで読み込ませてみよう。
petya.imgのサイズはきっかり0x7E000になってる。








10進に直すと516,096だ。512*1008。※

※Windowsに付いている電卓で16進<->10進の計算ができる

設定ファイルのcylinders, heads, spt(sectors per track)でディスクイメージのサイズを表してる。
https://en.wikipedia.org/wiki/Cylinder-head-sector

img size = cylinders * heads * spt * 512
516,096 = 1 * 16 * 63 * 512

筆者の環境に合わせなくても、近い数値で上記の数式通りになってればOK!
(逆に設定ファイルとイメージのサイズが合ってないとエラーでて全く動かない。。)

さて準備ができたらbochsdbg.exeを実行、
Bochs Start MenuのStartボタンで動く。



こんな感じの画面で止まるはず。
このBochs for Windows - Console で、"c"押下、でEnter。

Bochs for Windows - Display
でドクロピカピカが表示されていれば成功!だ。

Comments

Popular posts from this blog

Firmware dumping via SPI

BLE sniffing with UbertoothOne