温馨提示×

温馨提示×

您好,登录后才能下订单哦!

密码登录×
登录注册×
其他方式登录
点击 登录注册 即表示同意《亿速云用户服务条款》

给hostapd打补丁, 解决rt3070网卡建立软AP时无法握手的问题

发布时间:2020-07-03 02:30:51 来源:网络 阅读:3590 作者:tankaiha 栏目:安全技术

   折磨了自己一周多,供遇到同样问题的朋友们参考。

   一般有两种方法在kali linux下建立软AP,一是使用airbase-ng,优点是运行方便,适应网卡的范围比较广,比如常见的rtl8187的网卡,局限是只能建立OPN和WEP加密的,不支持WPA和WPA2加密。二是通过hostapd,支持OPN、WEP、WPA、WPA2等多种加密方式,但支持的网卡有限。

   之前我手上有rtl8187的网卡,一直把它当作神器,后来发现完全是被误导了,不仅信号一般,且支持的模式相当有限,最关键是不支持hostapd建立WPA加密的AP。用iw list命令可以看到rtl8187网卡支持的模式:


iw list
…
Supported interface modes:
     * IBSS
     * managed
     * monitor


   一阵google后,在某电商那淘了一块rt3070芯片的,价格便宜、童叟无欺,支持b/g/n(rtl8187仅支持b/g),标配双6dBi增益天线,iw list看一下,瞬间发现这泥马才是真正的神器啊!(强烈推荐!!)


Supported interface modes:
     * IBSS
     * managed
     * AP
     * AP/VLAN
     * WDS
     * monitor
     * mesh point


   关键就是其中显示的AP,这说明网卡支持软AP模式。下面进入正题,我在用kali linux自带的hostapd建立WPA2加密的AP后,终端连接时总是显示无法正常握手的错误:


给hostapd打补丁, 解决rt3070网卡建立软AP时无法握手的问题


   注意红色标的错误信息,主要就是:


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注释掉,如下:


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窗口中进行排序后,找到两处连续的关键字符串:


给hostapd打补丁, 解决rt3070网卡建立软AP时无法握手的问题


   双击后可以找到引用字符串的代码处。第一处是在080D9678处,同时可以看到,sub_80D95E0的子程序调用了loc_80D9678:


给hostapd打补丁, 解决rt3070网卡建立软AP时无法握手的问题


   继续跟踪到sub_80D95E0,以图形视图查看,明显jz是错误信息判断,出错了就沿绿线,调用上面的出错误信息,我们只需要将jz跳转nop掉,让程序沿红线继续下去即可。


给hostapd打补丁, 解决rt3070网卡建立软AP时无法握手的问题


   经过查看,这句jz代码在文件偏移0009160C处,代码为74 6A,只需要将其改为90 90。在kali中,用十六进制编辑器对hostapd进行修改:


hexeditor /usr/sbin/hostapd


   将对应偏移处的数值修改完毕:


给hostapd打补丁, 解决rt3070网卡建立软AP时无法握手的问题


给hostapd打补丁, 解决rt3070网卡建立软AP时无法握手的问题


   同理,再将第二处错误信息的调用跳转nop掉,这次是jz      loc_80DC618,文件偏移00094426,十六进制数据为0F 84 EC 01 00 00:



给hostapd打补丁, 解决rt3070网卡建立软AP时无法握手的问题


   用hexeditor全部改为90:


给hostapd打补丁, 解决rt3070网卡建立软AP时无法握手的问题


   Ctrl+x 保存推出,再次运行hostapd,手机成功连接,显示connected:


给hostapd打补丁, 解决rt3070网卡建立软AP时无法握手的问题


   真是一次无比曲折的经历。从最初想用airbase-ng建立WPA加密的AP到无奈使用hostapd,从使用rtl8187网卡无果再到购买合适的网卡,从编译代码不通过再到直接修改可执行文件,折腾了那么长时间。把经历写出来,供有需要的朋友参考,少走弯路!

向AI问一下细节

免责声明:本站发布的内容(图片、视频和文字)以原创、转载和分享为主,文章观点不代表本网站立场,如果涉及侵权请联系站长邮箱:is@yisu.com进行举报,并提供相关证据,一经查实,将立刻删除涉嫌侵权内容。

AI