前言
- 本文轉自舊站 medium
- 這份是以前跟著 Violent Python 實作的一點紀錄之一。
- 專業工具可參考:教你做壞ㄕ…教你測試系統基本安全 – 基本滲透 Basic Penetration。
如果你手上有一份有密碼保護著的 zip 檔,但不好說它是哪裡來的 (?),而你又很好奇裡面的內容,能不能寫支程式跑整晚幫你猜猜看密碼呢?
我們今天就是要來做這件事。
猜到密碼是 ns 了!
依照習俗,首先先記錄開發環境資訊:
<meta charset="utf-8"># Version: python 3.6
# OS: Windows 10
# IDE: PyCharm
# Source Code on: GitHubGist
Steps
import
modules- zip 檔案存取與解碼函數
- 引用密碼表、或自行排列組合
- Multithreading 跑起來
Step 1 : import modules
-
[line 2]:
zipfile : 就是用來存取 zip 檔與執行密碼測試的 module。 -
[line 3]:
threading : 多線程,不解釋。 -
[line 4]:
string : 製作[A-Za-z0–9]
的字串或陣列供密碼排列之用;今天才在這裡發現要製作一個包含全字母或全 ASCII 的字串可以用這個 module 達到…整個菜味濃。
Step 2 : zip 檔案存取與解碼函數
-
[line 6]:
定義一個解碼函數;第一個變數zFile
,實際上是去接下一步 (Step 3) 所產生的物件,並使用extractall
方法來傳入給定的密碼 (第二個變數password
)。 -
[line 8]:
str.encode (password)
:傳進extractall
方法裡面的密碼password
,必須是 byte 的形式,因此將password
字串 encode。 -
[line 10–12]:
若成功則印出密碼並return
;若失敗則進入except
跳過。
Step 3 : 引用密碼表、或自行排列組合
-
[line 15]:
targetFile
:指定你的目標 zip 檔在哪兒吧,記得 Windows 的路徑倒斜線 (\
) 要跳脫 (escape)。 -
[line 16]:
創建zFile
物件供 python 處理 zip 檔。 -
[line 17]:
創建變數chars
儲存[A-Za-z0–9]
,如果不切前 62 個字元[:62]
,你可以拿到所有支援的符號做後續密碼猜測,這裡簡單測試起見,只用字母與數字。 -
[line 18–20]:
這裡用了比較蠢的方法來製作測試密碼 password,用了兩層for
loop 只做兩個字元的排列組合。你可以設計其他函數,例如import itertools
來精進你的猜測效率。
另外也可以去找廣泛使用的密碼表,使用 f.open()
等基本方式一個個做密碼猜測。
Step 4 : Multithreading 跑起來
-
[line 22–23]:
Threading 跑起來!target 指定 step 2 中創建的函數extractFile()
,參數則給定上一步的zFile
與產生的password
。 -
[line 25–28]:
如果猜測成功,則印出成功訊息,並return 0
跳出函數。當 python 讀到return
會視為函數的結束,就能達到如同在迴圈中break
跳出的效果。 -
[line 30]:
如果猜測失敗,則印出失敗訊息,進入下一次猜測。
Example Output:
猜到密碼是 ns 了!
Source Code:
|
|