sql >> Base de Datos >  >> RDS >> Sqlserver

Cómo descifrar el procedimiento almacenado en SQL Server 2008

El artículo de SQL Server Pro "Descifrar objetos de SQL Server" todavía funciona en SQL Server 2008.

Necesitas conectarte a través del DAC. Consulte el archivo "Descifrar procedimientos almacenados, funciones, disparadores, vistas de SQL 2005". ">la descarga .

Solo para resumir los pasos que realiza para la siguiente definición de procedimiento almacenado

CREATE PROC dbo.myproc
WITH ENCRYPTION
AS
SELECT 'FOO'
  1. Recupera el texto del objeto encriptado del imageval columna en sys.sysobjvalues y lo almacena en una variable @ContentOfEncryptedObject
  2. Calcula @ObjectDataLength de DATALENGTH(@ContentOfEncryptedObject)/2 .
  3. Genera un ALTER PROCEDURE declaración rellenada a la longitud correcta con el - carácter (entonces en este caso ALTER PROCEDURE [dbo].[myproc] WITH ENCRYPTION AS------------ )
  4. Ejecuta ALTER declaración, recupera la versión cifrada de sys.sysobjvalues y lo almacena en la variable @ContentOfFakeEncryptedObject luego revierte el cambio.
  5. Genera un CREATE PROCEDURE declaración rellenada a la longitud correcta con el - carácter (así que en este caso CREATE PROCEDURE [dbo].[myproc] WITH ENCRYPTION AS----------- ). Esto se almacena en la variable @ContentOfFakeObject

Luego recorre para @i = 1 to @ObjectDataLength y descifra la definición un carácter a la vez usando el siguiente XOR cálculo.

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