
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) — ये लेआउट हैं और प्रति ब्लॉब संस्करण भिन्न होते हैं।--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 स्लॉट नहीं है। कर्नेल हेडर, 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 के समान स्थिति)।dmesgccm(aes)) करें ताकि क्वेरी पढ़ें और एक एन्क्रिप्टेड उत्तर उत्सर्जित करें।