Xiong MaiのDVRおよびIPカメラのファームウェアの開梱、編集、およびパッケージ化

背景



少し前に、私はAliexpressのIPカメラ(Hi3516チップ53H20Lプラットフォーム)と16チャンネルのハイブリッドビデオレコーダー(Hi3521チップMBD6508Eプラットフォーム)を購入しました。 どちらもHiSiliconチップセットに基づいているため、相互の互換性の問題は発生しません。

もちろん、不具合がないわけではありません。 最初で最も重要なもの-WiFiはカメラで曲がって動作していました-キーがHEXフォームで指定されている場合、ネットワークに接続できませんでした。また、デフォルトゲートウェイにも定期的な問題がありました。



ファームウェアは、まだ6月であることが判明しました。 新しいファームウェアを入手して試してみました。 バグのあることが判明したものもありましたが、うまくいきました。

別の問題が発生しました-telnet接続のデフォルトのパスワードが変更されました。 私はこれを容認できず、それを戻す方法を探し始めました。

この方法は、HiSiliconチップをベースにしたDVRとカメラでテスト済みですが、中国ではU-bootブートローダーが広く使用されているため、別のプラットフォームで動作するはずです。



開梱



開梱手順についてはこの記事である程度詳しく説明していますが、パッケージングプロセスはどこにも説明されていないため、 この記事を書くように促されました。

何も見逃さないように、段階的にペイントします。

Linuxをインストールし、ubuntuを選択しました。

ファームウェアファイルのタイプを確認します。

root@xc:~/firmware# file General_HZXM_IPC_HI3516C_53H20L_V4.02.R11.20131108_ALL.bin General_HZXM_IPC_HI3516C_53H20L_V4.02.R11.20131108_ALL.bin: Zip archive data, at least v2.0 to extract
      
      





開梱:

 root@xc:~/firmware# unzip General_HZXM_IPC_HI3516C_53H20L_V4.02.R11.20131108_ALL.bin Archive: General_HZXM_IPC_HI3516C_53H20L_V4.02.R11.20131108_ALL.bin inflating: Install inflating: u-boot-all.bin.img inflating: web-x.cramfs.img inflating: custom-x.cramfs.img inflating: user-x.cramfs.img inflating: romfs-x.cramfs.img inflating: logo-x.cramfs.img inflating: InstallDesc
      
      





インストールの内容を確認します。

 { "Commands" : [ "burn custom-x.cramfs.img custom", "burn romfs-x.cramfs.img romfs", "burn user-x.cramfs.img user", "burn logo-x.cramfs.img logo", "burn web-x.cramfs.img web" ], "Devices" : [ [ "53H20L", "1.00" ] ] }
      
      





InstallDesc:

  "UpgradeCommand" : [ { "Command" : "Burn", "FileName" : "u-boot-all.bin.img" }, { "Command" : "Burn", "FileName" : "custom-x.cramfs.img" }, { "Command" : "Burn", "FileName" : "romfs-x.cramfs.img" }, { "Command" : "Burn", "FileName" : "user-x.cramfs.img" }, { "Command" : "Burn", "FileName" : "web-x.cramfs.img" }, { "Command" : "Burn", "FileName" : "logo-x.cramfs.img" } ], "Hardware" : "53H20L", "Vendor" : "General" }
      
      





u-boot-allという単語は、imgファイルがU-bootローダーのイメージであることを示唆しているため、適切なパッケージを配置します。

 root@xc:~/firmware# apt-get install u-boot-tools
      
      





アーカイブにあったファイルを確認します。

 root@xc:~/firmware# file u-boot-all.bin.img u-boot-all.bin.img: u-boot legacy uImage, linux, Linux/ARM, Firmware Image (gzip), 524288 bytes, Fri Nov 8 05:15:49 2013, Load Address: 0x00000000, Entry Point: 0x00080000, Header CRC: 0x8A551AA8, Data CRC: 0x8290AD90 root@xc:~/firmware# file romfs-x.cramfs.img romfs-x.cramfs.img: u-boot legacy uImage, linux, Linux/ARM, OS Kernel Image (gzip), 4100096 bytes, Fri Nov 8 05:16:04 2013, Load Address: 0x00080000, Entry Point: 0x00580000, Header CRC: 0xD16AC90F, Data CRC: 0x54CDD868 root@xc:~/firmware# file user-x.cramfs.img user-x.cramfs.img: u-boot legacy uImage, linux, Linux/ARM, OS Kernel Image (gzip), 7602112 bytes, Fri Nov 8 05:16:02 2013, Load Address: 0x00580000, Entry Point: 0x00CC0000, Header CRC: 0x106C19AD, Data CRC: 0x6D54ADA7 root@xc:~/firmware# file web-x.cramfs.img web-x.cramfs.img: u-boot legacy uImage, linux, Linux/ARM, Standalone Program (gzip), 1572800 bytes, Fri Nov 8 05:15:51 2013, Load Address: 0x00CC0000, Entry Point: 0x00E40000, Header CRC: 0x87611FE5, Data CRC: 0x6BD90EBD root@xc:~/firmware# file custom-x.cramfs.img custom-x.cramfs.img: u-boot legacy uImage, linux, Linux/ARM, Standalone Program (gzip), 262080 bytes, Fri Nov 8 05:15:49 2013, Load Address: 0x00E40000, Entry Point: 0x00E80000, Header CRC: 0xF7C82692, Data CRC: 0x5A27F74C root@xc:~/firmware# file logo-x.cramfs.img logo-x.cramfs.img: u-boot legacy uImage, linux, Linux/ARM, Standalone Program (gzip), 262080 bytes, Fri Nov 8 05:15:47 2013, Load Address: 0x00E80000, Entry Point: 0x00EC0000, Header CRC: 0x4FE4A821, Data CRC: 0xF6671BD1
      
      





Load AddressとEntry Pointの2つのパラメーターに注意してください。 最初のアセンブリ中に、それらを指定するのを忘れました。デフォルトではゼロになりました。これは、ブートローダーのアドレスであり、ファームウェアの後に消去されることが判明しました。 このため、私は復元にさらに1時間を費やしました。カメラを道路から取り外し、分解し、プログラマーのファームウェアを復元する必要がありました。 (彼がカメラを分解したのは何の理由もありませんが、彼はシリカゲルの袋をケーシングに追加して空気から水分を除去しました。)



ここで少し説明します。このファームウェアの.imgイメージは、cramfsファイルシステムのわずかに変更されたイメージです。 ここで詳細を読むことができます。 画像を通常の状態に戻すには、ヘッダーの64バイトを切り捨てる必要があります。

 root@xc:~/firmware# dd bs=1 skip=64 if=logo-x.cramfs.img of=logo-x.cramfs 262080+0   262080+0    262080  (262 kB), 0,891322 c, 294 kB/c
      
      





他のファイルについては、コマンドは似ています。

何が起こったのか見てみましょう:

 root@xc:~/firmware# file logo-x.cramfs logo-x.cramfs: Linux Compressed ROM File System data, little endian size 28672 version #2 sorted_dirs CRC 0xe29e6340, edition 0, 199 blocks, 2 files
      
      





すでにcramfsのように見えます。 cramfsイメージを使用するには、適切なパッケージをインストールまたは更新します。

 root@xc:~/firmware# apt-get install cramfsprogs
      
      





画像を解凍します。

 root@xc:~/firmware# cramfsck -x logo logo-x.cramfs root@xc:~/firmware# cramfsck -x user user.cramfs root@xc:~/firmware# cramfsck -x romfs romfs-x.cramfs root@xc:~/firmware# cramfsck -x web web-x.cramfs root@xc:~/firmware# cramfsck -x custom custom-x.cramfs
      
      





ディレクトリは作成しませんが、自動的に作成されます。

ローダーはそのように展開できません。これはcramfsイメージではありませんが、触れないでください。



中身は何ですか



ファームウェアアーカイブ内の各ファイルの内容をすぐに確認します。



romfs-x.cramfs.imgに興味があります。これは、パスワードが保存されているpasswdファイルがある場所だからです。 その内容は次のとおりです。希望する人は密輸を試みることができます。

 root:$1$RYIwEiRA$d5iRRVQ5ZeRTrJwGjRy.B0:0:0:root:/:/bin/sh
      
      





サイトで新しいハッシュ生成し、ファイルで変更しました。



戻す



変更が行われた後、すべてを元に戻す必要があります。

 root@xc:~/firmware# mkcramfs romfs romfs-x.cramfs Directory data: 3624 bytes Everything: 4004 kilobytes Super block: 76 bytes CRC: 28c62b9b
      
      





ロードアドレスとエントリポイントの値に注目したことを覚えていますか? それらを覚えてチームに追加する時です。

U-bootイメージを作成します。

 root@xc:~/firmware# mkimage -A arm -O linux -T ramdisk -n "linux" -e 0x00580000 -a 0x00080000 -d romfs-x.cramfs romfs-x.cramfs.img Image Name: linux Created: Fri Feb 21 14:27:38 2014 Image Type: ARM Linux RAMDisk Image (gzip compressed) Data Size: 4100096 Bytes = 4004.00 kB = 3.91 MB Load Address: 00080000 Entry Point: 00580000
      
      





ちなみに、1つのモジュールを更新するには、ファームウェア全体をフラッシュする必要はありません。必要なものだけを置き、InstallおよびInstallDescファイルを編集して、必要な行のみを残します。

受信したファイルを別のディレクトリに置き、新しいものにします。 コマンドを与えます:

 root@xc:~/new# zip -D -X firmware.bin * adding: Install (deflated 22%) adding: InstallDesc (deflated 30%) adding: romfs-x.cramfs.img (deflated 0%)
      
      





すべて、ファームウェアの準備ができました。 更新項目を介してWebインターフェイスを介してフラッシュするだけです



ご注意



この記事の推奨事項に従うことで、あなた自身の危険とリスクを負います。 著者はあなたの行動に責任を負いません。 ファームウェアの変更時にミスを犯した場合、プログラマーでしか復元できないレンガを簡単に入手できます。 したがって、自分の行動に自信がない場合は、これを行わないでください。



参照資料



Vesta IPカメラのバーンインルートシェルだけでなく

GNU / LinuxおよびRockchip 2918デバイス

RAMディスクのハッキング



All Articles