Skip to content

Releases: HSU-YU-MING/PDFUnlocker

v1.0.4 — 相依套件安全性更新

Choose a tag to compare

@HSU-YU-MING HSU-YU-MING released this 15 Aug 16:30

更新

相依套件升級,帶入三項安全性修補。

套件 1.0.3 1.0.4 修補
pypdf 6.14.2 6.16.0 CVE-2026-71870CVE-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 — 修正另存預設檔名可能覆蓋原檔

Choose a tag to compare

@HSU-YU-MING HSU-YU-MING released this 14 Aug 03:17

修正

另存時的預設檔名對大寫副檔名無效,可能導致覆蓋原檔。

舊版用 檔名.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

Choose a tag to compare

@HSU-YU-MING HSU-YU-MING released this 30 Jul 21:57

本版把解密核心從 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 — 發行者欄位與簽章憑證對齊

Choose a tag to compare

@HSU-YU-MING HSU-YU-MING released this 29 Jul 05:00

本版功能與 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

Choose a tag to compare

@HSU-YU-MING HSU-YU-MING released this 26 Jul 04:43

輸入一次密碼,換一份日後開啟免密碼的 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。