Reverse Engineering Firmware Samsung WB850F
(op-co.de)- Samsung WB850F adalah model pertama yang memakai DRIMeIII SoC bersama Wi-Fi, dan berkat partialImage.o.map yang disertakan dalam ZIP firmware, analisis firmware SoC utama serta bypass deteksi hotspot menjadi mungkin
WB850F_FW_210086.zipberisiWB850-FW-SR-210086.bindengan 6 partisi serta dump linker lebih dari 300 ribu baris, sehingga dapat dipastikan bahwaMain_Imageadalah firmware ARM yang sebenarnya- Dalam analisis Ghidra, bagian kuncinya adalah menemukan alamat dasar 0xc0004000 untuk
Main_Imagemenggunakan selisih alamat string, lalu mengonversi nama fungsi.textagar dapat diimpor sebagai simbol - Fungsi penentu hotspot
DevHTTPResponseStartmenentukan apakah AP telah diautentikasi berdasarkan cookie domain Yahoo pada HTTP 200 atau stringyahoo.di awal URL redirect 301/302/307 - Saat Yahoo mulai melakukan redirect ke HTTPS, posisi
yahoo.keluar dari rentang yang diizinkan kode, dan setelah patchsamsung-nx-emailservice, upload foto dari WB850F berhasil
Struktur ZIP firmware WB850F
- Samsung WB850F adalah salah satu dari sedikit model yang, bahkan setelah aplikasi iLauncher dihentikan, masih disediakan firmware dan file dukungan secara publik oleh Samsung
WB850F_FW_210086.zipberisi file-file berikutGPS_FW/BASEBAND_FW_Flash.mbinGPS_FW/BASEBAND_FW_Ram.mbinGPS_FW/Config.BINGPS_FW/flashBurner.mbinFWUPpartialImage.o.mapWB850-FW-SR-210086.binwb850f_adj.txt
FWUPhanya berisi stringupgrade all, yang tampaknya merupakan skrip untuk modul pengujian/otomasi firmwarewb850f_adj.txtadalah skrip yang lebih kompleks untuk meng-upgrade firmware GPS dan menghapus file terkait- Skrip terkait GPS dan folder
GPS_FWdikecualikan dari analisis ini
partialImage.o.map: peta berupa dump linker
partialImage.o.mapadalah file teks lebih dari 300 ribu baris, berisi output linker untukpartialImage.odan peta memori lengkap dari file yang ditautkan- Bagian
.textberisi nama fungsi sepertisysInit,archPwrDown,DevHTTPResponseStart,DevHTTPResponseData,DevHTTPResponseEnd - Bagian
.datamemuat simbol data sepertisysBus,sysCpu,sysBootLine - File ini digunakan sebagai peta simbol untuk mencocokkan kode di dalam firmware dengan nama fungsi
Header dan tabel partisi WB850-FW-SR-210086.bin
- Jika
WB850-FW-SR-210086.bindilihat denganbinwalk, terlihat header HTML, PNG, JPEG, header VxWorks, dan beberapa path Unix, tetapi partisi atau filesystem yang jelas tidak tampak - Hex dump 1KB pertama menunjukkan versi firmware
210086, diikuti0x00 0x06, lalu nama file sepertiFW_UP/ONBL1.bin - Setiap record tampak sebagai struktur 60 byte, dianalisis terdiri dari string 32 byte berpadded nol, dua integer little-endian, dan nama partisi 20 byte berpadded nol
- Dua integer tersebut ditafsirkan masing-masing sebagai panjang dan offset di dalam file
- Karena ada total 6 record,
0x00 0x06ditafsirkan sebagai byte terminator atau padding untuk string versi firmware dan jumlah partisi 1 byte -
Partisi yang direkonstruksi
FW_UP/ONBL1.bin- Ukuran: 196 byte, offset:
0x0000800, nama partisi:ONBL1
- Ukuran: 196 byte, offset:
FW_UP/ONBL2.bin- Ukuran: 46KB, offset:
0x00008c4, nama partisi:ONBL2
- Ukuran: 46KB, offset:
[WB850]DSC_5KEY_WB850- Ukuran: 30MB, offset:
0x000bef4, nama partisi:Main_Image
- Ukuran: 30MB, offset:
RomFS/SPID.Rom- Ukuran: 48MB, offset:
0x1d2b32c, nama partisi:Resource
- Ukuran: 48MB, offset:
FW_UP/WB850.HEX- Ukuran: 19KB, offset:
0x4c75f2c, nama partisi:OIS
- Ukuran: 19KB, offset:
FW_UP/skin.bin- Ukuran: 36MB, offset:
0x4c7acb2, nama partisi:SKIN
- Ukuran: 36MB, offset:
- Untuk mengekstrak partisi, dibuat dan digunakan alat ekstraksi partisi firmware DRIMeIII
Membedakan partisi kode dan data
- Alat ekstraksi mengambil file berdasarkan nama partisi dan menambahkan
.bin - Hasil
filesaja kurang berguna, misalnyaMain_Image.binsalah dikenali sebagai OpenPGP Secret Key ONBL1danONBL2diperkirakan sebagai bootloader tahap 1 dan tahap 2, dilihat dari string"BootLoader(ONBL1, ONBL2) Update Done"di dalamMain_ImageMain_Imageadalah firmware yang sebenarnya, danbinwalk -Amelaporkan banyak prolog fungsi ARM di file iniResourcedanSKINadalah container besar, kemungkinan merupakan konfigurasi yang disediakan produsen SoC terkait skin UI kameraOIS, terlepas dari nama filenya, sebenarnya bukan HEX, dan bisa jadi firmware untuk unit optical image stabilization khusus- Fokus analisis adalah
Main_Image
Memetakan Main_Image di Ghidra
- Tiga partisi
ONBL1,ONBL2, danMain_Imageberisi kode ARM sungguhan - Firmware ARM umum biasanya meletakkan tabel reset vector di alamat
0x0000000, tetapi ketiga binary ini memiliki kode linear di bagian awal, sehingga harus dipetakan ulang ke alamat yang belum diketahui - Untuk menganalisis salah deteksi hotspot, pekerjaan berikut diperlukan
- Menemukan alamat memori yang benar untuk memetakan
Main_Image - Memuat nama simbol dari
partialImage.o.mapke Ghidra - Menganalisis fungsi yang salah memicu keputusan login hotspot
- Menemukan alamat memori yang benar untuk memetakan
- Saat mencari
"yahoo"di tab Defined Strings Ghidra, muncul item yang tampak sebagai string debug dariDevHTTPResponseStart()DevHTTPResponseStart: url=%s, handle=%x, status=%dDevHTTPResponseStart: This is YAHOO check !!!DevHTTPResponseStart: THIS IS GOOGLE/YAHOO/SAMSUNG PAGE!!!! 111301/302/307! cannot find yahoo!
- Di
partialImage.o.map,DevHTTPResponseStartberada pada0x321a84, dan Ghidra juga menemukan fungsi pada offset yang sama - Selisih antara nilai pointer string debug dan offset string sebenarnya cocok dengan
0xc0004000, sehingga alamat dasarMain_Imagedisimpulkan sebagai0xc0004000 - Di Ghidra, alamat dasar tidak bisa diubah setelah impor, sehingga binary harus dihapus dari proyek lalu diimpor kembali dengan alamat dasar tersebut
Mengimpor nama fungsi dan analisis DevHTTPResponseStart
- ImportSymbolScript.py milik Ghidra dapat mengimpor simbol massal dari tabel teks
- Skrip ini mengharapkan setiap baris berisi nama simbol, alamat heksadesimal, dan
funtuk menandai fungsi atauluntuk menandai label - Karena dari
partialImage.o.maphanya fungsi di bagian.textsaat ini yang diperlukan, item berikut harus dikecualikan- Baris kosong
- Offset file objek
- Label section seperti
.text - Label berawalan
L$_ - Simbol lokal berawalan
$
- Untuk menyesuaikan alamat dengan alamat dasar Ghidra,
0xc0004000ditambahkan ke alamat - Hasil konversi dibuat dalam format seperti
sysInit c0004000 f,archPwrDown c0004094 f, lalu dimuat dari Script Manager Ghidra - Setelah nama fungsi masuk, beberapa field
DAT_ditetapkan sebagai pointer, dan nama parameter diubah menyesuaikan string debug, sehingga hasil dekompilasiDevHTTPResponseStartbisa dibaca
Kondisi deteksi hotspot
DevHTTPResponseStartmelihat status respons HTTP, URL, dan header untuk menentukan apakah Wi-Fi AP telah diautentikasi- Pada respons HTTP 200 OK, harus ada cookie domain Yahoo di header respons agar dianggap berhasil autentikasi
- Target pemeriksaan adalah
domain=.yahoo,Domain=.yahoo,domain=kr.yahoo,Domain=kr.yahoo - Jika kondisi terpenuhi,
p_request_ongoingdiubah menjadi 0, dan jika browser belum terautentikasi,safnotify_auth_ap(0)dipanggil
- Target pemeriksaan adalah
- Pada redirect HTTP 301/302/307, string
yahoo.di dalam URL diperiksa- Jika
yahoo.tidak ada atau berada setelahurl + 11, dianggap tidak menemukan Yahoo - Jika framebuffer browser belum aktif dan belum terautentikasi,
safnotify_auth_ap(1)dipanggil - Jika
yahoo.berada di bagian awal, autentikasi dianggap berhasil dengansafnotify_auth_ap(0)
- Jika
- Status negatif mengembalikan
falseseperti request yang dibatalkan - Pada status positif yang bukan 200 maupun redirect, hasil berbeda tergantung status framebuffer browser
Pemeriksaan Yahoo yang rusak setelah TLS dan bypass
- URL yang diminta kamera adalah
http://www.yahoo.co.kr/ - Jika diminta langsung, server merespons
HTTP/1.1 301 Moved PermanentlydenganLocation: https://www.yahoo.com/ - Di
https://www.yahoo.com/, substringyahoo.berada di posisi 12 - Kode mengharuskan
yahoo.berada di salah satu dari 11 posisi pertama, sehingga pemeriksaan ini rusak setelah transisi ke HTTPS - Untuk melewati pemeriksaan hotspot, record DNS harus diarahkan ke server lain, dan server tersebut harus melakukan redirect HTTP ke nama yang lebih menyerupai Yahoo atau menetapkan cookie domain Yahoo
- Setelah patch samsung-nx-emailservice, kamera benar-benar terhubung dan meng-upload foto
Kamera lain yang menerapkan bypass yang sama
- Analisis ini berhasil memahami dan melewati deteksi hotspot kamera Wi-Fi Samsung WB850F berdasarkan satu fungsi yang direkayasa balik
- Patch akhirnya kecil, tetapi karena cara deteksi yang diimplementasikan insinyur Samsung, sulit menebak metode bypass hanya dari pelacakan paket
- Setelah mengetahui apa yang harus dicari, bypass yang sama diterapkan juga pada kamera yang menanyakan MSN.com
- Hasilnya, EX2F, ST200F, WB3xF, dan WB1100F ditambahkan ke daftar kamera yang didukung
Main_Imagememiliki lebih dari 77 ribu fungsi, sehingga masih banyak target analisis untuk lebih memahami cara kerja kamera digital
1 komentar
Komentar Hacker News
Saya lebih menyukai bagian https://op-co.de/blog/posts/samsung_nx_cryptofail/#index3h3
Benar-benar contoh kegagalan enkripsi firmware yang mengejutkan
Pekerjaan yang hebat. Saya penasaran apakah ada rencana untuk membuat tutorial tentang metode reverse engineering ini
Saya hanya melewatkan bagian-bagian yang mudah dicari di Google
Yang saya inginkan hanyalah, saat mengambil foto dSLR dengan tombol kamera, beberapa saat kemudian gambar itu sudah masuk ke Apple Photos
Smartphone tampaknya hampir menghapus pasar kamera konsumen, sehingga permintaannya kurang. Sebagai ide proyek, bisa mencoba mencari cara memasukkan ESP32 ke dalam kartu SD
Bisa juga terhubung ke ponsel, tablet, dan situs web, tetapi membutuhkan aplikasi atau layanan. Dokumen untuk mengirim langsung dari kamera lewat FTP: https://gdlp01.c-wss.com/gds/5/0300024975/01/eos5d-mk4-wff-i... halaman 113. Tautan tersebut adalah EOS 5D Mark IV (WG) Wi-Fi (Wireless Communication) Function Instruction Manual
Sayangnya, modelnya sudah berumur 10 tahun dan jarang juga di pasar barang bekas
Bisa dipasangkan lewat Wi-Fi atau Bluetooth, dan jika mau, Anda bisa mengendalikan kamera dari jarak jauh dengan iPad sekaligus melihat layarnya