- Samsung WB850F DRIMeIII SoC और Wi‑Fi का साथ में इस्तेमाल करने वाला पहला मॉडल था, और फ़र्मवेयर ZIP में शामिल partialImage.o.map की वजह से main SoC फ़र्मवेयर का विश्लेषण और hotspot detection bypass संभव हुआ
WB850F_FW_210086.zipमें 6 partitions वालाWB850-FW-SR-210086.binऔर 3 लाख से अधिक लाइनों का linker dump है, जिससे यह पुष्टि हुई किMain_Imageअसली ARM फ़र्मवेयर है- Ghidra विश्लेषण में string address के अंतर का उपयोग करके
Main_Imageका base address 0xc0004000 ढूंढना और.textfunction names को बदलकर symbols के रूप में import करना मुख्य था - hotspot जाँच फ़ंक्शन
DevHTTPResponseStartHTTP 200 के Yahoo domain cookie या 301/302/307 redirect URL की शुरुआतीyahoo.string के आधार पर AP authentication स्थिति तय करता है - Yahoo के HTTPS पर redirect होने के बाद
yahoo.की स्थिति code की allowed range से बाहर चली गई, औरsamsung-nx-emailservicepatch के बाद WB850F से photo upload सफल हुआ
WB850F फ़र्मवेयर ZIP की संरचना
- Samsung WB850F उन गिने-चुने मॉडलों में से एक है जिनके लिए iLauncher application बंद होने के बाद भी Samsung अब तक फ़र्मवेयर और support files सार्वजनिक रूप से उपलब्ध कराता है
WB850F_FW_210086.zipमें ये फ़ाइलें शामिल हैंGPS_FW/BASEBAND_FW_Flash.mbinGPS_FW/BASEBAND_FW_Ram.mbinGPS_FW/Config.BINGPS_FW/flashBurner.mbinFWUPpartialImage.o.mapWB850-FW-SR-210086.binwb850f_adj.txt
FWUPमें सिर्फupgrade allstring है, जो संभवतः firmware test/automation module के लिए script हैwb850f_adj.txtएक अधिक जटिल script है, जो GPS फ़र्मवेयर upgrade करती है और संबंधित फ़ाइलें हटाती है- GPS से जुड़ी scripts और
GPS_FWfolder इस विश्लेषण के दायरे से बाहर रखे गए हैं
partialImage.o.map: linker dump के रूप में एक नक्शा
partialImage.o.map3 लाख से अधिक लाइनों वाली text file है, जिसमेंpartialImage.oके लिए linker output और linked files का पूरा memory map है.textsection मेंsysInit,archPwrDown,DevHTTPResponseStart,DevHTTPResponseData,DevHTTPResponseEndजैसे function names हैं.datasection मेंsysBus,sysCpu,sysBootLineजैसे data symbols शामिल हैं- यह फ़ाइल फ़र्मवेयर के भीतर code और function names को मिलाने के लिए symbol map की तरह काम आती है
WB850-FW-SR-210086.bin header और partition table
binwalkसेWB850-FW-SR-210086.binदेखने पर HTML, PNG, JPEG headers, VxWorks header और कई Unix paths दिखाई देते हैं, लेकिन कोई स्पष्ट partition या filesystem सामने नहीं आता- पहले 1KB का hex dump करने पर firmware version
210086के बाद0x00 0x06दिखता है, और उसके बादFW_UP/ONBL1.binजैसे filenames दिखाई देते हैं - विश्लेषण से पता चला कि हर record संभवतः 60-byte structure है, जिसमें 32-byte zero-padded string, दो little-endian integers और 20-byte zero-padded partition name होता है
- इन दो integers को क्रमशः length और file offset के रूप में समझा गया
- कुल 6 records होने के कारण
0x00 0x06को firmware version string के अंत या padding byte और 1-byte partition count के रूप में समझा गया -
पुनर्निर्मित partitions
FW_UP/ONBL1.bin- आकार: 196 bytes, offset:
0x0000800, partition name:ONBL1
- आकार: 196 bytes, offset:
FW_UP/ONBL2.bin- आकार: 46KB, offset:
0x00008c4, partition name:ONBL2
- आकार: 46KB, offset:
[WB850]DSC_5KEY_WB850- आकार: 30MB, offset:
0x000bef4, partition name:Main_Image
- आकार: 30MB, offset:
RomFS/SPID.Rom- आकार: 48MB, offset:
0x1d2b32c, partition name:Resource
- आकार: 48MB, offset:
FW_UP/WB850.HEX- आकार: 19KB, offset:
0x4c75f2c, partition name:OIS
- आकार: 19KB, offset:
FW_UP/skin.bin- आकार: 36MB, offset:
0x4c7acb2, partition name:SKIN
- आकार: 36MB, offset:
- partition extraction के लिए DRIMeIII फ़र्मवेयर partition extraction tool लिखा और इस्तेमाल किया गया
code और data partitions का विभाजन
- extraction tool partition names के आधार पर files निकालता है और उनके साथ
.binजोड़ता है - सिर्फ
fileके output से उपयोगिता सीमित रही, जैसेMain_Image.binको गलती से OpenPGP Secret Key समझ लिया गया ONBL1औरONBL2कोMain_Imageके भीतर मौजूद"BootLoader(ONBL1, ONBL2) Update Done"string के आधार पर first-stage और second-stage bootloader माना गयाMain_Imageअसली फ़र्मवेयर है, औरbinwalk -Aइस file में कई ARM function prologues रिपोर्ट करता हैResourceऔरSKINबड़े containers हैं, और संभव है कि ये camera UI skin से संबंधित SoC vendor-provided configuration होंOISfilename के बावजूद वास्तव में HEX नहीं है, और यह किसी dedicated optical image stabilization device का फ़र्मवेयर हो सकता है- विश्लेषण का मुख्य केंद्र
Main_Imageहै
Ghidra में Main_Image को map करना
ONBL1,ONBL2,Main_Imageइन तीनों partitions में वास्तविक ARM code है- सामान्य ARM फ़र्मवेयर address
0x0000000पर reset vector table रखता है, लेकिन तीनों binaries की शुरुआत linear code से होती है, इसलिए इन्हें किसी अभी-अज्ञात address पर remap करना पड़ा - hotspot misdetection का विश्लेषण करने के लिए ये काम ज़रूरी थे
Main_Imageको map करने के लिए सही memory address ढूंढनाpartialImage.o.mapके symbol names को Ghidra में load करना- उस function का विश्लेषण करना जो hotspot login detection को गलत तरीके से trigger करता है
- Ghidra के Defined Strings tab में
"yahoo"खोजने परDevHTTPResponseStart()की debug strings जैसी entries मिलींDevHTTPResponseStart: url=%s, handle=%x, status=%dDevHTTPResponseStart: This is YAHOO check !!!DevHTTPResponseStart: THIS IS GOOGLE/YAHOO/SAMSUNG PAGE!!!! 111301/302/307! cannot find yahoo!
partialImage.o.mapमेंDevHTTPResponseStart0x321a84पर है, और Ghidra ने भी उसी offset पर function पाया- debug string pointer values और actual string offsets के बीच का अंतर
0xc0004000निकला, इसलिएMain_Imageका base address0xc0004000निष्कर्षित किया गया - Ghidra में base address बाद में बदला नहीं जा सकता था, इसलिए binary को project से हटाकर base address सेट करते हुए दोबारा import करना पड़ा
function names import करना और DevHTTPResponseStart का विश्लेषण
- Ghidra की ImportSymbolScript.py text table से bulk में symbols import कर सकती है
- script हर line में symbol name, hexadecimal address, और function होने के लिए
fया label होने के लिएlकी अपेक्षा करती है partialImage.o.mapमें अभी सिर्फ.textsection के functions चाहिए थे, इसलिए इन entries को हटाना पड़ा- खाली पंक्तियाँ
- object file offsets
.textजैसे section labelsL$_prefix वाले labels$prefix वाले local symbols
- addresses में Ghidra base address से मिलाने के लिए
0xc0004000जोड़ा गया - परिवर्तित output
sysInit c0004000 f,archPwrDown c0004094 fजैसे format में बनाया गया और Ghidra के Script Manager से load किया गया - function names आने के बाद कई
DAT_fields को pointers के रूप में सेट करना और debug strings के हिसाब से parameter names बदलना पड़ा, तबDevHTTPResponseStartका decompiled output पढ़ना संभव हुआ
hotspot detection की शर्तें
DevHTTPResponseStartHTTP response status, URL और headers देखकर तय करता है कि Wi‑Fi AP authenticated है या नहीं- HTTP 200 OK response में response headers में Yahoo domain cookie होना authentication success माना जाता है
- जाँची जाने वाली values हैं
domain=.yahoo,Domain=.yahoo,domain=kr.yahoo,Domain=kr.yahoo - शर्त पूरी होने पर
p_request_ongoingको 0 किया जाता है, और अगर browser अभी authenticated नहीं है तोsafnotify_auth_ap(0)call होता है
- जाँची जाने वाली values हैं
- HTTP 301/302/307 redirect में URL के भीतर
yahoo.string की जाँच होती है- अगर
yahoo.नहीं है याurl + 11से आगे है, तो Yahoo न मिलने के रूप में माना जाता है - अगर browser framebuffer चालू नहीं है और authentication भी नहीं हुआ है, तो
safnotify_auth_ap(1)call होता है - अगर
yahoo.शुरुआती हिस्से में है, तोsafnotify_auth_ap(0)के साथ authentication success माना जाता है
- अगर
- negative status interrupted request की तरह
falseलौटाता है - 200 और redirect दोनों में न आने वाले positive status पर browser framebuffer state के आधार पर result बदलता है
TLS के बाद टूटी Yahoo जाँच और bypass
- camera जिस URL को query करता है वह
http://www.yahoo.co.kr/है - सीधे request करने पर server
HTTP/1.1 301 Moved Permanentlyके साथLocation: https://www.yahoo.com/पर redirect करता है https://www.yahoo.com/मेंyahoo.substring position 12 पर है- code यह अपेक्षा करता है कि
yahoo.शुरुआती 11 positions में से किसी एक में हो, इसलिए HTTPS migration के बाद यह जाँच टूट गई - hotspot check पास कराने के लिए DNS record को किसी दूसरे server की ओर मोड़ना होगा, और उस server को ऐसे HTTP redirect या Yahoo domain cookie देनी होगी जो अधिक Yahoo-जैसा दिखे
- samsung-nx-emailservice patch के बाद camera ने वास्तव में connect किया और photos upload कीं
वही bypass इस्तेमाल करने वाले अन्य cameras
- इस विश्लेषण में reverse-engineer किए गए सिर्फ एक function के आधार पर Samsung WB850F Wi‑Fi camera की hotspot detection को समझना और bypass करना सफल रहा
- अंतिम patch छोटा था, लेकिन Samsung engineer द्वारा लागू detection method की वजह से सिर्फ packet tracing से bypass method का अनुमान लगाना मुश्किल था
- क्या ढूंढना है यह पता चलने के बाद MSN.com query करने वाले cameras पर भी वही bypass लागू किया गया
- नतीजतन EX2F, ST200F, WB3xF, WB1100F supported camera list में जोड़े गए
Main_Imageमें 77 हज़ार से अधिक functions हैं, इसलिए digital camera के व्यवहार को और समझने के लिए अभी भी बहुत विश्लेषण बाकी है
1 टिप्पणियां
Hacker News की राय
https://op-co.de/blog/posts/samsung_nx_cryptofail/#index3h3 वाला मुझे ज़्यादा पसंद आया
यह वाकई हैरान करने वाला firmware encryption failure का उदाहरण है
शानदार काम। सोच रहा हूँ कि क्या reverse engineering के तरीके को tutorial के रूप में बनाने का कोई इरादा है
सिर्फ वे हिस्से छोड़े हैं जिन्हें Google पर खोजना आसान है
मुझे बस इतना चाहिए कि कैमरा बटन से dSLR photo खींचूँ और थोड़ी देर बाद वह image Apple Photos में मौजूद हो
लगता है smartphones ने consumer camera market को लगभग खत्म कर दिया, इसलिए demand कम है। एक project idea यह है कि ESP32 को SD card के अंदर ठूंसने का तरीका खोजा जाए
Phone, tablet और website से भी connect कर सकते हैं, लेकिन app या service चाहिए। Camera से सीधे FTP भेजने का documentation: https://gdlp01.c-wss.com/gds/5/0300024975/01/eos5d-mk4-wff-i... page 113. यह link EOS 5D Mark IV (WG) Wi-Fi (Wireless Communication) Function Instruction Manual का है
अफसोस कि ये 10 साल पुराने models हैं और used market में भी दुर्लभ हैं
Wi-Fi या Bluetooth से pair होती है, और चाहें तो iPad से camera को remotely control कर सकते हैं और screen भी देख सकते हैं