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'
- Recupera il testo dell'oggetto crittografato dal
imageval
colonna insys.sysobjvalues
e lo memorizza in una variabile@ContentOfEncryptedObject
- Calcola
@ObjectDataLength
daDATALENGTH(@ContentOfEncryptedObject)/2
. - Genera un
ALTER PROCEDURE
istruzione riempita alla lunghezza corretta con-
carattere (quindi in questo casoALTER PROCEDURE [dbo].[myproc] WITH ENCRYPTION AS------------
) - Esegue
ALTER
istruzione, recupera la versione crittografata dasys.sysobjvalues
e lo memorizza nella variabile@ContentOfFakeEncryptedObject
quindi annulla la modifica. - Genera un
CREATE PROCEDURE
istruzione riempita alla lunghezza corretta con-
carattere (quindi in questo casoCREATE 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))
)
)