2017年4月21日 星期五

CodeCrack(圖形驗證碼暴力破解工具)使用說明

一、前言
CodeCrackWin是以.NET 2.0為基礎,用C#寫成的,主要的OCR元件為tessdata 2的函式庫。這支程式算是入門級,可能還有很多狀況沒有考慮到,因此誤判率可能不低,能應付的圖形碼也有限,當初開發的目的只是為了測試使用者是否使用弱密碼,但軟體總是要先有初版,如果不符您的需求,請直接移除。
二、安裝CodeCrackWin
CodeCrackWin採綠色軟體模式開發,不必安裝,但需依程式存放的目錄調整組態檔。
(一)下載CodeCrackWin.ZIP,並解壓縮到您想存放的位置(但請勿變更程式目錄內的相對位置)。假設是直接解壓縮在 D:\,所以會看到D:\CodeCrack的目錄,裡頭會有 CodeCrackWin.exe 和 CodeCrackWin.exe.config 兩支檔案及INI與tessdata兩個目錄。
(二)修改CodeCrackWin.exe.config
1.<appSettings>區段的設定
tessedit_char_whitelist:表示進行OCR時只會判斷這些字元,如果圖形碼使用的字元愈多,本程式的辨識就愈低。系統預設只用數字和大寫字母,如果待破解的網站會用到小寫字母,請將此設定的 value 加入小寫字母。如果網站的圖形碼只有數字,則將此參數值設成「0123456789」,可以提高辨識率。
程式中的「 OCR字元」欄位內容與tessedit_char_whitelist 的功用相同,只是「OCR字元」針對特定的網站(寫在設定檔中),程式執行時,如果「OCR字元」有值,則優先使用「OCR字元」內容,如果「OCR字元」是空的,則使用tessedit_char_whitelist 的內容。
timer_tick:設定嘗試破解的時間間隔,單位是毫秒,如上圖設為 3000,表示每三秒鐘才嘗試一組帳密。
2. <userSettings> <TesseractOCR.Properties.Settings> 區段
TessdataPath的<value>是指定ORC判斷的範本,如果設錯了,程式執行時會卡住,它的路徑一定要指定程式安裝位置下的tessdata目錄,以本例應該是D:\CodeCrack\tessdata。  (上圖是我的測試環境,和這一段的描述的路徑不同)
三、第一次執行
要執行此程式,只要雙擊「CodeCrackWin.exe」即可,起始畫面如下圖(預先填入一些值,只是為了讓使用者明白該欄位的格式),是有點複雜,而且使用上也需要一點竅門,下列是程式各欄位說明:
1.網址:待破解的網址,通常就是系統的登入頁面,必須指定完整的網址。
2.帳號欄位:網頁的上用來填「帳號」的欄位之 name屬性內容。例如該欄位的HTML是<input type="text" name="account" id="account-id">,則這一欄就是填「account
3.密碼欄位:網頁的上用來填「密碼」的欄位之 name屬性內容。例如該欄位的HTML是<input type="password" name="pwd" id="pwd-id">,則這一欄就是填「pwd
4.圖形碼欄位:網頁的上用來填「圖形驗證碼」的欄位name屬性內容。
5.圖形元素的TagName:由於應用程式有不同方式可提供圖形,這裡必須要知道它是用img 或 input,例如它的html碼是<IMG id=loginImg src=\"../VerifyCodeServlet?t=login\">,這一欄就填「img」。又如果是用<input name="ImageButton1" src="ValidateCode.aspx"> ,就填「input」。類型一定要正確,否則會找不到圖形。
6.圖形碼來源:用來判斷驗證碼圖形元素的關鍵字,程式是靠這段文字判斷哪一個元數是圖形,以第5.的說明為例,圖型元素的HTML碼是<IMG id=loginImg src="../VerifyCodeServlet?t=login">,則這一欄可以填「VerifyCodeServlet?t=login」或「VerifyCodeServlet?」
7.帳號檔:如果有勾選「15.單一帳號」,則此欄位的內容就是單筆帳號,例如只想嘗試破解admin的密碼,就可以填「admin」並將「15.單一帳號」打勾。如果「15.單一帳號」沒有打勾,這一欄的內容就是帳號字典檔的路徑,例如「INI\user.txt」或「C:\dircionary\account.lst」。
8.密碼檔:如果有勾選「16.單一密碼」,則此欄位的內容就是單筆密碼,例如想測試哪些使用者是使用「12345678a」的密碼,這一欄就可以填「12345678a」並將「16.單一密碼」打勾。如果「16.單一密碼」沒有打勾,這一欄的內容就是密碼字典檔的路徑,例如「INI\password.txt」或「C:\dircionary\password.lst」。
9.帳號密碼嘗試順序->帳號先行:帳統預設是先選一組帳號,然後測試所有密碼後,再選下一組帳號,這種破解方式很可能讓使用者的帳號被鎖定(DoS攻擊的一種)。有些系統會每隔一段時間(如30分鐘)會自動解鎖,這時就可以選用密碼先行的策略,選一組密碼,嘗試所有帳號之後,再選下一組密碼,讓每組帳號被測試的間隔拉長。
10.提交鈕的識別:用參考「6.圖形碼來源」,就是提供一段文字,讓程式可以找出哪個元素是登入的提交鈕。
11.轉址識別:如果驗證時,會透過轉址方式再提交者,這裡是判斷轉址的頁面之文字
12.「test」鈕:當妥好各個欄位後,可用「test」鈕試跑一筆,它真的只會跑一筆而已,用途就是測試欄位填的恰不恰當。
13.開始嘗試:當按下此鈕,程式就會開始嘗試猜解,而且按鈕文字會改成「停止嘗試」,隨時可按「停止嘗試」中止此次的猜解作業(本程式沒有「暫停」功能
14.載入帳號:如果「15.單一帳號」沒有勾選,可以利用「載入帳號」鈕選擇字典檔並載入程試的帳號清單中。載入的筆數會出現在此按鈕文字的右方,例如載入5筆帳號,則按鈕文字會由「載入帳號」變成「載入帳號(5)」。
15.單一帳號:如果勾選此項目,則「7.帳號檔」欄位的內容就是單一組帳號,而不是字典檔的路徑。
16.載入密碼:如果「17.單一密碼」沒有勾選,可以利用「載入密碼」鈕選擇字典檔並載入程試的密碼清單中。載入的筆數會出現在此按鈕文字的右方,例如載入8筆密碼,則按鈕文字會由「載入密碼」變成「載入帳號(8)」。
17.單一密碼:如果勾選此項目,則「8.密碼檔」欄位的內容就是單一組密碼,而不是字典檔的路徑。
18.登入錯誤的訊息:當登入失敗時,伺服回應的判斷訊息,程式是利用此文字判斷是否登入成功。
19.驗證碼錯誤的訊息:當驗證碼錯誤時,伺服回應的判斷訊息,程式是利用此文字判斷填入的驗證碼是否正確。
20.帳號鎖定之訊息:當帳號被鎖定時,伺服回應的判斷訊息,程式是利用此文字判斷帳號是否已被鎖住,鎖住的帳號就不會再嘗試。
21.噪音線灰階下限、22.噪音線灰階上線、23.降階值:這三個值會影響程式過濾圖形的噪音線及噪音點的能力,噪音線灰階的低愈低,表示顏色愈黑,0是全黑,反之,愈高就是愈白,255是全白,如果能清楚設定噪音線灰階上下限,程式過濾噪音的能力就愈好,ORC的正確率就愈高。圖形會先轉成256階的灰階形式,以利OCR處理,降階值就是將256再降成更好階,例如填「8」,就是將每8階縮成1階,所以256階就會變成32階,如果圖形的文字和背景、噪音的色差很大,可以調高此值,如果色差很小,則此值就要調小一點。這三個值沒有一定的基準,針對不同的站臺,一定有不同的最佳值,必須自己嘗試。
24.密碼嘗試次數:密碼嘗試次數,最少1,若設9999即表示嘗試密碼清單中的所有值,這一項是為了防止帳號被鎖而設計的,如果已知密碼錯5次會被鎖定,則可以將次數設為3,讓帳號不會被鎖,只要過幾天,使用者正確登入,則密碼錯誤的計算就會歸零。
25.放大倍數:進行OCR時,將圖形放大率有時可以提高成功率,此值為實數,可以設 1到2之間的數。
26.旋轉角度:有些圖形內的文字會以鈄體方式呈現,可以利用旋轉角度(-90~90之間)將它變成水平,以移OCR處理,當然對於隨機傾鈄的文字就無能為力了。
27.查看說明:(實作中)
28.載入設定檔、29.存成設定檔:因為本程式有許多設定欄位,如果每次執行都要逐一設定鐵定瘋掉,所以可將目前運作良好的值存成設定檔,下次只要用「28.載入設定檔」就可以取回設定值。當然也可以建一個公版,修改後再另「29.存成設定檔
30.(瀏覽視窗):每一回的瀏覽畫面會顯示在此視窗。
31.(破解的帳密):如果有猜解到的帳密會顯示在這裡,並會記錄到yyyymmddRun.log(yyyymmdd是年月日)的日誌中。
32.(保留)
33.(目前嘗試的帳密):為了讓使用者目前處理進度,這裡會顯示目前嘗試的帳號及密碼。
34.圖形座標微調:有些驗證碼圖形會加外框(指圖本身),造成程式誤判背景顏色,這種情況可以利用應標微調方式避開外框,以下圖而言,紅色外框轉成灰階後會近似黑色,但實際背景應該是白色,由於框的寬度是2pix,因此可將 x,y 各設為2。x是水平座標,也就控制圖形左邊的垂直框線,y是垂直座標,也就控制圖形上邊的水平框線。
35.未使用圖形驗證碼:如此網站不使用圖形驗證碼時,可勾選此項,則進行暴力猜解時就不會處理圖形欄位,其實要應付沒有圖形驗證碼的登入頁面,hydra會是更好的選擇。
36.(處理後的驗證碼圖形):這裡會顯示圖形驗證碼經程式轉換後,最終交給OCR處理的圖形,使用者可以此預覽圖,做為各項參數調整的參考。
37.(OCR的結果):這裡會顯示目前圖形驗證碼經OCR轉出的字元
四、載入帳號及密碼字典檔
為了進行暴力猜解,您應該會預設帳號及密碼的字典檔,字典檔必須一組資料一行,程式目前不支援在一個檔案中同時以帳號、密碼組合的配對形式,帳號及密碼必須是各自獨立的檔案。下面是帳號字典檔的範例。
五、存成設定檔及載入設定檔
由於猜解圖形驗證碼和猜解一般只有帳號密碼的困難度有很大差異,必須調整最佳參數才能得到理想效果,調整參數相當累人,當然不希望每回測試時都要重填一次,因此可將目前的設定結果儲存起來(見「29.存成設定檔」),下次執行同一網站的猜解時就可用「28.載入設定檔」載入之前儲存的參數。
設定檔本身就是一支文字檔,也可以手動編輯,有關設定檔的說明請參考CodeCrack的設定檔。
六、測試用範例網頁
任隨猜解別人網站的帳密是違法行為,為了測試此工具,筆者做了一組小小的網頁(CodeCrackDemo),您可以將它架在IIS上,做為測試之用,如果執行無誤,應該會發現兩組帳密:admin12345678ausermyPass1234
七、取得原始碼
這支程式真的還不夠完美,它沒有多執行緒,還以一次只能處理一組密碼。圖形碼的判斷能力不夠好,所以ORC成功率不高。筆者只是拋磚引玉,囿於筆者的程式能力,無法提出完美的作品,希望有人可以開發出更棒的圖形驗證碼的猜解工具,如果您對本工具有興趣,可以從「圖形驗證碼(CAPTCHA)的暴力帳號、密碼破解工具」下載,本專案是以VS2008開發,以.net2.0為框架,目的就是希望連最早的XP環境都能執行。

沒有留言:

張貼留言