如何在SQL Server 2008中解密存储过程

20
我有一个使用WITH ENCRYPTION选项加密的存储过程,现在我想解密该过程。我已经尝试了一个名为“Decryptsp2K”的存储过程,该过程适用于本论坛中的SQL 2000:http://forums.asp.net/t/1516587.aspx/1,但它删除了我的存储过程,而不是解密它。是否有一种方法可以在SQL Server 2008中解密存储过程?
5个回答

25

《SQL Server Pro》文章“解密 SQL Server 对象”在 SQL Server 2008 中仍然可用。

您需要通过 DAC 连接。请查看下载页面中的文件“Decrypt SQL 2005 stored procedures, functions, triggers, views.sql”。

简要总结一下它对以下存储过程定义执行的步骤。

CREATE PROC dbo.myproc
WITH ENCRYPTION
AS
SELECT 'FOO'
  1. sys.sysobjvaluesimageval列中检索加密的对象文本,并将其存储在变量@ContentOfEncryptedObject中。
  2. 使用DATALENGTH(@ContentOfEncryptedObject)/2计算@ObjectDataLength
  3. 生成一个ALTER PROCEDURE语句,用字符-填充到正确的长度(在这种情况下为ALTER PROCEDURE [dbo].[myproc] WITH ENCRYPTION AS------------)。
  4. 执行该ALTER语句,从sys.sysobjvalues中检索加密版本并将其存储在变量@ContentOfFakeEncryptedObject中,然后回滚更改。
  5. 生成一个CREATE PROCEDURE语句,用字符-填充到正确的长度(在这种情况下为CREATE PROCEDURE [dbo].[myproc] WITH ENCRYPTION AS-----------),并将其存储在变量@ContentOfFakeObject中。

然后,它通过循环@i = 1 to @ObjectDataLength并使用以下XOR计算每个字符逐个解密定义。

NCHAR(
      UNICODE(SUBSTRING(@ContentOfEncryptedObject, @i, 1)) ^
      (
          UNICODE(SUBSTRING(@ContentOfFakeObject, @i, 1)) ^
          UNICODE(SUBSTRING(@ContentOfFakeEncryptedObject, @i, 1))
      )
     )

更新

Paul White 写了一篇很好的文章详细介绍了为什么上述方法可行,并提供了一种不依赖于修改对象的替代方法:WITH ENCRYPTION 的内部机制


似乎这会返回所有代码,但顺序不正确(我正在使用SQL2008R2)。我有一个相当长的存储过程,结果需要按以下方式重新组合:第9行移到第7行的末尾,第10行移到第8行的末尾,第11行移到第9行的末尾,但不是始终跳过2行,还有其他人遇到这个问题吗? - Adriaan Davel
1
@AdriaanDavel - 当我查看文章中的代码时,我自己没有遇到过这种情况。我还使用了Optillect SQL Decryptor,它似乎工作得很好。 - Martin Smith
要解密SQL Server数据库存储过程,您可以使用XOR解密过程,如此有用的帖子中所述:http://www.sqlservercentral.com/blogs/zoras-sql-tips/2016/02/16/a-guide-for-decrypting-sql-server-database-objects/ - Jason Clark
我一直使用Orbital的SQL Decryptor,可以在这里找到:http://www.sqldecryptor.com。 - BeanFlicker

6
如果您想解密过程或任何其他加密对象,请查看ApexSQL Decrypt
这是一个免费的独立工具,有选项将其集成到SSMS中,可以预览原始DDL脚本并创建解密脚本。
从独立工具中,您可以连接到多个服务器并一次解密多个对象。 dbForge SQL Decryptor是另一个在这种情况下能帮助您的工具。

ApexSQL Decrypt在我使用SQL Server 2012数据库时无法工作。 - alex

3

我认为这些都是付费版本,没有免费的。我已经从http://www.elitude.net/链接检查了解密器。 - Upendra Chaudhari
@Upendra Chaudhari:可能只有付费应用程序。这一切都随着SQL Server 2005的出现而改变了。 - gbn

2

1

dbForge Sql Decryptor 帮助我解密了加密的存储过程。 详细信息可在此处找到。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接