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

SQL Server 加密預存程序破解技術深度解析(下):核心解密邏輯與 XOR 運算實作

     編輯:關於SqlServer

解密核心邏輯

承接上篇,解密流程核心在於利用 syscomments 儲存的加密文本、重建的原始建立腳本、以及已知的固定模式,透過 XOR 運算還原原始碼:

-- 關鍵解密迴圈
SET @resultsp = REPLICATE(N'A', (DATALENGTH(@OrigSpText1) / 2));
WHILE @i <= DATALENGTH(@OrigSpText1)/2
BEGIN
    SET @resultsp = STUFF(@resultsp, @i, 1,
        NCHAR(UNICODE(SUBSTRING(@OrigSpText1, @i, 1)) ^
              (UNICODE(SUBSTRING(@OrigSpText2, @i, 1)) ^
               UNICODE(SUBSTRING(@OrigSpText3, @i, 1)))));
    SET @i = @i + 1;
END

完整解密預存程序碼(下半部)

IF @type='V'
    SET @OrigSpText2='CREATE VIEW '+@objectname+' WITH ENCRYPTION AS SELECT 1 as f';

SET @q = 4000 - LEN(@OrigSpText2);
SET @OrigSpText2 = @OrigSpText2 + REPLICATE('-', @q);
ELSE
    SET @OrigSpText2 = REPLICATE('-', 4000);

SET @i = 1;
SET @resultsp = REPLICATE(N'A', (DATALENGTH(@OrigSpText1) / 2));
WHILE @i <= DATALENGTH(@OrigSpText1)/2
BEGIN
    SET @resultsp = STUFF(@resultsp, @i, 1,
        NCHAR(UNICODE(SUBSTRING(@OrigSpText1, @i, 1)) ^
              (UNICODE(SUBSTRING(@OrigSpText2, @i, 1)) ^
               UNICODE(SUBSTRING(@OrigSpText3, @i, 1)))));
    SET @i = @i + 1;
END

SET @orgvarbin = CAST(@OrigSpText1 AS VARBINARY(8000));
SET @resultsp = CASE WHEN @encrypted=1
    THEN @resultsp
    ELSE CONVERT(NVARCHAR(4000),
         CASE WHEN @status & 2 = 2 THEN UNCOMPRESS(@orgvarbin) ELSE @orgvarbin END)
    END;
PRINT @resultsp;

SET @n = @n + 1;
END;
SET @k = @k + 1;
END;

DROP TABLE #temp;
ROLLBACK TRAN;

關鍵技術點

  • XOR 解密原理:加密文本 XOR (已知模式 XOR 原始文本) = 原始文本。
  • 模式重建:依物件類型(P/FN/TF/IF/TR/V)動態產生固定長度建立腳本(@OrigSpText2)。
  • 處理壓縮:@status & 2 判斷是否壓縮,需 UNCOMPRESS。
  • 交易回滾:全程在交易中執行,最後 ROLLBACK 避免污染系統表。

安全性提醒

  • WITH ENCRYPTION 非真正加密,僅混淆,不應依賴其保護機敏邏輯。
  • 生產環境建議:原始碼版控、CLR 組件簽名、資料庫層級權限控管。
  • SQL Server 2005+ 引入真正的模組加密(CREATE CERTIFICATE、ADD SIGNATURE)。

小結

本系列揭示 WITH ENCRYPTION 的脆弱性,展示 XOR 解密完整實作。開發者應採用更強健的知識產權保護方案。

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