Pocket WiFi(D25HW)のベースになったといわれるE5830は、ファイアウォールを外すだけでtelnetできるらしい。
となれば、おそらくPocket WiFiもできるはずだと考えられるが、実際にはできない。
今回、不具合修正のファームウェアアップデートツールを少し調べていて理由が判明。
ファームウェアアップツールはファームウェアを書き込むだけでなく設定も書きこんでいるのだが、その設定がプレーンテキストをコンパイルするような形になっている。
そのテキスト内に「NV_LAN_TELNET_ENABLED」という項目があり、どう見てもtelnet有効化についての設定なのだが、当然値は0に設定されている。
…で、結論から言うとexeをごにょってさらにVS2008デバッガでレジスタを…げふんげふん…で、telnetが有効になった(ぉ)。
偉い人は言いました。「メモリ上にCPUが解釈できるマシン語が展開される限り、Krackできないことなど有り得ない!」と(参考:リバースエンジニアリング)。
一応記念に/proc/cpuinfo取得したので。
Processor : ARMv6-compatible processor rev 2 (v6l)
BogoMIPS : 382.56
Features : swp half thumb fastmult edsp java
CPU implementer : 0x41
CPU architecture: 6TEJ
CPU variant : 0x1
CPU part : 0xb36
CPU revision : 2
Cache type : write-back
Cache clean : cp15 c7 ops
Cache lockdown : format C
Cache format : Harvard
I size : 32768
I assoc : 4
I line length : 32
I sets : 256
D size : 32768
D assoc : 4
D line length : 32
D sets : 256
Hardware : QCT SURF7X25
Revision : 0000
Serial : 0000000000000000
E5830にtelnet - nblogにあるE5830の/proc/cpuinfoと全く同じ。そりゃそうか。
ただ、dmesgはかなり違う(長いので掲載しないが)。
あと、とあるダメ犬の戯言日記 - PocketWifi を覗いてみるの人もTCP/IPを疑ってみたらしい。私も最初はそうだった。
追記:
内部ストレージだが、空いてるのは/dev/mtdblock0(/mnt/flash)が4.6MiB程度とごくわずか。
だが、microSDを挿入すると/dev/mmcblk0p1(普通はパーティション切ってないのでこれ)で認識するので、それをマウントすれば容量は実質無制限。
さて、次はARM開発環境…ってさすがにそこまでするつもりはないのでこの辺で終了。あまり書きすぎると怖い人がやってきそうだし。
おや、こんな夜遅くに誰か来たようd…うわなにするやめqwsdふじこ!
追記(5/20 19:35)
E5830と違ってファイアウォールを切ってもWAN側からはtelnetアクセスできないようだ。まあ、セキュリティを考えたら当然だが。
そもそも項目名が「NV_LAN_TELNET_ENABLED」なので試す前からそうだろうとは思ってた。
追記(7/3)
Pocket Wifiでtelnet darkmark blogによると
バックアップファイルは、エンコードされており、かつ、直接いじっても、CRCエラーで弾かれて、それをリストアすることはできない。しかし、このCRCエラー、単純なビット比較らしく、全部のビット数が変わらなければ、弾かれない。
らしい。LINE_CRCってそういうことだったのか。
てっきりCRC32のようなものだと思ってたので、まさか単純ビット比較だとは思ってもみなかった。
追記2(10/7)
コメントに返答するため久しぶりに調べていたら、私と同じような方法でtelnet有効化した人を発見。
Pocket WiFi(D25HW) - TrashSUITE
しかもこの記事の僅か10日ほど後。なんたる偶然。
memphis
設定ファイルを調べていて、こちらにたどり着きました。
バックアップファイルを変更できないか色々と試しています。
私がテストした限りではCRC32では無く、CRC16が近い値になるみたいです。
ただ、LINE CRCが理解していないのでぴったり合いません(^^;
NAOYA(admin)
7/3の追記に記載しているサイトによると、他の設定値とビットを入れ替えれば可能なようです。
例えば
SETTING_A=0
SETTING_B=150
のような行があった場合に
SETTING=A=5
SETTING_B=100
(Aの1の位とBの10の位を入れ替え)
だとCRCをパスするらしいです。
ただ、私は実際に試していませんが…。
memphis
変更する文字が多いとダメみたいです。
私が試したのは、
char profile_name[13]="read_only";
char wlExtends[12]="";
を、
下のように=の右側を入れ替えましたが
チェックをパスしませんでした。
char profile_name[13]="";
char wlExtends[12]="read_only";
ツールを作りましたが計算は未だに合いません。
ttp://i56.tinypic.com/2dv38jq.jpg
NAOYA(admin)
私もあまりよく分かってないので力になれずすみません。
やはり大幅な書き換えにはLINE CRCの完全解読が必要なのかもしれません。