Home  >  Article  >  Database  >  解密存储过程,视图,触发器

解密存储过程,视图,触发器

WBOY
WBOYOriginal
2016-06-07 14:54:371203browse

解密存储过程,视图,触发器 存储过程 视图 触发器 此存储过程解密比较短的存储过程可以,运行前先备份存储过程,否则可能无法恢复。 Decrypt Stored Procedures, Views and TriggersScript Rating Total number of votes [11] By: jgama This SP will decry

解密存储过程,视图,触发器 存储过程 视图 触发器
此存储过程解密比较短的存储过程可以,运行前先备份存储过程,否则可能无法恢复。 

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
Statement:
The content of this article is voluntarily contributed by netizens, and the copyright belongs to the original author. This site does not assume corresponding legal responsibility. If you find any content suspected of plagiarism or infringement, please contact admin@php.cn