首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
您现在的位置: 程式碼之家 >> 編程語言 >  >> C語言 >> VC >> 關於VC++

Windows 應用程式電子註冊機制實現:跨平台硬體綁定與密鑰驗證

     編輯:關於VC++

前言

軟體銷售模式演進催生「先試用、後註冊」的電子授權需求。本文提出一套跨越 DOS、Windows 3.x、Windows 95 的通用電子註冊方案:採集 ROM 區 (F000H:FFF5H-FFFFH) 機器唯一資訊(出廠日期、主機標識、主板序號等)作為加密種子,經位運算演算法生成註冊碼,嵌入應用程式多處關鍵邏輯,實現功能限制與防破解。

一、註冊密鑰點選擇與生成

為何不選硬碟序號?

傳統透過埠 1F6H/1F7H 讀取硬碟資訊,在 Win95 保護模式下被禁止,無法跨平台。

ROM 區方案優勢

  • 地址 F000H:FFF5H-FFFFH 存放 CMOS 設定、主板型號/序號、主機標識字節、生產日期
  • 各機器唯一,DOS/Win3.x/Win95 實模式/保護模式下內容一致
  • 未來新 OS 亦有效(ROM 內容不變)

注意事項

F000:FFF0H 前 5 字節為熱啟動入口 (Ctrl+Alt+Del 處理),三平台處理不同,內容不一致,不可作為種子。

加密演算法設計

利用語言提供的位運算(XOR、SHIFT、ADD/SUB)對種子進行多輪變換,演算法可自行設計,長度任意。將驗證邏輯分散在程式多處關鍵路徑,增加逆向難度。即使多程式共用同種子,演算法不同則註冊碼不同;知曉種子無演算法亦無法破解。

二、解密密鑰與開發者/用戶互動流程

  1. 應用程式內建「解密密鑰生成邏輯」:讀取 ROM 種子 → 簡單變換 (如減 0x2020) → 顯示給用戶
  2. 用戶將解密密鑰(或安裝後的程式檔)提供給開發者
  3. 開發者用專用 READKEY.EXE 依相同註冊演算法生成註冊碼
  4. 用戶輸入註冊碼,程式寫入檔案固定位置
  5. 程式啟動時重新演算註冊碼比對,一致則解鎖完整功能

READKEY.EXE 三種模式:

  • 無參數:讀取本機 ROM 生成註冊碼
  • 帶參數:鍵盤輸入解密密鑰生成
  • 帶 EXE 檔名:從程式檔固定偏移 (0xF040) 讀取解密密鑰生成

三、核心原始碼節選

READKEY.C 關鍵邏輯


// 從 ROM 讀取種子
unsigned int far *pt = (unsigned int far *)0xf000fff6L;
// 形成解密密鑰
sum = 0x2020;
for (sumj=0; sumj<4; sumj++) {
    for (sumi=0; sumi<5; sumi++)
        sum -= (*(pt+sumi) - 0x2020);
    sum ^= 0x0404;
    sprintf(Buff+4*sumj, "%04x", sum);
}
// 產出 16 字元註冊碼

Windows 版驗證函數 ImeCmpkey


void ImeCmpkey(void) {
    // Win95 保護模式下需用 Selector 映射實體地址
    __asm mov Sel1, ds;
    Sel2 = AllocSelector(Sel1);
    SetSelectorBase(Sel2, 0xF0000); // F000:0000
    SetSelectorLimit(Sel2, 0xFFFF);
    pt = (unsigned int far*)(((DWORD)Sel2<<16) | 0xFFF6); // F000:FFF6
    // 同樣演算法生成註冊碼並比對
    if (lstrcmpi(calcKey, storedKey)==0) UseFlag=FALSE; // 已註冊
}

四、防破解強化策略

  • 驗證函數內聯/巨集展開至數十處關鍵路徑(授權檢查、核心功能入口、定時器回調)
  • 使用動態解碼:註冊碼在記憶體中以加密形式存放,驗證時即時解密比對
  • 偵測調試器:IsDebuggerPresent、時間檢查、自我校驗和雜湊
  • 關鍵字串加密、控制流平坦化

執行速度極快 (直接記憶體讀取),對程式效能幾無影響,碼長增加微乎其微。

五、總結

ROM 種子 + 自訂位運算演算法 + 分散式驗證 + 開發者/用戶雙向密鑰流程,構建了一套實用、跨平台、低成本的電子註冊體系。雖非軍用級加密,但足以阻擋絕大多數非專業破解,保護開發者勞動成果並降低銷售環節成本。

  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved