
وظيفة wpa3 لرقاقة wifi في macbook pro 2014
wl المغلقة)لم تقدم Apple/Broadcom مطلقًا BCM4360 (14e4:43a0) مع دعم WPA3. برنامج التشغيل الوحيد له على لينكس هو الكتلة المغلقة broadcom-sta (wl)؛ لا يمكن لـ brcmfmac تشغيله. يضيف هذا العمل WPA3-SAE + دعم كامل لـ 802.11w PMF إلى تلك الكتلة المغلقة – بالكامل من برنامج المضيف، بدون مصدر البرامج الثابتة (firmware).
تم اختباره على الهواء مقابل نقطة وصول تعمل بـ WPA3 فقط وتتطلب MFP: مصادقة SAE → ارتباط → 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 iovar ليقبل SAE (alg=3).objcopy --globalize-symbol – جعل حوالي 10 دوال داخلية في الكتلة قابلة للاستدعاء من كود C الخاص بنا.wl_reloc.py – إعادة كتابة .rela.text بحيث تقع استدعاءات الكتلة إلى wlc_recv/wlc_sendauth/wlc_authresp_client في خطافات __wrap_* الخاصة بنا.هذا كافٍ لدفع إطارات SAE عبر الهواء، وحقن RSN IE الخاص بـ wpa_supplicant في طلب الارتباط، وتثبيت مفاتيح مشتقة من مساحة المستخدم، وإضافة PMF برمجي (إسقاط deauth غير المحمي؛ SW-CCMP للرد على SA-Queries).
الأدوات: Ghidra (بدون واجهة رسومية)، nm، objdump، strings، جهاز استشعار في وضع المراقبة (iw + tcpdump).
# 1. يتم شحن الكتلة داخل broadcom-sta وهي غير مجردة (~4091 رمزاً) -> Ghidra يستعيد الأسماء.
GHIDRA=/opt/ghidra
$GHIDRA/support/analyzeHeadless ./proj wl -import wlc_hybrid.o_amd64 \
-analysisTimeoutPerFile 3600 # تحليل تلقائي، ثم تفكيك في واجهة المستخدم الرسومية
# 2. تصنيف ما هو موجود قبل اختيار إستراتيجية (التشفير الغائب يجب نقله إلى جانب المضيف):
nm wlc_hybrid.o_amd64 | grep -iE 'sha256|sae|bip|igtk|mmie' # -> فارغ هنا
nm wlc_hybrid.o_amd64 | grep -iE 'wpa|akm|sup|sendauth|key_insert'
# 3. تحقق من أي إزاحة قبل تصحيحها (.text vaddr V == إزاحة الملف V+0x40 في هذه الكتلة):
objdump -d --start-address=0x47d40 --stop-address=0x47d60 wlc_hybrid.o_amd64
الإستراتيجية: ابدأ من نقاط دخول cfg80211 في الغلاف المفتوح (wl_cfg80211_connect، wl_set_auth_type) واتبع iovars (auth، wpa_auth، wsec) داخل الكتلة. فك ما تصل إليه: بوابة AKM (bcmwpa_akm2WPAauth)، آلة الحالة للانضمام/المصادقة (wlc_join_BSS + متقدم المصادقة→الارتباط عند 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=...، قائمة globalize) وpatches/wl_reloc.py (أهداف __wrap_*).wl_linux.c (wlc+0x6a8 txq، bsscfg+0x320 assoc، scb+0x18 bss) – هذه تخطيط وتختلف حسب إصدار الكتلة.--add-symbol غير صحيح برقم سداسي عشري واحد (0x15b79d مقابل 0x5b79d)، مما وضعه في منتصف تعليمة → call <قمامة> → خطأ NX.objtool: ... can't find starting instruction؛ تحقق من أن كل رمز اصطناعي هو بداية دالة حقيقية.dmesg --follow عبر SSH إلى جهاز ثانٍ – يفرغ oops قبل إعادة التشغيل.sme->ie الخاص بـ wpa_supplicant في .connect ووجه مخزن IE الخاص بطلب الارتباط للكتلة (*(bsscfg+0x320)+0x30) إليه – يلبي أيضًا فحص RSN-IE في 4-way.-22 – فقط IGTK (BIP، idx 4)؛ محرك المفاتيح في العتاد ليس به فتحة BIP.
يتطلب رؤوس النواة، gcc، binutils، python3. الكتلة ليست في هذا المستودع (ملكية خاصة).
# 1. احصل على الكتلة الأصلية من 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.sh # -> wl-src/wl.ko (أو قم بتنزيله من Releases)
sudo rmmod b43 brcmfmac bcma ssb wl 2>/dev/null # تحرير البطاقة
sudo insmod wl-src/wl.ko # تظهر wlan0
يدير NetworkManager WPA3-SAE عبر هذا المشغل – فقط استخدم واجهة wifi الرسومية: اختر شبكتك، أدخل كلمة المرور، انتهى. يحفظها NM ويعيد الاتصال تلقائيًا بعد كل إقلاع. المعادل عبر سطر الأوامر:
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 بـ SAE + 4-way + DHCP
(بديل مستقل: sudo ./examples/connect.sh wlan0 examples/wpa3-sae.conf.example.)
sudo dkms/install.sh
يسجل المشغل مع DKMS (يعيد البناء تلقائيًا عند ترقية النواة)، ويقوم بإدراج المشغلات المتضاربة المدمجة في النواة + wl الأصلي في القائمة السوداء، ويحمل مشغلنا عند الإقلاع قبل NetworkManager. ثم اتصل من واجهة wifi الرسومية. التفاصيل وملاحظة واحدة عن DKMS: dkms/README.md. لإعادة بناء يدوية مرة واحدة بدلاً من ذلك، قم بتشغيل ./build.sh ← wl-src/wl.ko.
يقوم المشغل بطباعة تصحيح WPA3/PMF المطول افتراضيًا. يمكن إسكاته في وقت التشغيل (أو بشكل دائم):
echo 0 | sudo tee /sys/module/wl/parameters/re_verbose # هذا الإقلاع
echo 'options wl re_verbose=0' | sudo tee /etc/modprobe.d/wl-quiet.conf # دائم
wlc_hybrid.o_amd64) هي ملكية Broadcom – احصل عليها من broadcom-sta بنفسك. ملف wl.ko في Releases يضمها (نفس وضع broadcom-sta-dkms في Debian).dmesgccm(aes)) لقراءة الاستعلام وإصدار رد مشفر.