一般破解WiFi的工具是WiFI万能钥匙,其原理是通过共享WiFi密码来实现。但是WiFI万能钥匙不是万能的,有许多WiFi密码是没有共享的。那如何破解呢?
一种方法是暴力破解。通过尝试大量的密码进行破解。借助计算机强大的计算能力可以进行尝试。
WPA-PSK破解原理:
用我们字典中的PSK+ssid先生成PMK(此步最耗时,是目前破解的瓶颈所在),然后结合握手包中的客户端MAC,AP的BSSID,A-NONCE,S-NONCE计算PTK,再加上原始的报文数据算出MIC并与AP发送的MIC比较,如果一致,那么该PSK就是密钥。如图所示:
image.png
需要得到的是握手包,握手包含了除PSK以外的所需要的信息,PSK就是预共享密钥(Pre-shared key),也就是WiFi密码。cdlinux下通过工具获取握手包,现在需要解决的是PSK字典的制作,也是包含大量猜测密码的txt文件。首先WiFi密码有什么限制呢?WiFi密码要求,至少8个字符,最多63个字符,字符为可以显示的ASCII字符,一共有95个字符。比如说8位的密码有多少种可能呢?这相当于从95个字符中选8个出来排列,也就是A958=95x94x93x92x91x90x89x88=53856412790400种可能,范围太大了,所以需要通过一些观察判断来减少搜索空间,观察发现多有需要许多人使用手机号码作为WiFi密码,还有就是生日,纯8位数字,当然还有一些常用弱口令。
生日字典,常用弱口令字典网上有现成的,接下就制作手机号码字典,范围限制在地区所有号码,以及纯8位数字字典。这交给Java程序了
地区的所有手机号码
public class GetPhoneNumbers {
static String url="http://www.51hao.cc/city/guangxi/guilin.php";//获取号码段的网页
private static List<List<String>> phone_sections=new ArrayList<>();//号码段
private static List<String> phone_names=new ArrayList<>();//保存号码段的文件名
public static void main(String[] args) {
Document document=null;
try {
document= Jsoup.connect(url).get();
Elements phonesnames_elements=document.select(".nums");//号码段名字所在标签,如130
Elements phonesections_elements=document.select("ul"); //所有的号码段元素,一个ul对一个号码段
//遍历元素,获取所有号码段
for (int i=0;i<phonesnames_elements.size();i++){
phone_names.add(phonesnames_elements.get(i).text());
List<String> li=new ArrayList<>();
for (int j=0;j<phonesections_elements.get(i).children().size();j++){
li.add(phonesections_elements.get(i).child(j).text());
}
phone_sections.add(li);
}
FileWriter fileWriter=null; //保存为字典txt文件
for (int i=0;i<phonesections_elements.size();i++){
fileWriter=new FileWriter(phone_names.get(i)+".txt");
for (int j=0;j<phone_sections.get(i).size();j++){
long phonestart=Long.parseLong(phone_sections.get(i).get(j)+"0000");
long phoneend=Long.parseLong(phone_sections.get(i).get(j)+"9999");
for (long k=phonestart;k<=phoneend;k++){
fileWriter.write(k+"\r\n");
}
}
}
fileWriter.close();
} catch (IOException e) {
e.printStackTrace();
}
}
}
纯8位数字
public class Num {
public static void main(String[] args) {
FileWriter fileWriter=null;
try {
fileWriter=new FileWriter("8位数字.txt");
for (long k=0;k<9999999;k++){
if (String.valueOf(k).length()==1){
fileWriter.write("0000000"+k+"\r\n");
}
else if (String.valueOf(k).length()==2){
fileWriter.write("000000"+k+"\r\n");
}else if (String.valueOf(k).length()==3){
fileWriter.write("00000"+k+"\r\n");
}else if (String.valueOf(k).length()==4){
fileWriter.write("0000"+k+"\r\n");
}else if (String.valueOf(k).length()==5){
fileWriter.write("000"+k+"\r\n");
}else if (String.valueOf(k).length()==6){
fileWriter.write("00"+k+"\r\n");
}else if (String.valueOf(k).length()==7){
fileWriter.write("0"+k+"\r\n");
}
}
for (long i=10000000;i<=99999999;i++){
fileWriter.write(i+"\r\n");
}
fileWriter.close();
} catch (IOException e) {
e.printStackTrace();
}
}
}
结果:
phones
8位数字.png
cdlinux下载抓获握手包,切换到Windows下使用工具EWSA进行跑,先选一个弱口令字典试试先
握手包.png
字典.png
这个字典比较小,不到2秒就跑完了,同时密码也出来了
2.png
passwd.png
如果这个字典没有找到密码,可以添加刚才制作的字典继续跑。并不是所有的WiFi立刻就可以跑出密码来,有些密码设置比较复杂,破解就是碰一下运气了,而使用字典能够增加破解成功的概率。











网友评论