Samsung WB850Fファームウェアのリバースエンジニアリング
WB850F_FW_210086.zip - 外部コンテナ
- WB850Fは、SamsungがiLauncherアプリケーションを終了した後も、ファームウェアとサポートファイルを継続して提供している数少ないモデルの1つである。
WB850F_FW_210086.zip アーカイブには複数のファイルが含まれている:
GPS_FW/BASEBAND_FW_Flash.mbin: データ
GPS_FW/BASEBAND_FW_Ram.mbin: データ
GPS_FW/Config.BIN: データ
GPS_FW/flashBurner.mbin: データ
FWUP: ASCIIテキスト、CRLF改行を含む
partialImage.o.map: ASCIIテキスト
WB850-FW-SR-210086.bin: データ
wb850f_adj.txt: ASCIIテキスト、CRLF改行を含む
FWUP ファイルには、ファームウェアのテスト/自動化モジュール向けスクリプトである "upgrade all" という文字列が含まれている。
wb850f_adj.txt ファイルは、GPSファームウェアをアップグレードし、関連ファイルを削除する複雑なスクリプトである。
partialImage.o.map - リンカダンプ
partialImage.o.map は30万行を超えるテキストファイルで、partialImage.o のリンカ出力と完全なメモリマップを含んでいる:
- 例:
output input virtual section section address size file
.text 00000000 01301444 .text 00000000 000001a4 sysALib.o
DevHTTPResponseStart 00321a84 000002a4
DevHTTPResponseData 00321d28 00000100
DevHTTPResponseEnd 00321e28 00000170
- このファイルは、ファームウェア解析に非常に有用な情報を提供する。
WB850-FW-SR-210086.bin - ヘッダー解析
WB850-FW-SR-210086.bin ファイルをbinwalkで解析した結果、ファイルヘッダー(HTML、PNG、JPEGなど)、VxWorksヘッダー、複数のUnixパスなどが見つかったが、パーティションやファイルシステムは見つからなかった。
- 最初の1KBをヘックスダンプした結果:
00000000: 3231 3030 3836 0006 4657 5f55 502f 4f4e 210086..FW_UP/ON
00000010: 424c 312e 6269 6e00 0000 0000 0000 0000 BL1.bin.........
00000020: 0000 0000 0000 0000 c400 0000 0008 0000 ................
00000030: 4f4e 424c 3100 0000 0000 0000 0000 0000 ONBL1...........
00000040: 0000 0000 4657 5f55 502f 4f4e 424c 322e ....FW_UP/ONBL2.
00000050: 6269 6e00 0000 0000 0000 0000 0000 0000 bin.............
- これにより、ファイル名とパーティション名を含むパーティションテーブルを再構成できる:
File name size offset partition name
FW_UP/ONBL1.bin 196 (0xc4) 0x0000800 ONBL1
FW_UP/ONBL2.bin 46 KB (0xb630) 0x00008c4 ONBL2
[WB850]DSC_5KEY_WB850 30 MB (0x1d1f438) 0x000bef4 Main_Image
RomFS/SPID.Rom 48 MB (0x2f4ac00) 0x1d2b32c Resource
FW_UP/WB850.HEX 19 KB (0x4d86) 0x4c75f2c OIS
FW_UP/skin.bin 36 MB (0x22fd048) 0x4c7acb2 SKIN
WB850-FW-SR-210086.bin - コードおよびデータパーティション
- パーティション抽出ツールを使ってパーティションを抽出した結果:
ONBL1.bin: データ
ONBL2.bin: データ
Main_Image.bin: OpenPGP秘密鍵(誤検出)
Resource.bin: MIPSEB-LE MIPS-III ECOFF実行ファイル
OIS.bin: データ
SKIN.bin: データ
ONBL1 と ONBL2 は、ブートローダーの第1段階および第2段階であると推定される。
Main_Image は実際のファームウェアで、多数のARM関数プロローグを含んでいる。
Resource と SKIN は、SoCメーカーが提供したUIスキンである可能性がある。
OIS は、光学式手ぶれ補正装置のファームウェアである可能性がある。
Ghidraにコードをロードする
ONBL1、ONBL2、Main_Image パーティションには実際のARMコードが含まれている。
Main_Image を正しいメモリアドレスにマッピングするため、Ghidraで解析を開始した。
partialImage.o.map から関数名を読み込み、Ghidra上にマッピングした。
DevHTTPResponseStartのリバースエンジニアリング
DevHTTPResponseStart 関数はホットスポット検出を実行する。
- 要約:
- HTTP 200 OK応答では、サーバーは "yahoo.something" または "kr.yahoo.something" ドメインにCookieを設定する必要がある。
- HTTP 301/302/307リダイレクトでは、URLに "yahoo." という文字列が含まれている必要がある。
- ホットスポット検出を回避するには、DNSレコードを別のサーバーに向けるか、HTTPリダイレクトを使ってCookieを設定する必要がある。
要約: 本当の宝物
- この解析により、Samsung WB850F WiFiカメラのホットスポット検出を理解し、回避できるようになった。
- その結果、小さなパッチによってカメラが実際に接続し、写真をアップロードできるようになった。
Main_Image には77,000個を超える関数が含まれており、デジタルカメラの動作をより深く理解するために探究する価値がある。
GN⁺の意見
- 技術的な挑戦と学習機会: この記事はファームウェアのリバースエンジニアリングの実例を提供しており、技術的な挑戦と学習機会を与えてくれる。初級ソフトウェアエンジニアにとって非常に有益である。
- セキュリティとプライバシーへの配慮: ホットスポット検出の回避は、セキュリティとプライバシーの観点で重要な検討事項である。こうした技術を使う際には、常に倫理面を考慮する必要がある。
- Ghidraの使い方: Ghidraのようなツールを使って複雑なファームウェアを解析する方法を学べる。これはリバースエンジニアリングやセキュリティ解析で非常に有用である。
- ファームウェア更新の重要性: ファームウェア更新は、デバイスの機能とセキュリティを維持するうえで重要である。この記事はファームウェア更新の複雑さをよく示している。
- 他のカメラモデルへの適用可能性: この手法は他のSamsung製カメラモデルにも適用できる可能性があり、さまざまなデバイスで類似の問題を解決する助けになる。
1件のコメント
Hacker Newsの意見
Hacker News コメント集
I liked this link more. Absolute astonishing firmware "crypto" fail
Amazing work! Have you thought about doing a tutorial on how to do reverse engineering?
All I want is a dSLR that, when I take a picture on the camera with its button, moments later, the image is in Apple Photos.
[dead]