久久精品人人爽,华人av在线,亚洲性视频网站,欧美专区一二三

SQLSERVER中怎么解密存儲過程

131次閱讀
沒有評論

共計 5499 個字符,預(yù)計需要花費 14 分鐘才能閱讀完成。

SQLSERVER 中怎么解密存儲過程,很多新手對此不是很清楚,為了幫助大家解決這個難題,下面丸趣 TV 小編將為大家詳細講解,有這方面需求的人可以來學(xué)習(xí)下,希望你能有所收獲。

加密測試的存儲過程

IF EXISTS(SELECT 1 FROM SYSOBJECTS WHERE TYPE= P AND NAME= P_TEST)

DROP PROCEDURE P_TEST

GO

CREATE PROCEDURE P_TEST(@USERNAME VARCHAR(20),@MSG VARCHAR(20) OUTPUT)

WITH ENCRYPTION

AS

BEGIN

IF(SELECT COUNT(1) FROM Custs WHERE NAME=@USERNAME) 0

SET @MSG= 此用戶名存在

ELSE

SET @MSG= 此用戶名不存在

END

解密的存儲過程

Create PROCEDURE Decryption(@procedure sysname = NULL)

AS

SET NOCOUNT ON

DECLARE @intProcSpace bigint, @t bigint, @maxColID smallint,@procNameLength int

select @maxColID = max(subobjid) FROM

sys.sysobjvalues WHERE objid = object_id(@procedure)

–select @maxColID as Rows in sys.sysobjvalues

select @procNameLength = datalength(@procedure) + 29

DECLARE @real_01 nvarchar(max)

DECLARE @fake_01 nvarchar(max)

DECLARE @fake_encrypt_01 nvarchar(max)

DECLARE @real_decrypt_01 nvarchar(max),@real_decrypt_01a nvarchar(max)

declare @objtype varchar(2),@ParentName nvarchar(max)

select @real_decrypt_01a =

– 提取對象的類型如是存儲過程還是函數(shù),如果是觸發(fā)器,還要得到其父對象的名稱

select @objtype=type,@parentname=object_name(parent_object_id)

from sys.objects where [object_id]=object_id(@procedure)

— 從 sys.sysobjvalues 里提出加密的 imageval 記錄

SET @real_01=(SELECT top 1 imageval FROM sys.sysobjvalues WHERE objid =

object_id(@procedure) and valclass = 1 order by subobjid)

– 創(chuàng)建一個臨時表

create table #output ([ident] [int] IDENTITY (1, 1) NOT NULL ,

[real_decrypt] NVARCHAR(MAX) )

– 開始一個事務(wù),稍后回滾

BEGIN TRAN

– 更改原始的存儲過程,用短橫線替換

if @objtype= P

SET @fake_01= ALTER PROCEDURE + @procedure + WITH ENCRYPTION AS select 1

/**//* +REPLICATE(cast( * as nvarchar(max)), datalength(@real_01) /2 – @procNameLength)+ */

else if @objtype= FN

SET @fake_01= ALTER FUNCTION + @procedure + () RETURNS INT WITH ENCRYPTION AS BEGIN RETURN 1

/**//* +REPLICATE(cast( * as nvarchar(max)), datalength(@real_01) /2 – @procNameLength)+ */ END

else if @objtype= V

SET @fake_01= ALTER view + @procedure + WITH ENCRYPTION AS select 1 as col

/**//* +REPLICATE(cast( * as nvarchar(max)), datalength(@real_01) /2 – @procNameLength)+ */

else if @objtype= TR

SET @fake_01= ALTER trigger + @procedure + ON +@parentname+ WITH ENCRYPTION AFTER INSERT AS RAISERROR (N ,16,10)

/**//* +REPLICATE(cast( * as nvarchar(max)), datalength(@real_01) /2 – @procNameLength)+ */

EXECUTE (@fake_01)

– 從 sys.sysobjvalues 里提出加密的假的

SET @fake_encrypt_01=(SELECT top 1 imageval FROM sys.sysobjvalues WHERE objid =

object_id(@procedure) and valclass = 1 order by subobjid )

if @objtype= P

SET @fake_01= Create PROCEDURE + @procedure + WITH ENCRYPTION AS select 1

/**//* +REPLICATE(cast( * as nvarchar(max)), datalength(@real_01) /2 – @procNameLength)+ */

else if @objtype= FN

SET @fake_01= CREATE FUNCTION + @procedure + () RETURNS INT WITH ENCRYPTION AS BEGIN RETURN 1

/**//* +REPLICATE(cast( * as nvarchar(max)), datalength(@real_01) /2 – @procNameLength)+ */ END

else if @objtype= V

SET @fake_01= Create view + @procedure + WITH ENCRYPTION AS select 1 as col

/**//* +REPLICATE(cast( * as nvarchar(max)), datalength(@real_01) /2 – @procNameLength)+ */

else if @objtype= TR

SET @fake_01= Create trigger + @procedure + ON +@parentname+ WITH ENCRYPTION AFTER INSERT AS RAISERROR (N ,16,10)

/**//* +REPLICATE(cast( * as nvarchar(max)), datalength(@real_01) /2 – @procNameLength)+ */

– 開始計數(shù)

SET @intProcSpace=1

– 使用字符填充臨時變量

SET @real_decrypt_01 = replicate(cast( A as nvarchar(max)), (datalength(@real_01) /2 ))

– 循環(huán)設(shè)置每一個變量,創(chuàng)建真正的變量

– 每次一個字節(jié)

SET @intProcSpace=1

– 如有必要,遍歷每個 @real_xx 變量并解密

WHILE @intProcSpace =(datalength(@real_01) begin= set= real_decrypt_01= intprocspace= @intProcSpace+1 end= insert= output= select= –select= real_decrypt= as= from= –= ————————————-= declare= dbname= sysname= blankspaceadded= 0 int= basepos= currentpos= textlength= lineid= 1 addonlen= lfcr= 2 definedlength= 255 syscomtext= line= create= table= commenttext= text= collate= sys.sysobjvalues= ms_crs_syscom= cursor= local= for= order= by= ident= read= only= open= fetch= next= into= while= fetch_status= = 0

BEGIN

SELECT @BasePos = 1

SELECT @CurrentPos = 1

SELECT @TextLength = LEN(@SyscomText)

WHILE @CurrentPos != 0

BEGIN

– 通過回車查找行的結(jié)束

SELECT @CurrentPos = CHARINDEX(char(13)+char(10), @SyscomText,

@BasePos)

– 如果找到回車

IF @CurrentPos != 0

BEGIN

– 如果 @Lines 的長度的新值比設(shè)置的大就插入 @Lines 目前的內(nèi)容并繼續(xù)

While (isnull(LEN(@Line),0) + @BlankSpaceAdded +

@CurrentPos-@BasePos + @LFCR) @DefinedLength

BEGIN

SELECT @AddOnLen = @DefinedLength-(isnull(LEN(@Line),0) +

@BlankSpaceAdded)

INSERT #CommentText VALUES

(@LineId,

isnull(@Line, N) + isnull(SUBSTRING(@SyscomText,

@BasePos, @AddOnLen), N ))

SELECT @Line = NULL, @LineId = @LineId + 1,

@BasePos = @BasePos + @AddOnLen, @BlankSpaceAdded = 0

END

SELECT @Line = isnull(@Line, N) +

isnull(SUBSTRING(@SyscomText, @BasePos, @CurrentPos-@BasePos + @LFCR), N )

SELECT @BasePos = @CurrentPos+2

INSERT #CommentText VALUES(@LineId, @Line)

SELECT @LineId = @LineId + 1

SELECT @Line = NULL

END

ELSE

– 如果回車沒找到

BEGIN

IF @BasePos = 1= textlength= begin= while= blankspaceadded= @DefinedLength

BEGIN

SELECT @AddOnLen = @DefinedLength –

(isnull(LEN(@Line),0) + @BlankSpaceAdded)

INSERT #CommentText VALUES

(@LineId,

isnull(@Line, N) + isnull(SUBSTRING(@SyscomText,

@BasePos, @AddOnLen), N ))

SELECT @Line = NULL, @LineId = @LineId + 1,

@BasePos = @BasePos + @AddOnLen, @BlankSpaceAdded =

0

END

SELECT @Line = isnull(@Line, N) +

isnull(SUBSTRING(@SyscomText, @BasePos, @TextLength-@BasePos+1), N )

if LEN(@Line) @DefinedLength and charindex(,
@SyscomText, @TextLength+1 ) 0

BEGIN

SELECT @Line = @Line + , @BlankSpaceAdded = 1

END

END

END

END

FETCH NEXT FROM ms_crs_syscom into @SyscomText

END

IF @Line is NOT NULL

INSERT #CommentText VALUES(@LineId, @Line)

select Text from #CommentText order by LineId

CLOSE ms_crs_syscom

DEALLOCATE ms_crs_syscom

DROP TABLE #CommentText

— ————————————-

– 結(jié)束從 sp_helptext 提取

— ————————————-

– 刪除用短橫線創(chuàng)建的存儲過程并重建原始的存儲過程

ROLLBACK TRAN

DROP TABLE #output

GO

啟用 DAC

SP_CONFIGURE remote admin connections

GO

—-0:僅允許本地連接使用 DAC,1:允許遠程連接使用 DAC

SP_CONFIGURE remote admin connections , 0;

GO

RECONFIGURE WITH OVERRIDE;

GO

文件—— 新建—— 數(shù)據(jù)庫引擎查詢

服務(wù)器名稱:admin:. 或者 admin: 服務(wù)器名稱

登錄進去執(zhí)行解密操作

USE TEST

EXEC Decryption P_TEST

GO

看完上述內(nèi)容是否對您有幫助呢?如果還想對相關(guān)知識有進一步的了解或閱讀更多相關(guān)文章,請關(guān)注丸趣 TV 行業(yè)資訊頻道,感謝您對丸趣 TV 的支持。

正文完
 
丸趣
版權(quán)聲明:本站原創(chuàng)文章,由 丸趣 2023-08-03發(fā)表,共計5499字。
轉(zhuǎn)載說明:除特殊說明外本站除技術(shù)相關(guān)以外文章皆由網(wǎng)絡(luò)搜集發(fā)布,轉(zhuǎn)載請注明出處。
評論(沒有評論)
主站蜘蛛池模板: 孙吴县| 阜城县| 大冶市| 游戏| 信丰县| 邵东县| 西乡县| 金阳县| 韶关市| 宝坻区| 红原县| 武宁县| 淮滨县| 两当县| 老河口市| 肇州县| 灵川县| 祁连县| 罗定市| 施甸县| 景宁| 吐鲁番市| 垣曲县| 武邑县| 尚义县| 静宁县| 台东市| 留坝县| 灵川县| 克东县| 铜鼓县| 定州市| 玉屏| 松滋市| 大同县| 长沙县| 合阳县| 广东省| 灵山县| 子长县| 武清区|