Sqlserver
 sql >> Base de données >  >> RDS >> Sqlserver

Comment déchiffrer une procédure stockée dans SQL Server 2008

L'article SQL Server Pro "Décrypter les objets SQL Server" fonctionne toujours dans SQL Server 2008.

Vous devez vous connecter via le DAC. Voir le fichier "Décrypter les procédures stockées SQL 2005, les fonctions, les déclencheurs, les vues.sql" dans le téléchargement .

Juste pour résumer les étapes qu'il effectue pour la définition de procédure stockée suivante

CREATE PROC dbo.myproc
WITH ENCRYPTION
AS
SELECT 'FOO'
  1. Récupère le texte de l'objet chiffré à partir de imageval colonne dans sys.sysobjvalues et le stocke dans une variable @ContentOfEncryptedObject
  2. Calcule @ObjectDataLength de DATALENGTH(@ContentOfEncryptedObject)/2 .
  3. Génère une ALTER PROCEDURE déclaration complétée à la bonne longueur avec le - caractère (donc dans ce cas ALTER PROCEDURE [dbo].[myproc] WITH ENCRYPTION AS------------ )
  4. Exécute le ALTER instruction, récupère la version chiffrée de sys.sysobjvalues et stocke cela dans la variable @ContentOfFakeEncryptedObject annule ensuite la modification.
  5. Génère une CREATE PROCEDURE déclaration complétée à la bonne longueur avec le - caractère (donc dans ce cas CREATE PROCEDURE [dbo].[myproc] WITH ENCRYPTION AS----------- ). Ceci est stocké dans la variable @ContentOfFakeObject

Il boucle ensuite pour @i = 1 to @ObjectDataLength et déchiffre la définition un caractère à la fois en utilisant le XOR suivant calcul.

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