本系統採用雙 DLL 分權設計,解決 Windows 平台下「製鎖端需要高風險磁碟權限」與「客戶端要求免 UAC、防毒軟體不誤殺」的商業衝突。
v3.1 版全面升級為 「 Raw 磁區直寫架構 (Raw Sector Storage)」,徹底拔除臨時掛載目錄與 FAT32 格式化依賴。
- 製作端 (libDongleMaker.dll):需要系統管理員權限 (UAC)。對指定隨身碟進行雙分割區規劃:
- 隱形授權區 (Partition 1):128MB,類型
0x12 OEM。無檔案系統、零臨時掛載目錄。直接透過WriteFile將 AES-256-GCM 密文與 Header 直寫於 Sector 0。檔案救援軟體無法掃描到檔名。 - 可見儲存區 (Partition 2):剩餘全部空間,exFAT 格式 (標籤
USB_DRIVE),供日常讀寫存放普通檔案。
- 隱形授權區 (Partition 1):128MB,類型
- 讀取端 (libDongleReader.dll / libDongleReaderStatic.a):隨主程式出貨給客戶,完全不需要系統管理員權限 (免 UAC)。
- 安全讀取 USB 出廠晶片唯讀 ID。
- 直接以 Raw Volume Handle (
\\\\?\\Volume{GUID}) 讀取 Sector 0 並進行 AES-256-GCM 防篡改驗證解密。 - 內建 Expression Parser 動態算式解析器 (支援
+ - * / % ^ () x y z及abs,min,max,floor,ceil,sin,cos,sqrt)。 - 包含 XOR API 名稱混淆 (
NtSetInformationThread) 與 RDTSC CPU 週期抗最佳化反除錯。
- cpp_src/:所有 C++ 核心 DLL 專案原始碼。
- cpp_src/CMakeLists.txt:CMake 建置設定。
- cpp_src/common/:共用標頭檔、
LicenseHeader結構與 AES-256-GCM/CBC 加解密模組。 - cpp_src/maker/:開發端製鎖 DLL 與測試程式(需要管理員權限)。
- cpp_src/reader/:客戶端讀鎖 DLL 與測試程式(完全免 UAC 權限,隨軟體出貨)。
- cpp_src/build/:編譯產出目錄。
- dongle_maker_gui/:C# WinForms 專案目錄(包含視覺化燒錄與互動式 X/Y 算式測試驗證工具)。
- dongle_maker_gui/Form1.cs:GUI 主視窗邏輯 (
async/await非阻塞 UI + WindowsWM_DEVICECHANGEUSB 熱插拔自動偵測)。
- dongle_maker_gui/Form1.cs:GUI 主視窗邏輯 (
使用 CMake 與您的 C++ 編譯器(如 MinGW x64 或 MSVC x64)在 cpp_src 下進行編譯:
cd d:\dongle_maker\cpp_src
cmake -B build
cmake --build build --config ReleaseNote
C++ 建置腳本已設定建置後事件 (Post-Build Event)。當 C++ 編譯成功後,會自動將 libDongleMaker.dll 複製到 C# 專案的輸出目錄 dongle_maker_gui/bin/Debug/ 與 dongle_maker_gui/bin/Release/ 中。
開啟終端機或 Visual Studio 進行建置:
cd d:\dongle_maker\dongle_maker_gui
dotnet build dongle_maker_gui.csproj -c Release- 插入準備作為軟體鎖的 USB 隨身碟。
- 以系統管理員身分執行
dongle_maker_gui.exe(USB 插入或拔除時選單會自動刷新)。 - 可在文字框中修改授權 JSON 字典(例如包含自訂動態算式
"formula": "abs(x - y) * 9 + min(x, y)")。 - 點擊 「抹除磁碟並寫入隱形授權鎖」 按鈕(使用 Task.Run 背景異步執行,UI 不凍結)。
- 雙重確認後,毫秒級完成 Raw Sector 直寫。
- 將製妥的隨身碟插入電腦。
- 以一般使用者身分雙擊執行
dongle_maker_gui.exe(免 UAC)。 - 切換至第二分頁 「讀取與驗證 (Reader Demo)」。
- 選擇對應隨身碟並輸入密碼。
- 輸入測試變數 X 與 Y(例如 X = 10.0, Y = 5.0)。
- 點擊 「讀取並驗證軟體鎖 (Demo)」 按鈕。
- 程式自動調用
libDongleReader.dll進行 Raw Sector 讀取、GCM 防篡改驗證,並帶入您輸入的 X、Y 進行加密算式動態求值。