Hack BBS

[全部のスレッド一覧][新規投稿][記事の削除・変更] [Home Page]

返信投稿はタイトルのリンクをクリックして下さい
スレッド【No.57】の中の記事をすべて表示しています

【No.57】のスレッド
04/03/05(金) 00:52:25 投稿者[たつや] [No.57]のスレッド内
【No.57】 タイトル[Flash ROM について] この記事がスレッドの最初です
ハックの記録で山下さん writes:
>カーネル(/dev/fl1) も同じように書き込めるのだろうが、

Flash ROM の書き込み方法は私も調べていました。
もう少し早く書いていればよかったですね。

私がやったのは、ap_servd デーモンのシステムコール呼出を
strace で記録した状態でファームウェアのアップデートを行
う、というものです。
その結果からカーネルの書き込みを行っている部分を抜粋す
ると、

02:16:56 open("/dev/fl1", O_WRONLY) = 6
02:16:56 write(6, "\0\0\0\1\0\0\0\3HD-HLAN(PLUS)\0\0\0\0\0\0\0\0\0\0\0"..., 1024) = 1024
02:16:56 write(6, "\313?!\303\345\317\312p\371-\31.\2779\303\3457e\270\374"..., 1024) = 1024

(ひたすら write の繰り返し・・・・)

02:16:59 write(6, "\0270g\365r\224/\270\252\202\360\240\272\215\362tB\206"...,
503) = 503
02:16:59 close(6) = 0
02:18:01 open("/dev/fl1", O_RDONLY) = 6
02:18:01 read(6, "\0\0\0\1\0\0\0\3HD-HLAN(PLUS)\0\0\0\0\0\0\0\0\0\0\0"..., 1024) = 1024
02:18:01 read(6, "\313?!\303\345\317\312p\371-\31.\2779\303\3457e\270\374"..., 1024) = 1024

(ひたすら read の繰り返し・・・・)

02:18:05 read(6, "\0270g\365r\224/\270\252\202\360\240\272\215\362tB\206"..., 50
3) = 503
02:18:05 close(6) = 0

となっていました。単純に /dev/fl1 を open して write で
ひたすら書き込み、再度読み込みモードで open してから読
み出して Verify しているようです。

残念ながら、上記の方法では fork() したプロセスのトレース
ができない (fork() した子プロセスをトレースするにはカー
ネルのパッチが必要?) ので、ap_servd が起動しているコマ
ンドを追うことはできませんでしたが、HD-LAN FWUpdate.exe
との間のやりとりなどはしっかり記録されています。

(ppc_uartd のやっていることも、同様の方法で解析できそう
ですが、これはまだやってみていません。)

>・カーネルをどうやって作るのか

玄箱についていたカーネルソースはコンパイルできる形では
ありませんでしたか?
MontaVista Linux 自体は GPL なので、玄箱にはコンパイル
できるソースがついているだろうと期待しているのですが。

>・どのような形式で書き込むのか
>が、不明。
>失敗すると、死亡は確実だし。

これはやはり問題ですね。
少なくとも、108 バイトのヘッダは作ってあげないと起動
しなさそうですし、これができたとしても、カーネルが一
発で作れないと、失敗したらただの箱になってしまいます
ので。

フラッシュ上のカーネルの書き換えは、技術的には簡単な
のですが、カーネルの構築に失敗した等の危険を考えると、
実質的に書き換え不可能だと思い始めています。
それより、作成したカーネルを HDD 上においておき、フ
ラッシュから起動した後に HDD 上のカーネルで再起動す
ることができれば、安全にカーネルの入れ替えが可能なの
ではないかと思い、その方法を考えてみたいと思っていま
す。

今日思いついたばかりなので、まだできるかどうかは不明
です。しかし、他のマシン上では既に行われていることの
ようなので、実現の方法としてはもっとも可能性が高そう
だと考えています。

例えば、PS2 用 Linux では以下のような物があるようです。

Http://hp.vector.co.jp/authors/VA008536/ps2linux/akmem.html

# またまた長文になってしまいました。ごめんなさい。

04/03/05(金) 01:16:02 投稿者[山下康成] <http://www.yamasita.jp/linkstation> [No.57]のスレッド内
【No.58】 タイトル[Re: Flash ROM について] 【No.57】に対する返信
たつやさん、いつも参考になる書き込みありがとうございます。

>>・カーネルをどうやって作るのか
>
>玄箱についていたカーネルソースはコンパイルできる形では
>ありませんでしたか?

FLASH に書き込める事を確認したので、次はカーネルだ
と思っているところでした。まだ確認できていません

今度の週末にでもチャレンジします。

>MontaVista Linux 自体は GPL なので、玄箱にはコンパイル
>できるソースがついているだろうと期待しているのですが。

まだ未確認です。
ヘッダファイルが足りないということでしたが、
とりあえず、kernel/include/melco というディレクトリは存在しています

>フラッシュ上のカーネルの書き換えは、技術的には簡単な
>のですが、カーネルの構築に失敗した等の危険を考えると、
>実質的に書き換え不可能だと思い始めています。

書き換えができれば、本物のハッカーかと。(社員除く:-)

>それより、作成したカーネルを HDD 上においておき、フ
>ラッシュから起動した後に HDD 上のカーネルで再起動す
>ることができれば、安全にカーネルの入れ替えが可能なの
>ではないかと思い、その方法を考えてみたいと思っていま
>す。

報告をお待ちしてます。

04/03/05(金) 01:40:45 投稿者[たつや] [No.57]のスレッド内
【No.59】 タイトル[Re: Flash ROM について] 【No.58】に対する返信
>たつやさん、いつも参考になる書き込みありがとうございます。

とんでもないです。こちらこそ、お世話になってます。

>FLASH に書き込める事を確認したので、次はカーネルだ
>と思っているところでした。まだ確認できていません
>今度の週末にでもチャレンジします。

よろしくおねがいします。

>ヘッダファイルが足りないということでしたが、
>とりあえず、kernel/include/melco というディレクトリは存在しています

バッファローで手を加えたり、追加したドライバのソースには、

#include <melco/melco_hwctl.h>

というヘッダファイルをインクルードしているところがいくつか
ありますが、この melco_hwctl.h が見あたらないんです。
おそらく、その kernel/include/melco の下に入っているべき物
だと思うのですが。

>書き換えができれば、本物のハッカーかと。(社員除く:-)

後先考えずに書き換えて病院送り、、、なんてのなら私は
得意なのですが :-)

>報告をお待ちしてます。

akmem の採っている方法だとカーネルにパッチを当てなけ
ればなりませんが、今回はそれができないのでモジュール
として後からロードできるように作らなければならないと
ころが難関だと思っています。仕組みもまだよく理解でき
ていませんし。
あまり期待しないでお待ちください。

04/03/06(土) 01:39:48 投稿者[山下康成] <http://www.yamasita.jp/linkstation> [No.57]のスレッド内
【No.61】 タイトル[Re: Flash ROM について] 【No.59】に対する返信
>>FLASH に書き込める事を確認したので、次はカーネルだ
>>と思っているところでした。まだ確認できていません
>>今度の週末にでもチャレンジします。

Monta Vista からカーネルのソースを入手するには、
MontaVista Linux Professional Edition の
MontaVista Linux Preview Kit を入手すればいいのですかね?
>バッファローで手を加えたり、追加したドライバのソースには、
>
>#include <melco/melco_hwctl.h>
>
>というヘッダファイルをインクルードしているところがいくつか
>ありますが、この melco_hwctl.h が見あたらないんです。
>おそらく、その kernel/include/melco の下に入っているべき物
>だと思うのですが。

melco_hwctl.h は玄箱に付属 CD の kurobako100src.tar.gz にも
入っていませんでした。

04/03/06(土) 04:38:10 投稿者[たつや] [No.57]のスレッド内
【No.63】 タイトル[Re: Flash ROM について] 【No.61】に対する返信
>Monta Vista からカーネルのソースを入手するには、
>MontaVista Linux Professional Edition の
>MontaVista Linux Preview Kit を入手すればいいのですかね?

そうです。ほかにも方法はあるのかも知れませんが、私は
Preview Kit からカーネルソースを入手して使っています。

>melco_hwctl.h は玄箱に付属 CD の kurobako100src.tar.gz にも
>入っていませんでした。

そうでしたか。
このカーネルの「差分」は、「バッファローが手を加えたもの」
だと私は書いていましたが、それ以外にも drivers/{scsi,usb}
や、drivers/ide の一部のファイルなど、MontaVista Linux
(2.4.17) より新しいバージョンのものが入っていました。
多分、USB 2.0 の対応や IDE のパフォーマンスをあげるため
なんでしょうね。drivers/usb は Linux の 2.4.20 のものが
使われているようです。

(余談ですが、このバージョンの usb ドライバを使ったところ、
わたしの持っている USB NIC (GREEN HOUSE の USB100B)を動
かすことができました。)

04/03/07(日) 07:56:53 投稿者[はまじん] [No.57]のスレッド内
【No.67】 タイトル[Re: Flash ROM について] 【No.63】に対する返信
まだ、手元に玄箱を持っていない、はまじんです。(今は何処にも無いですね(^_^;)

>(余談ですが、このバージョンの usb ドライバを使ったところ、
>わたしの持っている USB NIC (GREEN HOUSE の USB100B)を動
>かすことができました。)

ってことは、NICの2枚挿しOKという事ですね。
これで、色々と遊べそうですね。\(^O^)/
貴重な情報をありがとうございました。