chakokuのブログ(rev4)

テック・コミック・DTM・・・ごくまれにチャリ

SDカードのロックをはずす

前回、データレスキューサービスからデータ復元できませんと返却されたマイクロSDカードですが、いろいろ調べると以下が分かりました。

  • OSからファイルとしては認識されない
  • マイコンからSPIインタフェースで接続するとCMD0等は正常に応答する
  • SPIモードへ移行できる
  • カード情報取得コマンド(CMD10/CMD58)等は正常応答する
  • ブロックリードコマンド(CMD17)はエラー終了する(レスポンス1バイト中、bit2(illegal command)が立つ)
  • ステータス取得コマンド(CMD13)はレスポンスの2バイト中、2バイト目のbit0(Card is Locked)が立つ

このことから、なんらかの拍子でカードにロックがかかったのだと推測しました。SDカードのロックって、ケースの外側のノッチをLOCKに倒すことだと思われているけど、SDカードの仕様書を読むと、ノッチでロックをかける(Write禁止)以外に、SDカードにパスワードを設定することで、ReadWriteの両方を禁止させる機構があるのでした。この操作は、CMD42(LOCK_UNLOCK)を用いることで可能になるようです。(ロックのかかっていない普通のカードにCMD42でロックをかけると、返品されたカードと同じ動作になったので、今回の読めないトラブルはパスワードによるロックと思われる)
いうわけで、、マイコンから総当りでCMD42を使ってパスワードを打ち込んでロックを解除させてみた。SDカードの仕様書によるとパスワードの最大長は16バイト(128bit)なので、いきなり総当りしても自分が生きてる間には終わらなそうなので、1バイト長から順番にバイト長を延長しながら、総当りでパスワードのアンロックを試すことにしました。
いまのところ、、パスワード長3バイトまでは総当りで全部しらべましたが、一致しておらず、今は4バイト長と仮定して、総当りで調べています。4バイト長でのパスワードの全組み合わせをテストするには数日かかるのですが、4桁でだめだったら時間の関係でもう無理です。
左の写真はLPCXpressoからSPI経由でマイクロSDがささったSDカードアダプタに総当たりでロックを解除させようとしているところです。まったく解ける風にはありません。こうなったら子供(=カードの所有者)に心当たりのあるパスワードを聞いてみるか。。ソーシャルエンジニアリングの臭いが。。

いろいろ調べているとGalaxy(長男の携帯)には、SDカードの暗号化オプションがあるようだった。ひょっとして何かの間違いでSDカードの暗号化を設定してしまったということなのでは??しかし、、そうだとすると利用の際に携帯は複合コードをGUIで聞いてくるはずだし。。

■ご参考URL

ググって手に入るSDカードの仕様書例
日立製作所様の「マルチメディアカード ユーザーズマニュアル」
http://smartdata.usbid.com/datasheets/usbid/2000/2000-q4/j603002_mmc.pdf
仕様書中、2-31のページにCMD42(LOCK_UNLOCK)の説明があります。

LinuxのSD/MMCパッチ(Lock/Unlockをサポートする)
http://permalink.gmane.org/gmane.linux.kernel.mmc/21903

AndroidのSDカードのLock/Unlock(CMD42)を含むヘッダ。Androidとして、CMD42を実行する機能を持っているということか。。??
https://android.googlesource.com/kernel/msm/+/android-msm-hammerhead-3.4-kk-r1/drivers/staging/rts5139/sd.h

早い話が、、Galaxyが提供している外部メモリ(SDカード)の暗号化オプションを間違って設定してしまったということなのではないか!?!? 帰ってきたら子供に聞いてみよう。
http://www.docomo.biz/html/members/security/2_2.html?security1=pn

■関連記事

茶国::データリカバリーサービスでも読めないと断られたマイクロSD
http://d.hatena.ne.jp/chakoku/20140308/1394337131