Sqlserver
 sql >> Base de Dados >  >> RDS >> Sqlserver

Como descriptografar o procedimento armazenado no SQL Server 2008


O artigo do SQL Server Pro "Descriptografar objetos do SQL Server" ainda funciona no SQL Server 2008.

Você precisa se conectar através do DAC. Consulte o arquivo "Decrypt SQL 2005 stored procedures, functions, triggers, views.sql" em o download .

Apenas para resumir as etapas que ele executa para a seguinte definição de procedimento armazenado
CREATE PROC dbo.myproc
WITH ENCRYPTION
AS
SELECT 'FOO'
  1. Recupera o texto do objeto criptografado do imageval coluna em sys.sysobjvalues e o armazena em uma variável @ContentOfEncryptedObject
  2. Calcula @ObjectDataLength de DATALENGTH(@ContentOfEncryptedObject)/2 .
  3. Gera um ALTER PROCEDURE instrução preenchida para o comprimento correto com o - caractere (então neste caso ALTER PROCEDURE [dbo].[myproc] WITH ENCRYPTION AS------------ )
  4. Executa o ALTER instrução, recupera a versão criptografada de sys.sysobjvalues e armazena isso na variável @ContentOfFakeEncryptedObject em seguida, reverte a alteração.
  5. Gera um CREATE PROCEDURE instrução preenchida para o comprimento correto com o - caractere (então neste caso CREATE PROCEDURE [dbo].[myproc] WITH ENCRYPTION AS----------- ). Isso é armazenado na variável @ContentOfFakeObject

Em seguida, ele percorre @i = 1 to @ObjectDataLength e descriptografa a definição um caractere por vez usando o seguinte XOR Cálculo.
NCHAR(
      UNICODE(SUBSTRING(@ContentOfEncryptedObject, @i, 1)) ^
      (
          UNICODE(SUBSTRING(@ContentOfFakeObject, @i, 1)) ^
          UNICODE(SUBSTRING(@ContentOfFakeEncryptedObject, @i, 1))
      )
     )