Web、サーバ、ソフトウェア、バグ・脆弱性 などの情報を何人かで集まって書いていく IT/Web情報系ブログ

【完全版】PS2251-07(2307)用Psychson(BadUSB)パッチの適用方法

投稿日:   最終更新日:2017/05/05  投稿者:xx2zz

PS2251-07(2307)でPsychsonを動かすパッチを公開しましたが、手順が複雑かつ不完全だったため、改めて簡略化したパッチファイルと手順を公開します。

スポンサーリンク

差分ファイル

このファイルには以下の変更が含まれています。

注意: このファイルはPS2251-07(2307)でPsychsonのカスタムファームウェアを動かす実験を目的とした研究資料です。動作の保証をするものではありません。差分適用後のプログラムを動作させたりカスタムファームウェアを書き込むことでデバイスやPCが使えなくなったり壊れても責任を負えません。自己責任で利用してください。

“Psychson2307_diff” をダウンロード

Psychson2307_diff_20170401.zip – 5643 回のダウンロード – 4.85 KB

動作確認デバイス

以下のUSBメモリで動作を確認しています。

TOSHIBA TransMemory-MX V3SZK-016G

Action specified: GetInfo
Gathering information...
Reported chip type: 2307
Reported chip ID: 98-3A-98-A3-76-51
Reported firmware version: 2.15.55
Mode: Firmware

TOSHIBA TransMemory-MX TNU-B008GK

Action specified: GetInfo
Gathering information...
Reported chip type: 2307
Reported chip ID: 98-DE-98-92-72-50
Reported firmware version: 2.03.53
Mode: Firmware

その他必要なもの

2307用CFWのビルド手順

  1. brandonlw/Psychsonからソースコードをダウンロードして展開する
  2. 「Psychson2307_diff_20170401.zip」の中身を1.で展開したPsychsonのフォルダに上書き・追加する
  3. patchコマンドで差分を適用する (動画)
  4. patch -p0 < firmware-firmware2307.diff
    patch -p0 < DriveCom-DriveCom2307.diff
    
  5. 「firmware_ps225107.rar」の中から「FW07FF01V10153M_20140116.bin」と「BN07V106M.BIN」を取り出して「firmware」フォルダの中に置く
  6. 「firmware」フォルダの中に置いた「fire2db.pl」を実行する (要Perl 5)
  7. build.batを実行する

ペイロードの埋め込み

上で作成したファームウェアファイル(bin/fw.bin)に必要に応じてペイロードファイルを埋め込みます。
参照: https://github.com/brandonlw/Psychson/wiki/Embed-HID-Payload-into-Custom-Firmware

2307用CFWの書き込み手順

  1. VS2012で差分適用後のDriveComをビルドする
  2. 「firmware_ps225107.rar」の中から「BN07V502TAW.BIN」を取り出す
  3. 「BN07V502TAW.BIN」をバイナリエディタで開きオフセット0x4D85, 0x4D86の値を00に書き換える
  4. DriveCom.exeでファームウェアを書き込む
  5. DriveCom.exe /drive=E /action=SendFirmware /burner=BN07V502TAW.BIN /firmware=fw.bin
    

- BadUSB , , ,

Comment

  1. uduki0424 より:

    3.0で動かないバグはどこで修正されているのでしょうか?
    またそれは2303のチップでも3.0で動かすことができますか?

    • xx2zz より:

      >3.0で動かないバグはどこで修正されているのでしょうか?
      firmware-firmware2307.diffの以下の部分になります。

      - USBCTL = bmAttach | bmSuperSpeed;
      + USBCTL = bmAttach | bmHighSpeed;

      >またそれは2303のチップでも3.0で動かすことができますか?
      おそらく動くと思いますが、2303のデバイスが手元にないため動作は確認できていません。

      • uduki0424 より:

        教えていただきありがとうございます
        試しにusb.cのUSBCTL = bmAttach | bmSuperSpeed;を
        USBCTL = bmAttach | bmHighSpeed;に書き換えて試してみましたが
        実行されずメモリのプロパティを見ると
        デバイス USB\VID_13FE&PID_5201\5&cc190b6&0&2 を移行できませんでした。

        最後のデバイス インスタンス ID: USB\VID_0FCE&PID_5198\CB5A1VC2HC
        クラス GUID: {36FC9E60-C465-11CF-8056-444553540000}
        場所のパス:
        移行ランク: 0xF000FFFF0000F130
        存在: false
        状態: 0xC0000719
        となっていました
        自分ではどうにかできそうにないので2307のチップを探そうと思っています
        いまさら質問に答えていただきありがとうございました

  2. Ryo より:

    当サイトで使われているTOSHIBA TransMemory-MX TNU-B008GKを使用しているのですが、
    ファームウェアの書き込みの際に
    FATAL: System.InvalidOperationException: DeviceIoControl failed: 048F
    というエラーが吐き出されて、ファームウェアの書き込みを行うことができません。

    何か解決法がありましたら、ご教授いただけたら幸いです。

    • xx2zz より:

      DriveCom.exe /drive=ドライブ /action=GetInfo
      で得られる、chip type、chip ID、firmware versionは記事に記載しているものと同じでしょうか?
      値が違うか、そもそもGetInfoでデータが取得できない場合はコントローラ、バージョンが変わっていてこのパッチが使えない可能性が高いです。

      • Ryo より:

        このページに書かれてある通り
        Action specified: GetInfo
        Gathering information…
        Reported chip type: 2307
        Reported chip ID: 98-DE-98-92-72-50
        Reported firmware version: 2.03.53
        Mode: Firmware
        と表示されます

        • xx2zz より:

          GetInfoの値が同じで中身だけが変わっているという可能性もなくはないですが、
          初期状態でファームウェアを書き込もうとすると似たようなエラーが出た記憶があります。
          この場合、カバーを外してコントローラのピンをショートさせることで強制的にBootModeで起動させた後、
          DriveCom.exe /drive=E /action=SendExecutable /burner=BN07V502TAW.BIN
          DriveCom.exe /drive=E /action=SendFirmware /firmware=fw.bin
          の順にコマンドを実行することで正常に書き込めたはずです。

          ピンショートの方法は以下のページを参考にしてください。
          http://kikuzou.hateblo.jp/entry/2014/11/21/143115
          この記事のコントローラは2303ですが、2307も同様に「TOSHIBA」のロゴを基準に右から2番目と3番目のピンの間です。

          • Ryo より:

            教えていただきありがとうございます!
            無事書き込みには成功しましたが、埋め込んだPayloadが実行されませんでした。
            デバイスドライバーのインストールが始まって、失敗という状況になるので、何かUSB自体に問題があるのかもしれません。

  3. yt より:

    2, 3番ピンをショートさせて接続後
    DriveCom.exe /drive=D /action=GetInfo
    Action specified: GetInfo
    Gathering information…
    Reported chip type: 2307
    Reported chip ID: 98-3A-98-A3-76-51
    Reported firmware version: 1.02.10
    Mode: BootMode

    DriveCom.exe /drive=D /action=SendExecutable /burner=BN07V502TAW.BIN
    Action specified: SendExecutable

    DriveCom.exe /drive=D /action=GetInfo
    Action specified: GetInfo
    Gathering information…
    Reported chip type: 2307
    Reported chip ID: 98-3A-98-A3-76-51
    Reported firmware version: 5.02.41
    Mode: Burner

    DriveCom.exe /drive=D /action=SendFirmware /firmware=fw.bin
    Action specified: SendFirmware
    Gathering information…
    Reported chip type: 2307
    Reported chip ID: 98-3A-98-A3-76-51
    Reported firmware version: 5.02.41
    Mode: Burner
    Rebooting…
    Sending firmware…
    FATAL: System.InvalidOperationException: Header not accepted
    場所 DriveCom.PhisonDevice.TransferFile(Byte[] data, Byte header, Byte body)
    場所 DriveCom.Startup._RunFirmware(String fileName)
    場所 DriveCom.Startup._SendFirmware()
    場所 DriveCom.Startup.Main(String[] args)

    流石に中身が変わってるのか動かないです
    もし、Header not acceptedに関する知見がありましたらご教授いただけたら幸いです

    • xx2zz より:

      Header not acceptedはバーナー(BN07V502TAW.BIN)が対応していない場合などに出るエラーだった記憶があります。

      ピンショートさせずに普通のUSBメモリとして接続した状態でGetInfoした際の応答は以下と同じでしょうか?
      違う場合はやはりBN07V502TAW.BINと互換性がないデバイスの可能性があります。

      Action specified: GetInfo
      Gathering information…
      Reported chip type: 2307
      Reported chip ID: 98-DE-98-92-72-50
      Reported firmware version: 2.03.53
      Mode: Firmware

      • yt より:

        返信ありがとうございます!!

        >ピンショートさせずに普通のUSBメモリとして接続した状態でGetInfoした際の応答は以下と同じでしょうか?
        1度試して失敗してからは、ピンショートさせずに接続するとUSBメモリとして認識されなくなってしまいました。

        • xx2zz より:

          そうなると元のファームウェアバージョンを知ることはできなさそうですね。

          この記事を書いたときwww.usbdev.ruから落とせるPS2251-07のバーナーファイルはBN07V502TAW.BINが最新だったんですが、
          今firmware_ps2251-07.rarを確認するとBN07V601TAW.BINなど他の新しいバーナーファイルが含まれていました。
          BN07V502TAW.BINがだめでも、これらの新しいバーナーファイルはお持ちのデバイスと互換性があるかもしれません。
          BN07V601TAW.BIN等の最新のバーナーでファームウェア書き込みを試してみて、エラーなく書き込みが完了するか、
          Header not accepted以外のエラー(おそらくDeviceIoControl failed:~といったエラー)が出れば可能性がありそうです。

          • yt より:

            BN07V601TAW.BINにて再度試みましたが、同じくHeader not acceptedエラーでした。

            色々試してみたので情報共有させていただきます。
            firmware_ps2251-07.rar内のBN07V*.BIN系の全ファイルと0x4D85, 0x4D86の書き換え有り無しで全パターン試してみました。
            結果は、0x4D85, 0x4D86の書き換え有り且つ、BN07V600T9W.BIN or BN07V600T9.BINにて
            Executing…
            Mode: Firmware まで表示され書き換えが完了してそうでした。
            しかし、書き換え後に再接続してみても何か機能することもなくUSBメモリとして認識されることもありませんでした。やはり、BN07V*TAW.BIN系のファイルとは書き換える内容が異なるのでしょうか?結局上手くは行きませんでしたがバージョンのヒントにはなりそうですね。

          • xx2zz より:

            情報共有ありがとうございます。

            BN07V600T9W.BIN, BN07V600T9.BINの正しい書き換え箇所は0x4D85, 0x4D86ではないのですが、
            0x4D85, 0x4D86を書き換えた場合も副作用によってなぜか書き込みがうまくいくようです。
            (正しい箇所を書き換えた場合と0x4D85, 0x4D86とで書き込んだファームをダンプして一致を確認)

            そして、書き換えが完了してそうなのに再接続で機能しない問題ですが、
            そもそもこの2307パッチか元々のPsychsonのコード自体に問題があってWindows 10で正常なHIDデバイスとして認識されないみたいです。
            (試してないですがおそらくWindows 11でも同様でしょう)
            このパッチを公開した時点ではWindows 7でしか動作確認をしていなかったため問題に気づきませんでした。
            また時間があるときにこの問題を修正できるか詳しく調査してみます。

Message

メールアドレスが公開されることはありません。 が付いている欄は必須項目です

関連記事