折磨了本身一週多,供遇到一樣問題的朋友們參考。linux
通常有兩種方法在kali linux下創建軟AP,一是使用airbase-ng,優勢是運行方便,適應網卡的範圍比較廣,好比常見的rtl8187的網卡,侷限是隻能創建OPN和WEP加密的,不支持WPA和WPA2加密。二是經過hostapd,支持OPN、WEP、WPA、WPA2等多種加密方式,但支持的網卡有限。git
以前我手上有rtl8187的網卡,一直把它看成神器,後來發現徹底是被誤導了,不只信號通常,且支持的模式至關有限,最關鍵是不支持hostapd創建WPA加密的AP。用iw list命令能夠看到rtl8187網卡支持的模式:windows
iw list … Supported interface modes: * IBSS * managed * monitor
一陣google後,在某電商那淘了一塊rt3070芯片的,價格便宜、童叟無欺,支持b/g/n(rtl8187僅支持b/g),標配雙6dBi增益天線,iw list看一下,瞬間發現這泥馬纔是真正的神器啊!(強烈推薦!!)bash
Supported interface modes: * IBSS * managed * AP * AP/VLAN * WDS * monitor * mesh point
關鍵就是其中顯示的AP,這說明網卡支持軟AP模式。下面進入正題,我在用kali linux自帶的hostapd創建WPA2加密的AP後,終端鏈接時老是顯示沒法正常握手的錯誤:編輯器
注意紅色標的錯誤信息,主要就是:ide
wlan2: STA xx:xx:xx:xx:xx:xx IEEE 802.11: did not acknowledge authentication response mgmt::assoc_resp cb wlan2: STA xx:xx:xx:xx:xx:xx IEEE 802.11: did not acknowledge association response Data/PS-poll frame from not associated STA xx:xx:xx:xx:xx:xx
接下來,爲了解決這個問題,我在網上搜了無數中文和鳥語網頁,嘗試了各路方法。好比,刪除系統自帶的hostapd,下載源碼直接編譯。不過git clone下載的源碼在我機器上始終沒法編譯經過,直接下載官方網站提供的tar.gz源碼包,雖然能夠編譯經過,但運行出錯。網站
卡在這裏很長時間,不過有個別網站說到也遇到這個問題,並經過修改源代碼後再編譯能夠解決。修改方法是,在源代碼src/ap/ieee802_11.c中將兩處return註釋掉,以下:google
if (!ok) { hostapd_logger(hapd, mgmt->da, HOSTAPD_MODULE_IEEE80211, HOSTAPD_LEVEL_NOTICE, "did not acknowledge authentication response"); //return; } if (!ok) { hostapd_logger(hapd, mgmt->da, HOSTAPD_MODULE_IEEE80211, HOSTAPD_LEVEL_DEBUG, "did not acknowledge association response"); //return; }
但個人機器上源碼編譯經過不了啊!沒辦法,只能直接更改系統自帶的hostapd程序了。用ida打開hostapd,在Strings windows窗口中進行排序後,找到兩處連續的關鍵字符串:加密
雙擊後能夠找到引用字符串的代碼處。第一處是在080D9678處,同時能夠看到,sub_80D95E0的子程序調用了loc_80D9678:3d
繼續跟蹤到sub_80D95E0,以圖形視圖查看,明顯jz是錯誤信息判斷,出錯了就沿綠線,調用上面的出錯誤信息,咱們只須要將jz跳轉nop掉,讓程序沿紅線繼續下去便可。
通過查看,這句jz代碼在文件偏移0009160C處,代碼爲74 6A,只須要將其改成90 90。在kali中,用十六進制編輯器對hostapd進行修改:
hexeditor /usr/sbin/hostapd
將對應偏移處的數值修改完畢:
同理,再將第二處錯誤信息的調用跳轉nop掉,此次是jz loc_80DC618,文件偏移00094426,十六進制數據爲0F 84 EC 01 00 00:
用hexeditor所有改成90:
Ctrl+x 保存推出,再次運行hostapd,手機成功鏈接,顯示connected:
真是一次無比曲折的經歷。從最初想用airbase-ng創建WPA加密的AP到無奈使用hostapd,從使用rtl8187網卡無果再到購買合適的網卡,從編譯代碼不經過再到直接修改可執行文件,折騰了那麼長時間。把經歷寫出來,供有須要的朋友參考,少走彎路!