此存储过程解密比较短的存储过程可以,运行前先备份存储过程,否则可能无法恢复。
Decrypt Stored Procedures, Views AND Triggers
Script Rating Total NUMBER OF votes [11]
BY: jgama
This SP will decrypt Stored Procedures, Views OR Triggers that were encrypted USING "with encryption" There are 2 versions: one FOR SP''s ONLY AND the other one FOR SP''s, triggers AND views version 1: INPUT: object name (stored PROCEDURE, VIEW OR TRIGGER) version 2: INPUT: object name (stored PROCEDURE, VIEW OR TRIGGER), object TYPE(''T''-TRIGGER, ''P''-stored PROCEDURE OR ''V''-VIEW) Original idea: shoeboy?Copyright ?1999-2002 SecurityFocus
Stored procedures coded BY Joseph Gama ?
SET QUOTED_IDENTIFIER OFF
GO
SET ANSI_NULLS OFF
GO
CREATE PROCEDURE DECRYPT2K (@objName VARCHAR(50), @TYPE CHAR(1) )
--INPUT: object name (stored procedure,
-- view or trigger), object type (''S''-store
-- d procedure, ''V''view or ''T''-trigger)
--Original idea: shoeboy <shoeboy@ade
-- quacy.org>
--Copyright ?1999-2002 SecurityFocus
--adapted by Joseph Gama
--Planet Source Code, my employer and my
-- self are not responsible for the use of
-- this code
--This code is provided as is and for ed
-- ucational purposes only
--Please test it and share your results
AS
DECLARE @a nvarchar(4000), @b nvarchar(4000), @c nvarchar(4000), @d nvarchar(4000), @i INT, @t BIGINT, @tablename VARCHAR(255), @trigtype VARCHAR(6)
SET @TYPE=UPPER(@TYPE)
IF @TYPE=''T''
BEGIN
SET @tablename=(SELECT sysobjects_1.name
FROM dbo.sysobjects INNER JOIN
dbo.sysobjects sysobjects_1 ON dbo.sysobjects.parent_obj = sysobjects_1.id
WHERE (dbo.sysobjects.type = ''TR'') AND (dbo.sysobjects.name = @objName))
SET @trigtype=(SELECT CASE WHEN dbo.sysobjects.deltrig > 0 THEN ''DELETE''
WHEN dbo.sysobjects.instrig > 0 THEN ''INSERT''
WHEN dbo.sysobjects.updtrig > 0 THEN ''UPDATE'' END
FROM dbo.sysobjects INNER JOIN
dbo.sysobjects sysobjects_1 ON dbo.sysobjects.parent_obj = sysobjects_1.id
WHERE (dbo.sysobjects.type = ''TR'') AND (dbo.sysobjects.name = @objName))
END
--get encrypted data
SET @a=(SELECT ctext FROM syscomments WHERE id = object_id(@objName))
SET @b=CASE @TYPE
WHEN ''S'' THEN ''ALTER PROCEDURE ''+ @objName +'' WITH ENCRYPTION AS ''+REPLICATE(''-'', 4000-62)
WHEN ''V'' THEN ''ALTER VIEW ''+ @objName +'' WITH ENCRYPTION AS SELECT dbo.dtproperties.* FROM dbo.dtproperties''+REPLICATE(''-'', 4000-150)
WHEN ''T'' THEN ''ALTER TRIGGER ''+@objName+'' ON ''+ @tablename+'' WITH ENCRYPTION FOR ''+@trigtype+'' AS PRINT ''''a''''''+REPLICATE(''-'', 4000-150)
END
EXECUTE (@b)
--get encrypted bogus SP
SET @c=(SELECT ctext FROM syscomments WHERE id = object_id(@objName))
SET @b=CASE @TYPE
WHEN ''S'' THEN ''CREATE PROCEDURE ''+ @objName +'' WITH ENCRYPTION AS ''+REPLICATE(''-'', 4000-62)
WHEN ''V'' THEN ''CREATE VIEW ''+ @objName +'' WITH ENCRYPTION AS SELECT dbo.dtproperties.* FROM dbo.dtproperties''+REPLICATE(''-'', 4000-150)
WHEN ''T'' THEN ''CREATE TRIGGER ''+@objName+'' ON ''+ @tablename+'' WITH ENCRYPTION FOR ''+@trigtype+'' AS PRINT ''''a''''''+REPLICATE(''-'', 4000-150)
END
--start counter
SET @i=1
--fill temporary variable
SET @d = replicate(N''A'', (datalength(@a) / 2))
--loop
WHILE @i<=datalength(@a)/2
BEGIN
--xor original+bogus+bogus encrypted
SET @d = stuff(@d, @i, 1,
NCHAR(UNICODE(SUBSTRING(@a, @i, 1)) ^
(UNICODE(SUBSTRING(@b, @i, 1)) ^
UNICODE(SUBSTRING(@c, @i, 1)))))
SET @i=@i+1
END
--drop original SP
IF @TYPE=''S''
EXECUTE (''DROP PROCEDURE ''+ @objName)
ELSE
IF @TYPE=''V''
EXECUTE (''DROP VIEW ''+ @objName)
ELSE
IF @TYPE=''T''
EXECUTE (''DROP TRIGGER ''+ @objName)
--remove encryption
--try to preserve case
SET @d=REPLACE((@d),''WITH ENCRYPTION'', '''')
SET @d=REPLACE((@d),''WITH Encryption'', '''')
SET @d=REPLACE((@d),''WITH encryption'', '''')
IF CHARINDEX(''WITH ENCRYPTION'',UPPER(@d) )>0
SET @d=REPLACE(UPPER(@d),''WITH ENCRYPTION'', '''')
--replace SP
EXECUTE( @d)
GO
SET QUOTED_IDENTIFIER OFF
GO
SET ANSI_NULLS ON
GO
SET QUOTED_IDENTIFIER OFF
GO
SET ANSI_NULLS OFF
GO
CREATE PROCEDURE DECRYPTSP2K (@objName VARCHAR(50))
--INPUT: object name (stored procedure,
--
-- view or trigger)
--Original idea: shoeboy <shoeboy@a
-- dequacy.org>
--Copyright ?1999-2002 SecurityFocus
--adapted by Joseph Gama
--Planet Source Code, my employer and my
--
-- self are not responsible for the use
-- of
-- this code
--This code is provided as is and for ed
--
-- ucational purposes only
--Please test it and share your results
AS
DECLARE @a nvarchar(4000), @b nvarchar(4000), @c nvarchar(4000), @d nvarchar(4000), @i INT, @t BIGINT
--get encrypted data
SET @a=(SELECT ctext FROM syscomments WHERE id = object_id(@objName))
SET @b=''ALTER PROCEDURE ''+ @objName +'' WITH ENCRYPTION AS ''+REPLICATE(''-'', 4000-62)
EXECUTE (@b)
--get encrypted bogus SP
SET @c=(SELECT ctext FROM syscomments WHERE id = object_id(@objName))
SET @b=''CREATE PROCEDURE ''+ @objName +'' WITH ENCRYPTION AS ''+REPLICATE(''-'', 4000-62)
--start counter
SET @i=1
--fill temporary variable
SET @d = replicate(N''A'', (datalength(@a) / 2))
--loop
WHILE @i<=datalength(@a)/2
BEGIN
--xor original+bogus+bogus encrypted
SET @d = stuff(@d, @i, 1,
NCHAR(UNICODE(SUBSTRING(@a, @i, 1)) ^
(UNICODE(SUBSTRING(@b, @i, 1)) ^
UNICODE(SUBSTRING(@c, @i, 1)))))
SET @i=@i+1
END
--drop original SP
EXECUTE (''DROP PROCEDURE ''+ @objName)
--remove encryption
--try to preserve case
SET @d=REPLACE((@d),''WITH ENCRYPTION'', '''')
SET @d=REPLACE((@d),''WITH Encryption'', '''')
SET @d=REPLACE((@d),''WITH encryption'', '''')
IF CHARINDEX(''WITH ENCRYPTION'',UPPER(@d) )>0
SET @d=REPLACE(UPPER(@d),''WITH ENCRYPTION'', '''')
--replace SP
EXECUTE( @d)
GO
SET QUOTED_IDENTIFIER OFF
GO
SET ANSI_NULLS ON
GO
//SQL/1208