質問:
ファームウェアの復号化:ファームウェアには真の「フォーマット」があり、他のファイルの復号化とどのように異なりますか?
stack full of heaps
2014-12-10 00:40:38 UTC
view on stackexchange narkive permalink

システム用のファームウェアがあり、すべてが何をするのかを確認するために、その一部を復号化しようとしています。復号化されたコピーの複製など、違法なものなどはありません。

しかし、いくつかの理由で難しいように思われる場合があります。

1。特定の形式や方法がない場合があります。他のバイナリファイルと区別します。

2。暗号化の方法がわからない場合があります。

3。「通常」暗号化されていない場合があり、特別に暗号化されている場合があります。

ファイルには暗号化されていないコードが含まれていますが、ファイルがどのような種類のオペコードバイトを表すことができるかは100%わかりません。

これはすべてARM搭載デバイスのファームウェアです。 、しかし私はそれが名前だと公に言っているわけではありません。それは、そのファームウェアがARM ISA / opcodesのいくつかのバリアントになることを意味する必要がありますか(ARMプロセッサのマシンコードであるため)?その場合、どこで復号化を開始し、可能であれば、ARM、ISA(instruction-set = archive)などのバージョンを決定し続ける必要がありますか?

ファームウェアにはマジックナンバーがあります。ファイルの先頭(会社名を示すだけです)ですが、その後、暗号化されていないバイト、次にマジックナンバー、暗号化されたバイト、マジックナンバー、暗号化されていないバイトなどがあります。各バイトにはファイルの他の部分にはない完全に無意味なASCII文字があり、それらは後続のセグメントにあるため、暗号化された部分は離れています。これは、これらが不規則で暗号化されたバイト範囲であることを明確に示しています。

一般的に、人々は彼らが使っているハードウェアを投稿します、ここで、これは同様のことをした人々から良い答えを引き付けるかもしれません。周りを見回すと、多くの質問がダウンロード可能なファームウェアへのリンクを提供していることがわかります。今のところ、あなたが得ることができる唯一の答えは、おそらく「ビンウォークを実行し、その上で標識を実行して、何が起こるかを確認する」ことです。 ARMの場合は、ある種のLinuxを実行している可能性があります。そのため、ある種のスカッシュを処理している可能性があります。
「ARMの場合、ある種のLinuxを実行している可能性があります」_What_はある種のLinuxを実行していますか?ここでのファームウェアは、コンピューターの残りの部分を起動するためのファームウェアです。 SquashFSはファイルシステムですが、ファームウェアの復号化にどのように役立つと思われますか?どちらかといえば、ファームウェアを復号化することで、残りのハードウェアをリバースエンジニアリングできるようになるため、ある意味ではゲートウェイハックのようなものです。
1 回答:
Spektre
2014-12-10 14:01:35 UTC
view on stackexchange narkive permalink

ファームウェアフォーマットを特定する方法

  1. 昔はIntelHEXとbinフラッシュメモリダンプが使用されていました

    ファームウェアは通常、特定の IC のHWプログラマーまたは ISP によってデバイスにコピーされました。 HEX は非常に具体的な Intel_HEX(* .hex)テキストファイルで、簡単に識別できます。一方、 BIN ダンプは識別が困難です。内部にトークンが表示されているか、トークンを逆アセンブルでき、コードに意味がある場合は、おそらくバイナリメモリダンプです。暗号化されている場合は運が悪いです。

  2. elfまたはobj形式

    これらは、 PE 。 16進表示の ELF は次のようになります:

      7f 45 4c 46 01 02 01 00 | 00 00 00 00 00 00 00 00 | .ELF ...  

    OBJ はターゲットプラットフォームに大きく依存しており、Intel、MS、またはLinuxの場合は...

  3. ファイルシステムダンプ

    一部のデバイスには独自のプログラミングインターフェイスが実装されており、ファームウェアをディスクイメージとして使用するため、ファイルはいくつかのファイルシステムのダンプ。ここには、いくつかのファイルとして書き込まれたファームウェアが含まれています。 FileFormat タイプを識別する必要があります(通常、ブートセクターの最初の 512 バイトで)。次に、内部のファイルを抽出して、最初からやり直します。 USB キーを取得し、ファイルシステムダンプを1:1で書き込んでから、さまざまなファイル形式をサポートするOSからアクセスしようとすると役立つ場合があります。 PQ-magicなどのHDDユーティリティやFSタイプを識別できるものを使用することもできます。

  4. 復号化

    使用済みの IC の逆アセンブラ、またはさらに優れたシミュレータ/エミュレータが必要なデバイス SDK にはシミュレーションも含まれているため、ファームウェアをメモリにロードして、それを実行して、何か意味のあることをするかどうかをテストします。分解するには、コードを分析してそれも確認する必要があります...

  5. ol>

    [メモ]

    投稿する必要があります少なくともファイル拡張子とファイルの開始の16進ビュー

    [編集1]表彰への応答+いくつかの追加情報

    からテキストを正確に開始します開始するかどうか?

    それでも次のようになります。-ビンメモリダンプ-パック/エンコードされたもの(特定のファイルシステムでも)

    1. パックされたものを特定/エンコードされた構造

      RIFF (*。avi)形式のように内部のチャンクを見つけようとします。 ID 文字列が存在しない可能性があることに注意してください。基本的に、ファイルサイズまたは特定のチャンクオフセットまたは分離されたテーブルでの長さを持つ次のチャンク構造に追加される、ファイル内の16進エンコードされた長さまたはオフセットを探しています。ブース LSBまたはMSB である可能性があることを忘れないでください。最初は何も想定しないでください。長さ/オフセットは通常、エンコードされた 16/32/64 ビット( 2/4/8 BYTE)また、繰り返しパターンを見つけようとします(チャンクのヘッダーのようなものが存在する場合) )

    2. ファイルシステムを特定する

      一部の FS には特定の ID あるオフセットで、それを探します( FAT32 など)。ほとんどの FS FAT + DIR テーブルを使用するため、次のようなものを探します。

      MDOS DIR example

      これが DIR テーブルは MDOS ファイルシステムのように見えます。これは、ディスクのすべてのファイル/ディレクトリを保持する構造です。各ファイルには、エンコードされた名前、タイプ(拡張子)、開始セクター、長さが必要です。

      • E5 hex = 229 dec は通常、空きディレクトリスペースをマークします(多くのFSシステムで)

      したがって、ターゲットシステムに存在する必要のあるファイル名がわかっている場合は、それを探して DIR テーブルを見つけることができます...

      MDOS FAT example

      これは、 MDOS での FAT テーブルの外観です。 FAT は、ディスクの各セクター/クラスターに関する情報を保持します。この場合は12ビットなので、各値の長さは1.5バイトです!!!一部の値は、セクターをシステム/予約済み(使用不可)、不良、無料、または他の値が存在する場合、リンクリストのようにこれに接続されている次のセクターのインデックスとしてマークします。デコード中は、エンディアンが小さい場合も大きい場合もあることに注意してください。

    3. ビンのメモリダンプを特定するには

      この場合、ファイルはあなたの腕の OS のメモリダンプです。つまり、次のようなプログラムの特定の部分を探す必要があります。

      • 割り込みテーブル
      • 特定のプログラムトークン(出力されるもの...)
      • グラフィック

      最後の2つは非常に単純なので、割り込みの情報のみを追加します。ほとんどのプロセッサの割り込みはメモリ内の固定位置にあるため、割り込みごとに数バイトが予約されています。この場所には通常、ジャンプが割り込みハンドラルーチンにつながるはずのジャンプ命令があり、 reti retn のような特定の割り込み命令の終わりで、または設定/リセットによって終了する必要があります。割り込みをマークする特定のレジスタが処理されました...

      したがって、bin内に密集したジャンプ命令を探し、見つかった場合は、それらの数と距離が CPU データシートと一致するかどうかを確認します。また、ジャンプアドレスの近くのどこかが割り込みの存在から戻っているかどうかを確認できます。はいの場合、必要なものはすべて揃っています。割り込みテーブルのオフセットは通常固定されています...したがって、ビンダンプからターゲットデバイスのメモリマップのどこから始まるかを簡単に見つけることができます。

      ビンにはIntelhexファイルのようなオフセットエンコーディングを使用できることに注意してください

    4. ol>
拡張子は.binです。最初の16進ビューは会社名であり、50バイト以上を占め、ASCII、Unicodeテキストで識別できます。
@stackfullofheapsは、コメントするには応答が多すぎるため、回答するために[edit1]を追加しました
私は、ファームウェアがその目的のためにファイルシステム/ディスクとして使用できると考えることを本当に気にしませんでした。
@stackfullofheaps一部のデバイスには接続機能がないため、アップグレードSDカードが唯一の使用可能なオプションです。また、一部のファイル形式には、Garminsマップファイルのように直接FATが含まれています...したがって、常にそのオプションも検討する必要があります
リバースエンジニアリングしようとしているデバイスにはハードディスクと完全なオペレーティングシステムがあるため、ファイルシステムフラッシュブリッジを除外しますが、まだ完全ではない可能性があります。
ファームウェアは「起動CPU」のリセットベクトルで機能していると思われ、残りのハードウェアをそのCPUで起動(初期化)し、残りがどの程度機能するかは、復号化できるものの問題です。リバースエンジニアリングなど。ファームウェアをファイルシステムとして使用したり、ある種の小さなオペレーティングシステムとして使用したりできる可能性があると思います。
@stackfullofheapsうん、そのような場合は何でもかまいません...また、ファームウェアの代わりにディスクにロード/スワップする実行可能ファイルのセットにすることもできます。デバイスにフラッシュ可能なICが多い場合は、より多くのファームウェアが一緒にパックされている可能性があります


このQ&Aは英語から自動的に翻訳されました。オリジナルのコンテンツはstackexchangeで入手できます。これは、配布されているcc by-sa 3.0ライセンスに感謝します。
Loading...