破解 ZIP 密碼 – John the Ripper

《破解一組8位的小寫英文+數字密碼,只要 48小時》。講到破解這件事情,我也算很早開始就有在不專業的研究了。最早是要破解 DOS 的遊戲,記得那時常用的工具叫 SoftICE,可以攔解一些斷點和修改程式,印象中好像還真的破解了幾個。後來沒玩遊戲就比較少研究了,到了 Windows / 網路時代。一方面是 Windows 程式比較不好破(應該),再來就是網路上高手如雲,基本上要自已動手的機會很少。工作這麼多年來,好像也只破解過一套工具。

今天要講的則是破解復原壓縮檔的密碼。某天做夢夢到升級到 win10 後,某要錢的輸入法功能怪怪的,又一直找不到破解版。正當想要付錢買的時候,想說換個keyword找找看好了,把關鍵字從「破解」換成「序號」,果然就找到直接放在網路上,但是有加密。

夢醒後,想說這也是個有趣的題目,就上網找了一下如何破解壓縮檔加密。最後找到了一套 John the Ripper,並且實驗成功破解 ZIP 檔。但大家也不用過度樂觀(或悲觀),僅管現代電腦速度飛快,但要破解密碼還是需要大量的時間,會被破解的密碼,通常都是太短或太簡單的。

ZIP 破解速度

這邊講的ZIP加密法是 ZIPCrypto Deflate,這是ZIP比較通用的加密方法,也是比較好破解的。另外新的 AES256,可能會很難破,還沒研究過。所謂的很難破,是一秒可以試的密碼個數會變少,直接影響暴力法所需的時間。本篇講的是利用暴利法破解,另外用字典法也可以有效提高破解機的機會,或利用GPU加速破解

我在一台 6C12T 的 Xeon 做測試,以暴力法破解,一秒約可試 1600萬組密碼。感覺還多的, 但密碼的複雜度決定了破解的難度。以一組8個字密碼來看,下面分析一下密碼組合與破解的時間的關係:

  1. 全部都是數字:一共有 10^8 = 1億種組合, 7秒會被破解
  2. 全部小寫英文:一共有 26^8 = 2100億種組合, 3.6小時會被破解
  3. 小寫英文+數字:36^8 = 2兆8000億種組合, 48小時會被破解
  4. 大小寫英文+數字:62^8 = 218兆組種合,157天會被破解
  5. 大小寫英文+數字+符號(10種) = 722兆組種合,522天會被破解

從上面的速度來看,大概只有最複雜的情況勉強可以覺得有一絲絲安全。與其用這麼複雜的密碼,其實最好的方法是加長長度,以 case 3, 小寫英文+數字,這樣還不算太難記。12位的密碼要花  9390 年才有辦法破解。可見密碼的長度效果還是遠遠勝過複雜度,1234567890a0這樣的一組密碼,暴力法可能就一年都解不出來了。

2019/1/3 更新 – AES 與 ZIPCrypto 識別與速度

AES256 解密資訊

ZIPCrypto 解密資訊

上面的兩張圖分別是 AES 與 ZIPCrypto 的破解資訊。有需要破解的朋友,可以用這個訊息來判別破解的難易度。

  • AES: 可以看到有個 PBKDF2 的字,每秒嘗試次數 8500 個密碼
  • ZIPCrypto: 看到寫個 PKZIP 的,每秒嘗試次數 590000 個密碼

可以看到速度相差非常的多,差距在100倍以上。不過時間是破解最好的朋友,破解AES連續擺上個1天可以嘗試 8500*86400 = 7億3千萬組密碼,10天=73億組。如果真的有非常重要的資料,還是可以試試看,至少有點機會。

John the Ripper 實際操作

Linux

講了這麼多理論,來實際用一下吧。使用 Linux 的朋友,可以直接抓 John the Ripple  的原始碼下來編譯。會用到 libssl 的套件,記得用 apt 裝一下。進 src 目錄跑 ./configure;make, 最後編譯出來的檔案就會在上層的 run 目錄裡了。

Windows

Windows 上的朋友可以直接抓這個 連結 ,或直接去 官網 抓。記得抓 Jumbo community-enhanced 的版本,裡面附的工具才會齊。

這邊我會建議用 Linux 來執行,因為 Windows 的版本基本上是用Cygwin模擬Linux 系統,速度大概只有Linux 的 1/3。

解壓縮/編譯完後,主要的工具都在 run 目錄內。

Windows 特制版

為了讓使用 Windows 的朋友更方便,我打包了一版簡化的版本讓讀者更容易使用。這版是基於 1.80j1 的社群加強 combo 版,另外我自己寫了兩個批次檔來簡化這些步驟。展示的影片如下:

本來檔案是直接讓網友們下載,但礙於某些因素,不方便再公開下載。若有需要請來信告知,我會將檔案連結寄給你。

 

影片

流程

假設有個壓縮檔名叫 test.zip,將它也放在 run 目錄下。首先我們先用 zip2john 來取出它的密碼的Hash值,並把它存成檔案 test.zip.hash。裡面的訊息其實包含 Hash 值,跟檔案的位置,所以接下來的命令直接對這個檔案操作就好了。過程中按任意鍵,可以看速度/進度。最後如果有發現密碼,再加上 “–show” 就可以顯示出密碼了。當然例子中是比較好解的,對於複雜的密碼,解到天荒地老也是有可能的。他有個參數 “–session” 和 “–restore”  可以儲存/恢復進度,需要的人可以試試。

 

 

行 1 : 取得 ZIP 密碼的 HASH 值, 並存入 test.zip.hash
行 3:指定使用 test.zip.hash 為破解資料,進行破解。此時按任意鍵會顯示速度,可以看到他的速度是慢慢增加,可能是使用了更多的CPU核心。
行 18:破解完成
行 19:破解完成後不會立即顯示密碼,需加上 “–show” 來顯示密碼。
行 20:密碼破解成功。

可以看到一共只花了34秒,可見簡單的數字+小寫英文的密碼有多弱,直接打連續的數字也會被加速破解!

 

Latest Comments

  1. ryan 2019-02-21
    • 蔡可彼 2019-02-21
  2. 2019-02-27
    • 蔡可彼 2019-02-27
  3. 2019-03-05
    • 蔡可彼 2019-03-05
  4. Regina 2019-03-13
    • 蔡可彼 2019-03-13
  5. 穎冠 2019-04-01
    • 蔡可彼 2019-04-01
  6. 2019-04-08
  7. 鐵雄 2019-04-22
    • 蔡可彼 2019-04-22
  8. Rager 2019-05-04
    • 蔡可彼 2019-05-05
  9. 2019-05-10
    • 蔡可彼 2019-05-12
  10. jiuweiljp 2019-05-13
    • 蔡可彼 2019-05-13
  11. 阿七 2019-05-28
    • 蔡可彼 2019-05-28
  12. 花君 2019-05-29
    • 蔡可彼 2019-05-29
  13. 漾呈 2019-06-01
    • 蔡可彼 2019-06-01
  14. madd 2019-06-04
    • 蔡可彼 2019-06-05
  15. TOO 2019-06-06
    • 蔡可彼 2019-06-07
  16. wesley 2019-06-08
    • 蔡可彼 2019-06-25
  17. 呱呱 2019-06-20
    • 蔡可彼 2019-06-25
  18. 李鴻麟 2019-06-22
    • 蔡可彼 2019-06-25
  19. LEE 2019-07-03
    • 蔡可彼 2019-07-03
  20. Allen 2019-07-06
    • 蔡可彼 2019-07-23
  21. Jedi Chiang 2019-07-23
    • 蔡可彼 2019-07-23
  22. loey 2019-08-02
    • 蔡可彼 2019-08-03
  23. 林X 2019-08-10
    • 蔡可彼 2019-08-10

Leave a Reply