USBメモリをHack(途中まで)

USB メモリ。いろんなセキュリティリスクがありますが、コンテンツにウイルスが含まれているとかではなく、ハードウェア的な仕組みで刺すといろんな悪さをする、ケシカランUSBメモリがあります。

- キーボードの働きをしていろんな操作を行う
- ネットワークデバイスとして働いてゲートウェイになる
- ストレージとして保管されたコンテンツを読み出す、改竄する

・・・

「BadUSB」という名前で面白いテーマとして、過去にもとりあげました。

「STM32の開発をしてみよう（AVTokyo2017バッジをHack）」
https://qiita.com/lowlevel/items/5221a43875e1db464fa2

このときは AVTOKYO 2017バッジのマイコンSTM32F103をプログラムして BADUSB としました。


今回は、もっと本格的に一般のUSBメモリコントローラーを使ったHackをしてみます。


# USBメモリの構成部品

USBメモリは以下より構成されています。

- USBコネクタ
- USBメモリコントローラ
- フラッシュメモリチップ
- PCB
- 電源回路
- ケースなど

このうち、

- USBコネクタ
- フラッシュメモリチップ
- PCB
- 電源回路

部分が組み立て済みでフラッシュメモリとケースをつけるだけで自分のUSBメモリが作れるOEM用のボードがあります。

# OEM向けUSBメモリボード

そのようなもののうち、良さそうなものを買ってみました。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/139524/00b37d13-62c3-911c-b229-0a0fa5946f9f.png)


Hack に似合う透明ケースとセットで購入。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/139524/39cfb1b8-e09e-c864-769f-b8220ce20abe.png)

コントローラはIS903です。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/139524/28a904f2-0cbd-5ca9-c32f-9f946222d417.png)
いまどき珍しい書き込み禁止スイッチがついています。
書き込み禁止スイッチをコントローラの入力、アクセスLEDをコントローラの出力として使えたらいいな！
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/139524/dc250d19-6de1-8572-39b6-9c91533c007c.png)

# フラッシュメモリチップ 29F16

さて、これにはメモリを付けないといけません。上の写真のメモリ取り付ける場所はBGAとTSOPのパターンがついています。いろんな種類のメモリが付けられるようになっていて、メモリIC用パッドの適合する部分だけをはんだづけします。BGAを手半田するのはめんどくさいので、TSOPのもので対応するものを購入しました。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/139524/7e9e2542-70d8-e3de-4a4c-169b7be0a763.png)

届きました。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/139524/d1cf8fc4-9842-66f6-3c72-9414ce370036.png)



![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/139524/ae673d81-59ad-6a42-7cda-2d99ac7baeb2.png)



インテルの29F16B08JCNE1 です
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/139524/962d3ece-39f8-5c96-3346-86ffd15a54ab.png)

# データシートとの照合

これはMICRONのデータシートですが、29F16G という名前は一種の規格のようになっています。そしてそれは16GのNAND Flash を表しています。


![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/139524/9a6f7659-098f-ad27-0140-eb006487bd0e.png)


TSOPパッケージ。0.5mmピッチです。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/139524/8f14b58e-6b53-ba67-38e9-00cd9acdc81e.png)

ピン配置。VCCとVSSに注目し、基板と照合して実装の向きを確認します。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/139524/8c269cfd-2a11-b189-85bb-4510d0b24ea6.png)


こちらは IS903のデータシートです。これは同じQFN-64でも2種類あってピン配置が全く異なるので罠。今回は8x8mm のものでした。

IS903の GND が、メモリの VSS に対応しているのでそれを参考に基板パターンを照合します。


![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/139524/35862aa4-9b17-5d63-ed43-d3dbd64b703c.png)


# dmesg の反応

これはメモリを実装していない状態で基板をUSBに刺した時の dmesg。
刺すと反応し、/dev/sdb として認識しますがその先に進みません。


![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/139524/d81c7653-bbda-a080-e80f-f34fd4137e9b.png)

これがメモリを装着した後どうなるでしょうか？

# メモリチップのはんだづけ

まず右端と左端だけはんだづけをして位置決めをします。その後全てをはんだづけします。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/139524/8bbc9c1b-39e6-a27c-d977-fdca0afd2263.png)

0.5mm ピッチなので、AVTOKYOはんだごてにILSタイプの極細こて先を装着して使いました

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/139524/c62276ad-0752-a01a-2637-dbff5186dcc7.png)

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/139524/d5569b1e-e9d8-74b5-00ff-0cafc1f5608e.png)


うまくはんだづけできましたが・・・

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/139524/a956affa-13f3-9559-c0bc-711194232eb1.png)

# 失敗？

上の作業のあと USB コネクタに刺しても認識しなくなりました。

メモリの実装は表裏できますが、別面につけないといけないかな？


表側と裏側と2パターン付けてみました

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/139524/4984ab30-eda1-03db-d4bf-04ea6f3086c9.png)

両方ダメでした。

更に、両面実装したのもダメ。うまくいきませんでした。( 続く・・！)