0x00 背景
目前GPU的速度越來越快,使用GPU超強的運算速度進行暴力密碼破解也大大提高了成功率,曾經看到老外用26塊顯卡組成的分布式破解神器讓我羡慕不已。要說目前最好的GPU破解HASH的軟件,非HashCat莫屬了。下面我就為大家具體介紹一下HashCat系列軟件。
0x01 所需硬件及系統平台
HashCat系列軟件在硬件上支持使用CPU、NVIDIA GPU、ATI GPU來進行密碼破解。在操作系統上支持Windows、Linux平台,並且需要安裝官方指定版本的顯卡驅動程序,如果驅動程序版本不對,可能導致程序無法運行。
如果要搭建多GPU破解平台的話,最好是使用Linux系統來運行HashCat系列軟件,因為在windows下,系統最多只能識別4張顯卡。並且,Linux下的VisualCL技術(關於如何搭建VisualCL環境,請參考官方文檔http://hashcat.net/wiki/doku.php?id=vcl_cluster_howto),可以輕松的將幾台機器連接起來,進行分布式破解作業。 在破解速度上,ATI GPU破解速度最快,使用單張HD7970破解MD5可達到9000M/s的速度,其次為NVIDIA顯卡,同等級顯卡GTX690破解速度大約為ATI顯卡的三分之一,速度最慢的是使用CPU進行破解。
0x02 HashCat軟件簡介
HashCat主要分為三個版本:Hashcat、oclHashcat-plus、oclHashcat-lite。這三個版本的主要區別是:HashCat只支持CPU破解。oclHashcat-plus支持使用GPU破解多個HASH,並且支持的算法高達77種。oclHashcat-lite只支持使用GPU對單個HASH進行破解,支持的HASH種類僅有32種,但是對算法進行了優化,可以達到GPU破解的最高速度。如果只有單個密文進行破解的話,推薦使用oclHashCat-lite。
目前最新的軟件版本為HashCat v0.46、oclHashcat-plus v0.15、oclHashcat-lite v0.15。但是經過一段時間的測試,發現有時候版本越高,速度越慢。所以推薦在使用沒有問題的情況下,無需升級到最新版本。根據測試,oclHashcat-lite v0.10的運算速度比v0.15的運算速度快20%,所以單個密文破解還是推薦使用oclHashcat-lite v0.10。
0x03 HashCat軟件使用
HashCat系列軟件擁有十分靈活的破解方式,可以滿足絕大多數的破解需求,下面我就為大家簡單介紹一下。
1.指定HASH類型
在HashCat中--hash-type ?參數可以指定要破解的HASH類型,運行hashcat主程序加上--help參數,在* Generic hash types:中可以看到各種HASH類型的代號,如圖所示: 
不同版本的HashCat所支持的hash類型有所不同,如果沒有指定--hash-type參數,那么程序默認為MD5類型。
2.指定破解模式
在HashCat中--attack-mode ?參數可以可以指定破解模式,軟件一共支持5種破解模式,分別為
0 Straight(字典破解) 1 Combination(組合破解) 3 Brute-force(掩碼暴力破解) 6 Hybrid dict + mask(混合字典+掩碼) 7 Hybrid mask + dict(混合掩碼+字典)
下面為大家介紹兩個最常用的破解方式:字典破解和掩碼暴力破解。
使用字典破解MD5:
oclHashcat-plus64.exe --hash-type 0 --attack-mode 0 {HASH文件} [字典1] [字典2] [字典3]…
如:
oclHashcat-plus64.exe --hash-type 0 --attack-mode 0 d:md5.txt d:dict1.txt d:dict2.txt
字典破解由於受到磁盤和內存速度的影響,速度無法達到GPU的最大運算速度,基本上一個5GB的字典,對於MD5破解來說10分鍾內可以跑完。
使用掩碼暴力破解SHA1:
oclHashcat-plus64.exe --hash-type 100 --attack-mode 3 {HASH文件} [掩碼]
{掩碼的設置}
對於掩碼,這邊需要稍微做一個說明。Hashcat默認的掩碼一共有9種,如圖所示:
?l表示a-z,?u表示A-Z,?d表示0-9,?a表示鍵盤上所有的特殊字符,?s表示鍵盤上所有的可見字符,?h表示8bit 0xc0-0xff的十六進制,?D表示8bit的德語字符,?F表示8bit的法語字符,?R表示8bit的俄語字符。
那么有同學可能會問了,如果我要用掩碼表示小寫+數字怎么辦呢?這就需要用到自定義字符集這個參數了。軟件支持用戶最多定義4組字符集,分別用
--custom-charset1 [chars] --custom-charset2 [chars] --custom-charset3 [chars] --custom-charset4 [chars]
來表示,在掩碼中用?1、?2、?3、?4來表示。
比如說我要設置自定義字符集1為小寫+數字,那么就加上
-- custom-charset1 ?l?d
如果要設置自定義字符集2為abcd1234,那么就加上
--custom-charset2 abcd1234
如果要破解8位的小寫+數字,那么需要設置自定義字符集1為
--custom-charset1 ?l?d
設置掩碼為?1?1?1?1?1?1?1?1。 如果已知密碼的第一位為數字,長度為8位,后幾位為大寫+小寫,那么需要設置自定義字符集1為
--custom-charset1 ?l?u
設置掩碼為?d?1?1?1?1?1?1?1。
{掩碼的長度}
對於已知長度的密碼,可以使用固定長度的掩碼進行破解。比如要破解11位數字,就可以這樣寫掩碼?d?d?d?d?d?d?d?d?d?d?d。
對於想要破解一些未知長度的密碼,希望軟件在一定長度范圍內進行嘗試的,可以使用--increment參數,並且使用--increment-min ?定義最短長度,使用--increment-max ?定義最大長度。比如要嘗試6-8位小寫字母,可以這樣寫
--increment --increment-min 6 --increment-max 8 ?l?l?l?l?l?l?l?l
{舉例}
破解8-11位數字+小寫
oclHashcat-plus64.exe --hash-type 100 --attack-mode 3 --increment --increment-min 8 --increment-max 11 --custom-charset1 ?l?d d:sha1.txt ?1?1?1?1?1?1?1?1?1?1?1
0x04 HashCat參數優化
HashCat本身考慮到系統資源的分配,默認參數下並沒有最大化的來使用硬件資源。如果我們想要讓破解速度最大化,就需要對一些參數進行配置。
1.Workload tuning 負載調優。
該參數支持的值有1,8,40,80,160
--gpu-accel 160
可以讓GPU發揮最大性能。
2.Gpu loops 負載微調
該參數支持的值的范圍是8-1024(有些算法只支持到1000)。
--gpu-loops 1024
可以讓GPU發揮最大性能。
3.Segment size 字典緩存大小
該參數是設置內存緩存的大小,作用是將字典放入內存緩存以加快字典破解速度,默認為32MB,可以根據自身內存情況進行設置,當然是越大越好XD。
--segment-size 512
可以提高大字典破解的速度。
0x05 結束語
本文只是簡單介紹HashCat的一些常見用法,希望能夠讓大家更快的學會HashCat的使用。本人剛接觸Hashcat不久,如果文章有什么缺點或不足也希望大家能夠及時提出,在使用過程當中有什么疑問可以跟帖提問。如果想要更加詳細的了解HashCat,請大家參閱官方文檔:http://hashcat.net/wiki/。