[SQL] 解密存储过程,视图,触发器 →→→→→进入此内容的聊天室

来自 , 2019-05-20, 写在 SQL, 查看 124 次.
URL http://www.code666.cn/view/9eb53b50
  1. 此存储过程解密比较短的存储过程可以,运行前先备份存储过程,否则可能无法恢复。
  2.  
  3. Decrypt Stored Procedures, Views AND Triggers
  4. Script Rating       Total NUMBER OF votes [11]
  5. BY: jgama
  6. 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
  7. Stored procedures coded BY Joseph Gama ?
  8.  
  9. SET QUOTED_IDENTIFIER OFF
  10. GO
  11. SET ANSI_NULLS OFF
  12. GO
  13.  
  14. CREATE PROCEDURE DECRYPT2K (@objName VARCHAR(50), @TYPE CHAR(1) )
  15. --INPUT: object name (stored procedure,
  16. --     view or trigger), object type (''S''-store
  17. --     d procedure, ''V''view or ''T''-trigger)
  18. --Original idea: shoeboy <shoeboy@ade
  19. --     quacy.org>
  20. --Copyright ?1999-2002 SecurityFocus
  21. --adapted by Joseph Gama
  22. --Planet Source Code, my employer and my
  23. --     self are not responsible for the use of
  24. --     this code
  25. --This code is provided as is and for ed
  26. --     ucational purposes only
  27. --Please test it and share your results
  28.  AS
  29. DECLARE @a nvarchar(4000), @b nvarchar(4000), @c nvarchar(4000), @d nvarchar(4000), @i INT, @t BIGINT, @tablename VARCHAR(255), @trigtype VARCHAR(6)
  30. SET @TYPE=UPPER(@TYPE)
  31. IF @TYPE=''T''
  32.  BEGIN
  33.  SET @tablename=(SELECT sysobjects_1.name
  34.  FROM dbo.sysobjects INNER JOIN
  35.   dbo.sysobjects sysobjects_1 ON dbo.sysobjects.parent_obj = sysobjects_1.id
  36.  WHERE (dbo.sysobjects.type = ''TR'') AND (dbo.sysobjects.name = @objName))
  37.  SET @trigtype=(SELECT CASE WHEN dbo.sysobjects.deltrig > 0 THEN ''DELETE''
  38.      WHEN dbo.sysobjects.instrig > 0 THEN ''INSERT''
  39.      WHEN dbo.sysobjects.updtrig > 0 THEN ''UPDATE'' END
  40.    FROM dbo.sysobjects INNER JOIN
  41.     dbo.sysobjects sysobjects_1 ON dbo.sysobjects.parent_obj = sysobjects_1.id
  42.    WHERE (dbo.sysobjects.type = ''TR'') AND (dbo.sysobjects.name = @objName))
  43.  END
  44. --get encrypted data
  45. SET @a=(SELECT ctext FROM syscomments WHERE id = object_id(@objName))
  46. SET @b=CASE @TYPE
  47.   WHEN ''S'' THEN ''ALTER PROCEDURE ''+ @objName +'' WITH ENCRYPTION AS ''+REPLICATE(''-'', 4000-62)
  48.   WHEN ''V'' THEN ''ALTER VIEW ''+ @objName +'' WITH ENCRYPTION AS SELECT dbo.dtproperties.* FROM dbo.dtproperties''+REPLICATE(''-'', 4000-150)
  49.   WHEN ''T'' THEN ''ALTER TRIGGER ''+@objName+'' ON ''+ @tablename+'' WITH ENCRYPTION FOR ''+@trigtype+'' AS PRINT ''''a''''''+REPLICATE(''-'', 4000-150)
  50.   END
  51. EXECUTE (@b)
  52. --get encrypted bogus SP
  53. SET @c=(SELECT ctext FROM syscomments WHERE id = object_id(@objName))
  54. SET @b=CASE @TYPE
  55.  WHEN ''S'' THEN ''CREATE PROCEDURE ''+ @objName +'' WITH ENCRYPTION AS ''+REPLICATE(''-'', 4000-62)
  56.  WHEN ''V'' THEN ''CREATE VIEW ''+ @objName +'' WITH ENCRYPTION AS SELECT dbo.dtproperties.* FROM dbo.dtproperties''+REPLICATE(''-'', 4000-150)
  57.  WHEN ''T'' THEN ''CREATE TRIGGER ''+@objName+'' ON ''+ @tablename+'' WITH ENCRYPTION FOR ''+@trigtype+'' AS PRINT ''''a''''''+REPLICATE(''-'', 4000-150)
  58.  END
  59. --start counter
  60. SET @i=1
  61. --fill temporary variable
  62. SET @d = replicate(N''A'', (datalength(@a) / 2))
  63. --loop
  64. WHILE @i<=datalength(@a)/2
  65.  BEGIN
  66. --xor original+bogus+bogus encrypted
  67. SET @d = stuff(@d, @i, 1,
  68.  NCHAR(UNICODE(SUBSTRING(@a, @i, 1)) ^
  69.  (UNICODE(SUBSTRING(@b, @i, 1)) ^
  70.  UNICODE(SUBSTRING(@c, @i, 1)))))
  71.  SET @i=@i+1
  72.  END
  73. --drop original SP
  74. IF @TYPE=''S''
  75.  EXECUTE (''DROP PROCEDURE ''+ @objName)
  76. ELSE
  77.  IF @TYPE=''V''
  78.   EXECUTE (''DROP VIEW ''+ @objName)
  79.  ELSE
  80.   IF @TYPE=''T''
  81.    EXECUTE (''DROP TRIGGER ''+ @objName)
  82. --remove encryption
  83. --try to preserve case
  84. SET @d=REPLACE((@d),''WITH ENCRYPTION'', '''')
  85. SET @d=REPLACE((@d),''WITH Encryption'', '''')
  86. SET @d=REPLACE((@d),''WITH encryption'', '''')
  87. IF CHARINDEX(''WITH ENCRYPTION'',UPPER(@d) )>0
  88.  SET @d=REPLACE(UPPER(@d),''WITH ENCRYPTION'', '''')
  89. --replace SP
  90. EXECUTE( @d)
  91.  
  92. GO
  93. SET QUOTED_IDENTIFIER OFF
  94. GO
  95. SET ANSI_NULLS ON
  96. GO
  97.  
  98. SET QUOTED_IDENTIFIER OFF
  99. GO
  100. SET ANSI_NULLS OFF
  101. GO
  102.  
  103. CREATE PROCEDURE DECRYPTSP2K (@objName VARCHAR(50))
  104. --INPUT: object name (stored procedure,
  105. --    
  106. -- view or trigger)
  107. --Original idea: shoeboy <shoeboy@a
  108. -- dequacy.org>
  109. --Copyright ?1999-2002 SecurityFocus
  110. --adapted by Joseph Gama
  111. --Planet Source Code, my employer and my
  112. --    
  113. -- self are not responsible for the use
  114. --     of
  115. -- this code
  116. --This code is provided as is and for ed
  117. --    
  118. -- ucational purposes only
  119. --Please test it and share your results
  120.  AS
  121. DECLARE @a nvarchar(4000), @b nvarchar(4000), @c nvarchar(4000), @d nvarchar(4000), @i INT, @t BIGINT
  122. --get encrypted data
  123. SET @a=(SELECT ctext FROM syscomments WHERE id = object_id(@objName))
  124. SET @b=''ALTER PROCEDURE ''+ @objName +'' WITH ENCRYPTION AS ''+REPLICATE(''-'', 4000-62)
  125. EXECUTE (@b)
  126. --get encrypted bogus SP
  127. SET @c=(SELECT ctext FROM syscomments WHERE id = object_id(@objName))
  128. SET @b=''CREATE PROCEDURE ''+ @objName +'' WITH ENCRYPTION AS ''+REPLICATE(''-'', 4000-62)
  129. --start counter
  130. SET @i=1
  131. --fill temporary variable
  132. SET @d = replicate(N''A'', (datalength(@a) / 2))
  133. --loop
  134. WHILE @i<=datalength(@a)/2
  135.  BEGIN
  136. --xor original+bogus+bogus encrypted
  137. SET @d = stuff(@d, @i, 1,
  138.  NCHAR(UNICODE(SUBSTRING(@a, @i, 1)) ^
  139.  (UNICODE(SUBSTRING(@b, @i, 1)) ^
  140.  UNICODE(SUBSTRING(@c, @i, 1)))))
  141.  SET @i=@i+1
  142.  END
  143. --drop original SP
  144. EXECUTE (''DROP PROCEDURE ''+ @objName)
  145. --remove encryption
  146. --try to preserve case
  147. SET @d=REPLACE((@d),''WITH ENCRYPTION'', '''')
  148. SET @d=REPLACE((@d),''WITH Encryption'', '''')
  149. SET @d=REPLACE((@d),''WITH encryption'', '''')
  150. IF CHARINDEX(''WITH ENCRYPTION'',UPPER(@d) )>0
  151.  SET @d=REPLACE(UPPER(@d),''WITH ENCRYPTION'', '''')
  152. --replace SP
  153. EXECUTE( @d)
  154.  
  155. GO
  156. SET QUOTED_IDENTIFIER OFF
  157. GO
  158. SET ANSI_NULLS ON
  159. GO
  160.  
  161. //SQL/1208

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

这儿你可以回复上面这条便签

captcha