很久以前有研究過破解 ZIP 的東西,其中一項就是利用 hashcat + GPU 來進行加速。那時的 GPU 還很弱,透過最近買的 NVIDA RTX 4090 ,算 PKZIP (ZipCrypto) 的速度達到了一秒 400億次 (46328.5 MH/s)。比起利用 JtR 的 5000萬次,將近提升了1000倍。
未什麼會突然又研究起這個,當然是接到了一個硬骨頭的單,讓我去啟用 GPU 來研究破解。這個需求是一個硬骨頭的單,不像之前接過的,數分鐘就破解了,真的是有認真的在設定密碼。用 GPU 破解了一整天,還是沒有個下落。
於是我開始研究了一下 hashcat 破解時所用的密碼組合,這邊就做一個紀錄。
密碼字集
理想的密碼字集,就是針對每個字的所有可能性都做嘗試,也就是 ASCII 的 0~255,但這就增加了複雜度。以下就是8到10個字的密碼種類數字,與用 GPU 破解的時間。
- 8碼: 17878103347812890625 (14.5年)
- 9碼: 4558916353692287109375 (3705年)
- 10碼: 1162523670191533212890625 (944883年)
GPU 雖快,但還是比數學差的遠,單純的暴力法還是不行,於是要縮小字集。以一般的密碼都是用 0~9, a~z, A~Z, 還有一些特殊符號所組成,就一共有94個字 (數字10, 英文 52, 符號 32)
- 數字: 0123456789
- 英文: abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ
- 符號: «space»!”#$%&'()*+,-./:;<=>?@[\]^_
{|}~
以這個組合來算的話,8到10位數要破解的時間分別為
- 8碼: 6095689385410816(0.00483年)
- 9碼: 572994802228616704(0.45年)
- 10碼: 53861511409489970176(42年)
看起來就沒這麼多年了,似忽值得一試。
Hashcat 字集定義
hashcat 預定了幾個字集,下面僅列出本文用到的
-
?l = abcdefghijklmnopqrstuvwxyz
-
?u = ABCDEFGHIJKLMNOPQRSTUVWXYZ
- ?d = 0123456789
-
?s = «space»!"#$%&'()*+,-./:;<=>?@[\]^_{|}~
簡單的說,就是英數字與符號。那要讓 hash 利用這些字的所有組合來破解,就用以下的命令來進行
1 |
./hashcat.bin -a 3 -m 17225 a.hash -1 ?l?u?d?s ?1?1?1?1?1?1?1?1?1?1 |
上面的命令首先用 “-1” 定義了其字元為所有的英數字與符號組合,然後以10碼來進行破解。但一般會想要先從短碼的開始進行,所以此時就要加上 –increment 參數來由短至長進行破解
1 |
./hashcat.bin -a 3 -m 17225 a.hash -1 ?l?u?d?s ?1?1?1?1?1?1?1?1?1?1 --increment |
這樣的話,程式𡰔會從1碼~10碼慢慢往前增加,來嘗試破解。
Hashcat 的 Session
忘記之前有沒有提到,就是也可以記錄下本前破解的 session,可以中間中斷再繼
1 2 3 4 5 |
# 將破解的過程存在 mysession 這個檔 ./hashcat.bin -a 3 -m 17225 --session mysession a.hash # 繼續用 mysession 破解 ./hashcat.bin --session mysession --restore |
一些組合
為了快速破解,也嘗試定義了一此自己的字集,但還是沒成功。留下來下次用了,除了13碼的數字比較快。其它幾個用 4090 大約各要40~60min
13位數的數字
1 |
./hashcat.bin -a 3 -m 17225 --session 13igits a.hash ?d?d?d?d?d?d?d?d?d?d?d?d?d --increment |
9碼的小寫英數字
1 |
./hashcat.bin -a 3 -m 17225 --session mysessoin -1 ?l?d a.hash ?1?1?1?1?1?1?1?1?1 --increment |
9碼大寫英數字
1 |
./hashcat.bin -a 3 -m 17225 --session mysessoin -1 ?u?d a.hash ?1?1?1?1?1?1?1?1?1 --increment |
10碼小寫
1 |
./hashcat.bin -a 3 -m 17225 --session mysessoin -1 ?l a.hash ?1?1?1?1?1?1?1?1?1?1 --increment |
10碼大寫
1 |
./hashcat.bin -a 3 -m 17225 --session mysessoin -1 ?u a.hash ?1?1?1?1?1?1?1?1?1?1 --increment |
結語
本文是對 hashcat 的破解語法,進行了一點研究,其實破解還是不成功。關鍵的部份,只要增加密碼長度,幾乎是難以破解了。就算密碼很短,只要使用了不預期的字元 (如中文),依然是困難重重。