Releases: HSU-YU-MING/PDFUnlocker
Release list
v1.0.4 — 相依套件安全性更新
更新
相依套件升級,帶入三項安全性修補。
| 套件 | 1.0.3 | 1.0.4 | 修補 |
|---|---|---|---|
| pypdf | 6.14.2 | 6.16.0 | CVE-2026-71870、CVE-2026-71852(中風險) |
| cryptography | 49.0.0 | 50.0.0 | CVE-2026-69247(高風險) |
就本工具的使用方式而言,這三項都沒有可觸發的路徑。 cryptography 那項出在 PKCS#7 解密,本工具僅將它作為 pypdf 處理 PDF 加密的後端,未使用該功能;pypdf 兩項出在解析字型資料時的資源耗用,主要發生於文字擷取,而本工具只做讀取、解密、逐頁複製,不擷取文字。
仍然更新的理由是:安全掃描工具只看打包進去的套件版本,不看呼叫路徑;而「目前觸發不到」取決於程式碼維持現狀,不是可以長期依賴的保證。
沒有變的
介面、操作步驟與解密行為與 1.0.3 完全相同。本次沒有任何程式碼變更,pdf_unlocker.py 一行未動。
檔案
PDFUnlocker.exe 以 IV 程式碼簽章憑證(YU-MING HSU,SSL.com 簽發)簽署,並帶 RFC3161 時戳。
SHA256: 0F455986273131429A86272E076C6A403CE9C993FBBC14956C464A61AD281B61
v1.0.3 — 修正另存預設檔名可能覆蓋原檔
修正
另存時的預設檔名對大寫副檔名無效,可能導致覆蓋原檔。
舊版用 檔名.replace(".pdf", "_無密碼") 產生預設檔名,對 報告.PDF 這種大寫副檔名一段都換不到——預設檔名等於原檔名,使用者若直接按儲存(並在「檔案已存在,要取代嗎」按下取代),就會覆蓋掉自己的加密原檔。改用 os.path.splitext() 只處理最後一個副檔名。
順帶修掉 a.pdf.b.pdf 這類檔名每一段都被取代的問題。
| 選擇的檔案 | 1.0.2 的預設檔名 | 1.0.3 |
|---|---|---|
報告.pdf |
報告_無密碼.pdf |
不變 |
報告.PDF |
報告.PDF(=原檔名) |
報告_無密碼.pdf |
my.pdf.report.pdf |
my_無密碼.report_無密碼 |
my.pdf.report_無密碼 |
新增
--self-test:產生 RC4-40 / RC4-128 / AES-128 / AES-256 四種加密 PDF 各解密一次,並確認錯誤密碼會被擋下,全數通過時離開碼為 0。此執行檔不帶主控台,因此只回報離開碼、不輸出訊息。
PDFUnlocker.exe --self-test
搭配新增的 GitHub Actions,每次變更都會打包後對產物本身執行這項測試——原始碼解得開不代表打包後的執行檔解得開,而這類問題原本要等使用者回報才會發現。
新增 SECURITY.md,說明本工具碰得到與碰不到什麼(不連網、密碼僅存在記憶體、原始檔只讀)。
沒有變的
介面、操作步驟、解密行為與相依套件皆與 1.0.2 相同。解密仍由 pypdf 處理,本工具沒有任何猜測或繞過機制。
檔案
PDFUnlocker.exe 以 IV 程式碼簽章憑證(YU-MING HSU,SSL.com 簽發)簽署,並帶 RFC3161 時戳。
SHA256: F8D990AE0D4A5472B1FC68F2C9658BE3B684E854F2733266D167255E576AD33F
v1.0.2 — 改用 pypdf,加密後端換 cryptography
本版把解密核心從 PyPDF2 換成 pypdf,並修掉幾個使用體驗上的問題。功能與操作方式不變。
為什麼要換
PyPDF2 已經停止維護,官方明確建議遷移到 pypdf(同一批人維護的後繼專案)。停更的加解密函式庫不會再收到安全性修補,而這支工具正是拿來處理加密檔案的。
加密後端也一併從 pycryptodome 換成 cryptography。兩者都能解 AES 加密的 PDF,但 cryptography 是 pypdf 目前的首選後端,且維護更活躍。
變更
- 核心改用 pypdf 6.x(
PdfReader/PdfWriter) - AES 解密後端改用 cryptography
- 密碼錯誤時給明確提示——原本只會失敗,看不出是密碼不對還是檔案有問題
- 宣告 DPI 感知,高解析度螢幕下視窗不再模糊
- 字體設定抽成常數,字型調整不必再翻遍整支程式
檔案變大的原因
PDFUnlocker.exe 從 33.4 MB 變成 38.5 MB。cryptography 帶的原生模組(_rust.pyd)比 pycryptodome 大,這是換後端的代價。
這不是破解工具
密碼錯了就解不開。本工具沒有任何猜測、暴力嘗試或繞過機制,只用在你自己擁有、且已經知道密碼的檔案上。
簽章
執行檔以 IV 程式碼簽章憑證(YU-MING HSU,SSL.com 簽發)完成數位簽章,並帶 RFC3161 時戳——即使憑證日後到期,已簽署的檔案仍然有效。右鍵 → 內容 → 數位簽章可驗證。
v1.0.1 — 發行者欄位與簽章憑證對齊
本版功能與 v1.0.0 完全相同,只調整版本資訊字串。
變更
- 檔案內容的發行者欄(CompanyName)從「許彧銘」改為「許彧銘 (YU-MING HSU)」
程式碼簽章憑證的主體是護照拼音 YU-MING HSU,Windows 在 UAC 與 SmartScreen 上顯示的就是這串;而檔案內容的發行者欄原本只有中文本名,兩者之間沒有東西把它們連起來。加註拼音後,同一個地方就能對應起來。
簽章
以 SSL.com 程式碼簽章憑證簽署,附 RFC3161 時戳。
| 發行者 | CN=YU-MING HSU |
| SHA-256 | F99B9F678F756EF7B13471E6514607B5251E264A7AC42664CC35AADE3E606D6C |
此為標準(非 EV)憑證,新版本累積 SmartScreen 信譽前仍可能跳出提示,點「其他資訊 → 仍要執行」即可。
v1.0.0 的檔案保持原樣不動,已下載的使用者不受影響。
v1.0.0
輸入一次密碼,換一份日後開啟免密碼的 PDF 副本。
對於你本來就知道密碼的加密 PDF:選檔 → 輸入密碼 → 另存,三步完成。
原始加密檔保留不動,產出是一份獨立的無密碼副本。支援 AES 加密的 PDF。
這不是破解工具——密碼錯了就解不開,沒有任何猜測、暴力嘗試或繞過機制。
請只用在你自己擁有、且已經知道密碼的檔案上。
下載與使用
下載下方的 PDFUnlocker.exe,直接執行,免安裝。
數位簽章
本執行檔已完成程式碼簽章:
| 發行者 | YU-MING HSU(SSL.com IV 程式碼簽章憑證) |
| 時戳 | RFC3161(ts.ssl.com)——憑證日後到期,已簽署檔案仍有效 |
| SHA-256(整檔) | 668CFF88974CFB5809612895F3AECD73277CD89B0F6D48867E13FE8AFBF0EB8A |
驗證簽章:右鍵 → 內容 → 數位簽章,或 signtool verify /pa PDFUnlocker.exe。
核對檔案:Get-FileHash PDFUnlocker.exe,應得出上表的 SHA-256。