WIFIpass – Python获取本机保存的所有WIFI密码(附源代码)

于2015-5-1修改了脚本,在 Windows 7 下测试通过。

昨晚临睡前写了一小段python脚本,用于获取PC上保存过 的所有WIFI密码。因为XP和Win7系统保存的位置不相同: XP在注册表,而Win7、Vista等在ProgramData文件夹 ,对XP的支持暂未添加。 简单描述一下这段脚本所做的工作:

1. 获取ProgramData\Microsoft\Wlansvc\Profiles\Interfaces文件夹

WIFI密码经加密后,保存在ProgramData\Microsoft\Wlansvc\Profiles\Interfaces文件夹下,每个SSID对应一个xml文件。直接找到ProgramData文件夹就可以了,显而易见的方式有两种:

  1. Win32 API SHGetFolderPath函数获取
  2. os.environ[‘PROGRAMDATA’]环境变量获取

使用API函数完成更好。

2. 使用CryptUnprotectData函数解密

找到所有xml文件中keyMaterial标签中的内容,调用函数CryptUnprotectData依次解密即可。

3. 获取System权限

这段代码需要SYSTEM权限才能运行成功,这跟我们常用的”管理员身份”还有一些区别。这里我通过psExec创建一个交互式shell完成“权限提升”

WIFIpass

Windows可执行文件(运行成功后会在程序目录下创建一个WIFIpass.txt,包含所有SSID和明文密码)

python源代码

《WIFIpass – Python获取本机保存的所有WIFI密码(附源代码)》上有14条评论

    1. 这个脚本比较老了,我记得当时是在Vista上测试的。 最初发现需要System权限。 不知是不是win7下权限已变更了,没有仔细研究过。 建议去微软网站上查找相关说明。

  1. 博主你好,我在看你的python代码,你的这个python代码只能用在win7上吗?我的是win8.1,我在用管理员权限执行脚本时,提示需要管理员权限,是PsExec.exe exit with error code 2,但应该怎么解决呢?

  2. 高中对计算机的痴迷!记得当时看过你的vb书,更加痴迷!没有你学习好,在一所很烂的大学学的计算机!现在学的还是很差!

  3. 谢啦楼主,我后来是用C++通过更改程序权限为SeDebugPrivilege来使得其能够成功解密出WiFi信息文件,个人感觉这个问题主要难点在于权限获取,加解密那些都是标准函数,还是希望楼主有时间能够把Windows下各种权限讲解下另外看了楼上说的使用netsh命令,只是感觉这种东西还是能弄懂原理最好多谢楼主

  4. 楼主你好,似乎这个脚本只能在存有wifi密码的机器上运行才可以。
    如果有管理员权限的话,在win7/vista 已经可以在相应机器上直接查看wifi密码了。
    keymaterial => 不需任何权限
    脚本 => 需要管理员权限, win32crypt.CryptUnprotectData => 需要Sys权限。

    我想问一下,在其他机器上运行这个脚本,为什么不能解码?win32crypt.CryptUnprotectData 会报错:
    error: (-2146893813, ‘CryptUnprotectData’, ‘Key not valid for use in specified state.’)

    win32crypt.CryptUnprotectData的key是怎么确定的,每个机器有唯一的一个key么?为什么其他机器会说key not valid?

    谢谢!

  5. Fantastic items from you, man. I have keep in mind your stuff
    prior to and you are just too wonderful. I actually like what you have acquired here, really like what you’re stating
    and the best way wherein you say it. You are making it entertaining and you still care for to stay it smart.
    I cant wait to read much more from you. This is actually a wonderful website.

发表回复

您的电子邮箱地址不会被公开。 必填项已用*标注