Sqlserver
 sql >> Database >  >> RDS >> Sqlserver

Come decrittografare la stored procedure in SQL Server 2008

L'articolo di SQL Server Pro "Decrypt SQL Server Objects" funziona ancora in SQL Server 2008.

Devi connetterti tramite il DAC. Vedere il file "Decrypt SQL 2005 stored procedure, functions, triggers, views.sql" in il download .

Giusto per riassumere i passaggi che esegue per la seguente definizione di stored procedure

CREATE PROC dbo.myproc
WITH ENCRYPTION
AS
SELECT 'FOO'
  1. Recupera il testo dell'oggetto crittografato dal imageval colonna in sys.sysobjvalues e lo memorizza in una variabile @ContentOfEncryptedObject
  2. Calcola @ObjectDataLength da DATALENGTH(@ContentOfEncryptedObject)/2 .
  3. Genera un ALTER PROCEDURE istruzione riempita alla lunghezza corretta con - carattere (quindi in questo caso ALTER PROCEDURE [dbo].[myproc] WITH ENCRYPTION AS------------ )
  4. Esegue ALTER istruzione, recupera la versione crittografata da sys.sysobjvalues e lo memorizza nella variabile @ContentOfFakeEncryptedObject quindi annulla la modifica.
  5. Genera un CREATE PROCEDURE istruzione riempita alla lunghezza corretta con - carattere (quindi in questo caso CREATE PROCEDURE [dbo].[myproc] WITH ENCRYPTION AS----------- ). Questo viene memorizzato nella variabile @ContentOfFakeObject

Quindi passa da @i = 1 to @ObjectDataLength e decifra la definizione un carattere alla volta usando il seguente XOR calcolo.

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