折磨了本身一周多,供遇到一样问题的朋友们参考。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网卡无果再到购买合适的网卡,从编译代码不经过再到直接修改可执行文件,折腾了那么长时间。把经历写出来,供有须要的朋友参考,少走弯路!