フォト
無料ブログはココログ

« 東大生の4人に1人は「アスペルガー症候群」 <ケア体制が充実している> | トップページ | 起業成長の"フシ"をどう乗り切るか »

2016年2月22日 (月)

BadUSB(2) <今更だけど>

SanDisk Ultara USB 3.0でBadUSBは動くようになった。(BadUSB<今更だけど> (2016/02/14)

ところが、
自動的に入力されるキーデータ(Payload)を書き換えることができない。Payloadを変えたファームウエアを書き込もうとするとエラーになる。 orz

GitHubにある「Known Supported Devices」には、

このUSBメモリにはPS2303が使われているけど、ファームウエアのバージョンが1.03.53ではない。

と書いてある。また、チップの端子をショートして挿入するとブートモードになるらしい。

しかたないので、開けてみた。
Sandiskultra1
↑スライド式なので開けるのはちょっと大変。
↓マーキングはSanDIsk 20-82-00543
Ps2303

チップの端から2番目と3番目のピンをショートしながらUSBメモリを挿すとブートモードになって、ファームウエアを書き換えることができた。

ところが、
ファームウエアを書き換える度にショートしながら挿すのは面倒だ。老眼鏡+虫眼鏡がないと見えない +_+)

しかたがないので、ファームウエアのソースを読んでみた。

HIDとMassStorageDeviceのコンポジット・デバイスになっている。
HIDはファームウエアに埋め込まれたキーコードを送って終わるだけの簡単なもの。BadUSBはキーコードを送るだけだから、MSDは必要ないはずだが?と思って読むと、SCSIのベンダ・コマンドでファームウエアの書き換えに使っていることが分かった。

しばらくソースを眺めていたら原因が分かった。パッチをあててファームウエアを作り直したら、ショートしなくても書き換えることができるようになった。v^^)

BadUSBは、ファームウエアに仕込んであるキーコード(Payload)を送って、パソコンを操作するというもの。キーコードとパソコンに入力されるキー(文字)とは別物だから、入力したいキー(文字)をキーコードに変換しなくてはならない。

この変換はGitHubのUSB-Uubber-Dackyにあるエンコーダを使う。いろいろなキー入力(Payload)のサンプルが公開されている。

ところが、
いろいろためしてみると、文字化けするPayloadがあることに気が付いた。そう、まるでUS101キーボードとJP106キーボードを間違って繋いだ時のように。
作者は、東洋の島国で使われているキーボードまでご存じないようだ。

入力する文字列をキーコードに変換するエンコーダエンコーダはキーボード・レイアウトを指定できるようなので、日本語キーボードのレイアウトを探したが見つからない。

しかたがないので、レイアウト・ファイルを書くことにした。

ほかのレイアウトを見ながらJP106キーボードのレイアウト・ファイルを作成した。
FreeBSDやX-Windowでレイアウトファイルはいじったことがあるので、そんなに難しくない。

ところが、
ちゃんと動かないPayloadがある。どうも、「\」が入力されていないようだ。
「\」はUS101キーボードにはないキーコードが使われているけど、レイアウトファイルには、ちゃんと書いておいたはずだ。

まごころせいじつ堂さんのblogに同じ問題があった。キーコードの種類の最大値が101になっているというもの。(US101キーボード前提)

しかたがないので、もう一度ソースを読んでみた。

ソース中のHIDデスクリプタはバイナリのバイト列で記述してある。HIDレポート・ディスクリプタの解説を見ながら解釈してみると、確かに Usage_Maximum=0x65,Logical_Maximum=0x65になっている。
Usage_Maximum=0xFF, Logical_Maximum=0xFFにしてファームウエアを作り直すと、「\」が入力されるようになった。(めでたしめでたし)

ところが、
先日、知人からは、「今更BadUSBですか」と言われた。
BadUSBが話題になったとき、既に何を今更だったのだが、デモに使えるかなと考えたのだ。

しかたがないので、インパクトがあるデモを考えた。

USBメモリを挿すと...
Eicar

「キャー!!ウイルス感染!!」
Eicar1

ウイルスに感染したわけではなく、ワクチンソフト共通のテストウイルス「Payload - EICAR AV test」だ。
ワクチンソフトがちゃんと動いているか確認できる。

ところが、
USBメモリのケースを開けてしまったのでチップむき出しだから、
Badusb2

デモで使うと、とてもアヤシい!

しかたがないので、また買った。(^^; 2つも)
Sandiskultrax2

Sandisk Ultra USB 3.0は650円くらいで安いんだよね。

###

久しぶりにUSBデバイスのコードを読んだ。

USBメモリ用コントローラPS2303のコアは8051だ。(Clock 250MHzらしい。^o^)) 昔、EZ-USB,EZ-USB FX2で遊んでいたときの経験が役に立った。

今や組み込み業界はARM独り勝ちだけど、今でも8051が廃れないのは、困ったときにオヤジを投入できるメリットがあるからかもしれない。

今回の最大の収穫はこのUSBメモリのNANDフラッシュの生データを読む方法が分かったこと。


BadUSB<今更だけど> (2016/02/14)


最近の投稿

« 東大生の4人に1人は「アスペルガー症候群」 <ケア体制が充実している> | トップページ | 起業成長の"フシ"をどう乗り切るか »

日記・コラム・つぶやき」カテゴリの記事

コメント

コメントを書く

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

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

トラックバック

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

この記事へのトラックバック一覧です: BadUSB(2) <今更だけど>:

« 東大生の4人に1人は「アスペルガー症候群」 <ケア体制が充実している> | トップページ | 起業成長の"フシ"をどう乗り切るか »