Reverse engineering firmware Samsung WB850F
(op-co.de)- Samsung WB850F là mẫu đầu tiên dùng đồng thời SoC DRIMeIII và Wi‑Fi, và nhờ partialImage.o.map có trong file ZIP firmware nên có thể phân tích firmware của SoC chính và vượt qua cơ chế phát hiện hotspot
WB850F_FW_210086.zipchứaWB850-FW-SR-210086.bingồm 6 phân vùng cùng một bản dump linker hơn 300 nghìn dòng, qua đó xác nhậnMain_Imagechính là firmware ARM thực sự- Trong quá trình phân tích bằng Ghidra, điểm then chốt là tìm địa chỉ base 0xc0004000 của
Main_Imagebằng chênh lệch địa chỉ chuỗi, rồi chuyển tên hàm trong.textthành symbol để import - Hàm xác định hotspot
DevHTTPResponseStartphán đoán trạng thái xác thực AP dựa trên cookie domain Yahoo trong HTTP 200 hoặc chuỗiyahoo.ở đầu URL redirect 301/302/307 - Khi Yahoo chuyển hướng sang HTTPS, vị trí của
yahoo.vượt ra ngoài phạm vi mà mã cho phép; sau khi vásamsung-nx-emailservice, WB850F đã tải ảnh lên thành công
Cấu trúc của file ZIP firmware WB850F
- Samsung WB850F là một trong số ít mẫu máy mà Samsung vẫn công khai firmware và các tệp hỗ trợ ngay cả sau khi ứng dụng iLauncher bị ngừng cung cấp
WB850F_FW_210086.zipchứa các tệp sauGPS_FW/BASEBAND_FW_Flash.mbinGPS_FW/BASEBAND_FW_Ram.mbinGPS_FW/Config.BINGPS_FW/flashBurner.mbinFWUPpartialImage.o.mapWB850-FW-SR-210086.binwb850f_adj.txt
FWUPchỉ chứa chuỗiupgrade all, có vẻ là script cho mô-đun kiểm thử/tự động hóa firmwarewb850f_adj.txtlà một script phức tạp hơn để nâng cấp firmware GPS và xóa các tệp liên quan- Các script liên quan đến GPS và thư mục
GPS_FWkhông nằm trong phạm vi phân tích lần này
partialImage.o.map: bản đồ linker dump
partialImage.o.maplà tệp văn bản hơn 300 nghìn dòng, chứa đầu ra linker chopartialImage.ovà toàn bộ memory map của các tệp được liên kết cùng nhau- Phần
.textchứa tên hàm nhưsysInit,archPwrDown,DevHTTPResponseStart,DevHTTPResponseData,DevHTTPResponseEnd - Phần
.databao gồm các data symbol nhưsysBus,sysCpu,sysBootLine - Tệp này được dùng như bản đồ symbol để khớp mã và tên hàm trong firmware
Header và bảng phân vùng của WB850-FW-SR-210086.bin
- Khi dùng
binwalkvớiWB850-FW-SR-210086.bin, có thể thấy header HTML, PNG, JPEG, VxWorks và nhiều đường dẫn Unix, nhưng không lộ ra phân vùng hay filesystem rõ ràng - Nếu hex dump 1KB đầu tiên, sau phiên bản firmware
210086sẽ xuất hiện0x00 0x06, tiếp theo là tên tệp nhưFW_UP/ONBL1.bin - Mỗi record có vẻ là cấu trúc 60 byte, gồm chuỗi đệm 0 dài 32 byte, hai số nguyên little-endian, và tên phân vùng đệm 0 dài 20 byte
- Hai số nguyên này được diễn giải lần lượt là độ dài và offset trong tệp
- Có tổng cộng 6 record, nên
0x00 0x06được diễn giải là byte kết thúc hoặc byte đệm của chuỗi phiên bản firmware cộng với số lượng phân vùng 1 byte -
Các phân vùng được dựng lại
FW_UP/ONBL1.bin- Kích thước: 196 byte, offset:
0x0000800, tên phân vùng:ONBL1
- Kích thước: 196 byte, offset:
FW_UP/ONBL2.bin- Kích thước: 46KB, offset:
0x00008c4, tên phân vùng:ONBL2
- Kích thước: 46KB, offset:
[WB850]DSC_5KEY_WB850- Kích thước: 30MB, offset:
0x000bef4, tên phân vùng:Main_Image
- Kích thước: 30MB, offset:
RomFS/SPID.Rom- Kích thước: 48MB, offset:
0x1d2b32c, tên phân vùng:Resource
- Kích thước: 48MB, offset:
FW_UP/WB850.HEX- Kích thước: 19KB, offset:
0x4c75f2c, tên phân vùng:OIS
- Kích thước: 19KB, offset:
FW_UP/skin.bin- Kích thước: 36MB, offset:
0x4c7acb2, tên phân vùng:SKIN
- Kích thước: 36MB, offset:
- Việc trích xuất phân vùng được thực hiện bằng công cụ trích xuất phân vùng firmware DRIMeIII
Phân biệt phân vùng mã và dữ liệu
- Công cụ trích xuất lấy tệp dựa trên tên phân vùng và thêm hậu tố
.bin - Chỉ với kết quả từ
filethì tính hữu dụng khá hạn chế, chẳng hạnMain_Image.bincòn bị nhận nhầm là OpenPGP Secret Key ONBL1vàONBL2được suy đoán là bootloader giai đoạn 1 và 2 từ chuỗi"BootLoader(ONBL1, ONBL2) Update Done"bên trongMain_ImageMain_Imagelà firmware thực sự, vàbinwalk -Abáo cáo nhiều ARM function prologue trong tệp nàyResourcevàSKINlà các container lớn, có thể là cấu phần do nhà sản xuất SoC cung cấp liên quan đến skin UI của máy ảnhOISdù có tên tệp như vậy nhưng thực tế không phải HEX, mà có thể là firmware cho bộ ổn định hình ảnh quang học chuyên dụng- Trọng tâm phân tích là
Main_Image
Ánh xạ Main_Image trong Ghidra
- Ba phân vùng
ONBL1,ONBL2,Main_Imageđều chứa mã ARM thực sự - Firmware ARM thông thường đặt bảng reset vector tại địa chỉ
0x0000000, nhưng cả ba binary đều bắt đầu bằng mã tuyến tính, nên cần remap về một địa chỉ khác chưa biết - Để phân tích lỗi nhận diện hotspot, cần thực hiện các việc sau
- Tìm đúng địa chỉ bộ nhớ để ánh xạ
Main_Image - Nạp tên symbol từ
partialImage.o.mapvào Ghidra - Phân tích hàm kích hoạt sai việc đánh giá đăng nhập hotspot
- Tìm đúng địa chỉ bộ nhớ để ánh xạ
- Khi tìm
"yahoo"trong tab Defined Strings của Ghidra, xuất hiện các mục trông như chuỗi debug củaDevHTTPResponseStart()DevHTTPResponseStart: url=%s, handle=%x, status=%dDevHTTPResponseStart: This is YAHOO check !!!DevHTTPResponseStart: THIS IS GOOGLE/YAHOO/SAMSUNG PAGE!!!! 111301/302/307! cannot find yahoo!
- Trong
partialImage.o.map,DevHTTPResponseStartnằm tại0x321a84, và Ghidra cũng tìm thấy hàm ở cùng offset này - Chênh lệch giữa giá trị con trỏ chuỗi debug và offset chuỗi thực tế khớp với
0xc0004000, nên kết luận địa chỉ base củaMain_Imagelà0xc0004000 - Trong Ghidra không thể đổi địa chỉ base sau đó, nên phải xóa binary khỏi project rồi import lại với địa chỉ base đã đặt
Import tên hàm và phân tích DevHTTPResponseStart
- ImportSymbolScript.py của Ghidra có thể import hàng loạt symbol từ bảng văn bản
- Script này mong đợi mỗi dòng có tên symbol, địa chỉ hex, và
fđể chỉ hàm hoặclđể chỉ label - Trong
partialImage.o.map, vì hiện tại chỉ cần các hàm trong phần.text, nên cần loại bỏ các mục sau- Dòng trống
- Offset của object file
- Label của section như
.text - Label có tiền tố
L$_ - Symbol cục bộ có tiền tố
$
- Cần cộng thêm
0xc0004000vào địa chỉ để khớp với địa chỉ base của Ghidra - Kết quả chuyển đổi được tạo dưới dạng như
sysInit c0004000 f,archPwrDown c0004094 frồi nạp trong Script Manager của Ghidra - Sau khi có tên hàm, việc gán nhiều trường
DAT_thành con trỏ và đổi tên tham số theo chuỗi debug giúp đọc được kết quả decompile củaDevHTTPResponseStart
Điều kiện phát hiện hotspot
DevHTTPResponseStartxác định AP Wi‑Fi đã được xác thực hay chưa bằng cách xem trạng thái HTTP response, URL và header- Với phản hồi HTTP 200 OK, header phản hồi phải có cookie domain Yahoo thì mới được coi là xác thực thành công
- Các giá trị được kiểm tra là
domain=.yahoo,Domain=.yahoo,domain=kr.yahoo,Domain=kr.yahoo - Nếu thỏa điều kiện,
p_request_ongoingsẽ được đổi thành 0, và nếu trình duyệt đang ở trạng thái chưa xác thực thì gọisafnotify_auth_ap(0)
- Các giá trị được kiểm tra là
- Với redirect HTTP 301/302/307, mã sẽ kiểm tra chuỗi
yahoo.trong URL- Nếu không có
yahoo.hoặc nó nằm sauurl + 11, hệ thống sẽ coi là không tìm thấy Yahoo - Nếu framebuffer của trình duyệt chưa bật và cũng chưa xác thực, nó sẽ gọi
safnotify_auth_ap(1) - Nếu
yahoo.xuất hiện sớm trong URL, nó sẽ xử lý là xác thực thành công bằngsafnotify_auth_ap(0)
- Nếu không có
- Trạng thái âm trả về
falsenhư một yêu cầu bị hủy - Với trạng thái dương không phải 200 hay redirect, kết quả thay đổi tùy theo trạng thái framebuffer của trình duyệt
Kiểm tra Yahoo bị hỏng sau TLS và cách vượt qua
- URL mà máy ảnh truy vấn là
http://www.yahoo.co.kr/ - Khi gửi yêu cầu trực tiếp, máy chủ trả về
HTTP/1.1 301 Moved PermanentlycùngLocation: https://www.yahoo.com/ - Trong
https://www.yahoo.com/, chuỗi conyahoo.nằm ở vị trí 12 - Mã yêu cầu
yahoo.phải nằm trong 11 vị trí đầu tiên, nên việc kiểm tra này đã bị phá vỡ sau chuyển đổi sang HTTPS - Để vượt qua kiểm tra hotspot, cần trỏ bản ghi DNS sang máy chủ khác, rồi để máy chủ đó trả redirect HTTP với tên trông giống Yahoo hơn hoặc đặt cookie domain Yahoo
- Sau bản vá
samsung-nx-emailservice, máy ảnh thực sự kết nối và tải ảnh lên thành công
Các máy ảnh khác áp dụng cùng cách vượt qua
- Từ việc reverse engineering một hàm này, cuối cùng đã hiểu và vượt qua được cơ chế phát hiện hotspot trên máy ảnh Wi‑Fi Samsung WB850F
- Bản vá cuối cùng khá nhỏ, nhưng do cách phát hiện do kỹ sư Samsung triển khai, rất khó đoán ra phương pháp vượt qua chỉ bằng packet trace
- Sau khi biết cần tìm gì, cùng cách vượt qua đó cũng được áp dụng cho các máy ảnh truy vấn MSN.com
- Kết quả là EX2F, ST200F, WB3xF, WB1100F đã được thêm vào danh sách máy ảnh được hỗ trợ
Main_Imagecó hơn 77 nghìn hàm, nên vẫn còn rất nhiều mục tiêu để tiếp tục phân tích nhằm hiểu rõ hơn hoạt động của máy ảnh số
1 bình luận
Các ý kiến trên Hacker News
Tôi thích bài ở https://op-co.de/blog/posts/samsung_nx_cryptofail/#index3h3 hơn
Đây đúng là một ví dụ đáng kinh ngạc về thất bại trong mã hóa firmware
Công trình tuyệt vời. Tôi tò mò không biết bạn có định biến phương pháp reverse engineering này thành một tutorial không
Tôi chỉ bỏ qua những phần dễ Google thôi
Điều tôi muốn chỉ là khi chụp ảnh dSLR bằng nút trên máy ảnh, một lúc sau ảnh đó xuất hiện trong Apple Photos
Có lẽ nhu cầu không đủ vì smartphone gần như đã xóa sổ thị trường máy ảnh tiêu dùng. Một ý tưởng dự án là thử tìm cách nhét ESP32 vào trong thẻ SD
Cũng có thể kết nối với điện thoại, máy tính bảng và website, nhưng cần ứng dụng hoặc dịch vụ. Tài liệu gửi trực tiếp từ máy ảnh qua FTP: https://gdlp01.c-wss.com/gds/5/0300024975/01/eos5d-mk4-wff-i... trang 113. Liên kết là sách hướng dẫn chức năng Wi-Fi (Wireless Communication) của EOS 5D Mark IV (WG)
Đáng tiếc là chúng là các mẫu đã 10 năm tuổi và cũng hiếm trên thị trường đồ cũ
Có thể ghép đôi qua Wi-Fi hoặc Bluetooth, và nếu muốn còn có thể điều khiển máy ảnh từ xa bằng iPad và xem màn hình