
2014 मैकबुक प्रो में वाईफाई चिप के लिए wpa3 कार्यक्षमता
wl ब्लॉब)Apple/Broadcom ने BCM4360 (14e4:43a0) को WPA3 कभी नहीं दिया। इसका एकमात्र Linux ड्राइवर बंद broadcom-sta (wl) ब्लॉब है; brcmfmac इसे चला नहीं सकता। यह उस बंद ब्लॉब में WPA3-SAE + पूर्ण 802.11w PMF जोड़ता है — पूरी तरह से होस्ट सॉफ्टवेयर से, कोई फर्मवेयर स्रोत नहीं।
हवा पर सिद्ध किया गया WPA3-मात्र, MFP-आवश्यक AP के विरुद्ध: SAE auth → assoc → 4-way → CCMP डेटा, स्थिर, और deauth-flood और SA-Query teardown हमलों के प्रति प्रतिरोधी।
ब्लॉब एक गैर-स्ट्रिप्ड, स्थानांतरित करने योग्य ELF .o है (अंतिम फर्मवेयर इमेज नहीं) — यही पूरा कारण है कि यह काम करता है। हम इसे फिर से नहीं लिखते; हम इसके विरुद्ध नया C लिंक करते हैं और कुछ कॉल साइट्स को रीडायरेक्ट करते हैं:
wpa_supplicant SAE + 4-way चलाता है (ब्लॉब का क्रिप्टो केवल SHA-1 है; SAE को SHA-256 चाहिए)।wl_cfg80211_hybrid.c, wl_linux.c) auth/assoc/keys को ब्रिज करता है।auth iovar को अन-क्लैम्प करें ताकि यह SAE (alg=3) स्वीकार करे।objcopy --globalize-symbol — लगभग 10 ब्लॉब-आंतरिक फ़ंक्शन को हमारे C से कॉल करने योग्य बनाएं।wl_reloc.py — .rela.text को फिर से लिखें ताकि ब्लॉब के wlc_recv/wlc_sendauth/wlc_authresp_client पर कॉल हमारे __wrap_* हुक में जाएं।यह हवा पर SAE फ्रेम चलाने, assoc-req में wpa_supplicant का RSN IE इंजेक्ट करने, यूजरस्पेस-व्युत्पन्न कुंजियाँ स्थापित करने, और सॉफ्टवेयर PMF जोड़ने (असुरक्षित deauth छोड़ें; SW-CCMP SA-Queries का उत्तर दे) के लिए पर्याप्त है।
उपकरण: Ghidra (हेडलेस), nm, objdump, strings, एक मॉनिटर-मोड स्निफर (iw + tcpdump)।
# 1. The blob ships inside broadcom-sta and is NOT stripped (~4091 syms) -> Ghidra recovers names.
GHIDRA=/opt/ghidra
$GHIDRA/support/analyzeHeadless ./proj wl -import wlc_hybrid.o_amd64 \
-analysisTimeoutPerFile 3600 # auto-analyze, then decompile in the GUI
# 2. Triage what's present BEFORE picking a strategy (absent crypto must move host-side):
nm wlc_hybrid.o_amd64 | grep -iE 'sha256|sae|bip|igtk|mmie' # -> empty here
nm wlc_hybrid.o_amd64 | grep -iE 'wpa|akm|sup|sendauth|key_insert'
# 3. Verify any offset before you patch it (.text vaddr V == file offset V+0x40 in this blob):
objdump -d --start-address=0x47d40 --stop-address=0x47d60 wlc_hybrid.o_amd64
रणनीति: खुले गोंद (wl_cfg80211_connect, wl_set_auth_type) में cfg80211 एंट्री पॉइंट से शुरू करें और iovars (auth, wpa_auth, wsec) का ब्लॉब में अनुसरण करें। वे जहाँ पहुँचते हैं, उसे डीकंपाइल करें: AKM गेट (bcmwpa_akm2WPAauth), जॉइन/auth FSM (wlc_join_BSS + auth→assoc एडवांसर 0x5b79d पर), RX डिस्पैच (wlc_recv), और PMK/कुंजी पथ (wlc_sup_set_pmk, wlc_key_insert)। objdump से प्रत्येक पते की क्रॉस-चेक करें।
.o है (file, nm). एक स्ट्रिप्ड फर्मवेयर इमेज इस तरह काम नहीं करेगी।set_pmk/कुंजी-इन्सर्ट।build.sh (--add-symbol re_auth_advance=..., वैश्वीकरण सूची) और patches/wl_reloc.py (__wrap_* लक्ष्य) में डालें।wl_linux.c में स्ट्रक्ट ऑफसेट ठीक करें (wlc+0x6a8 txq, bsscfg+0x320 assoc, scb+0x18 bss) — ये लेआउट हैं और प्रति ब्लॉब संस्करण भिन्न होते हैं।dmesg कैप्चर करें (देखें संघर्ष)।--add-symbol पता एक हेक्स अंक से गलत था (0x15b79d बनाम 0x5b79d), जो मध्य-निर्देश पर उतरा → call <garbage> → NX दोष। संकेत है बिल्ड चेतावनी objtool: ... can't find starting instruction; प्रत्येक सिंथेटिक प्रतीक एक वास्तविक फ़ंक्शन प्रारंभ है इसकी पुष्टि करें।dmesg --follow स्ट्रीम करें — यह रीबूट से पहले oops फ्लश करता है।.connect में wpa_supplicant का sme->ie कैप्चर करें और ब्लॉब के assoc-req IE बफ़र (*(bsscfg+0x320)+0x30) को उस पर इंगित करें — यह 4-way के RSN-IE चेक को भी संतुष्ट करता है।-22 — केवल IGTK (BIP, idx 4); HW कुंजी इंजन में कोई BIP स्लॉट नहीं है। IGTK को सॉफ्टवेयर में स्वीकार करें; PTK/GTK ठीक स्थापित होते हैं और डेटा प्रवाहित होता है।ccm(aes)) करें ताकि क्वेरी पढ़ें और एक एन्क्रिप्टेड उत्तर उत्सर्जित करें।कर्नेल हेडर, gcc, binutils, python3 चाहिए। ब्लॉब इस रेपो में नहीं है (स्वामित्व)।
# 1. Get the pristine blob from broadcom-sta 6.30.223.271:
# hybrid-v35_64-nodebug-pcoem-6_30_223_271.tar.gz -> lib/wlc_hybrid.o_amd64
cp /path/to/wlc_hybrid.o_amd64 wl-src/lib/wlc_hybrid.o_amd64.orig
# 2. Build:
./build.sh # -> wl-src/wl.ko (or download it from Releases)
sudo rmmod b43 brcmfmac bcma ssb wl 2>/dev/null # free the card
sudo insmod wl-src/wl.ko # wlan0 appears
NetworkManager इस ड्राइवर के माध्यम से WPA3-SAE चलाता है — बस wifi GUI का उपयोग करें: अपना नेटवर्क चुनें, पासवर्ड दर्ज करें, हो गया। NM इसे सहेजता है और हर बूट पर ऑटो-रीकनेक्ट करता है। CLI समकक्ष:
nmcli con add type wifi ifname wlan0 con-name w ssid "YOUR_SSID"
nmcli con modify w wifi-sec.key-mgmt sae wifi-sec.psk "YOUR_PASS" 802-11-wireless-security.pmf 3
nmcli con up w # NM does SAE + 4-way + DHCP
(स्टैंडअलोन विकल्प: sudo ./examples/connect.sh wlan0 examples/wpa3-sae.conf.example.)
sudo dkms/install.sh
DKMS के साथ ड्राइवर को पंजीकृत करता है (कर्नेल अपग्रेड पर ऑटो-रीबिल्ड), विरोध करने वाले इन-ट्री ड्राइवरों + स्टॉक wl को ब्लैकलिस्ट करता है, और NetworkManager से पहले बूट पर हमारा लोड करता है। फिर wifi GUI से कनेक्ट करें। विवरण और एक DKMS समस्या: dkms/README.md। बजाय एक बार के मैन्युअल रीबिल्ड के लिए, ./build.sh → wl-src/wl.ko चलाएँ।
ड्राइवर डिफ़ॉल्ट रूप से विस्तृत WPA3/PMF डीबग प्रिंट करता है। इसे रनटाइम (या स्थायी रूप से) शांत करें:
echo 0 | sudo tee /sys/module/wl/parameters/re_verbose # this boot
echo 'options wl re_verbose=0' | sudo tee /etc/modprobe.d/wl-quiet.conf # permanent
wlc_hybrid.o_amd64) Broadcom स्वामित्व है — इसे स्वयं broadcom-sta से प्राप्त करें। Releases में wl.ko इसे एम्बेड करता है (डेबियन के broadcom-sta-dkms के समान स्थिति)।