sql >> Database >  >> RDS >> Sqlserver

Hoe de opgeslagen procedure in SQL Server 2008 te decoderen?

Het SQL Server Pro-artikel "Decrypt SQL Server Objects" werkt nog steeds in SQL Server 2008.

Je moet verbinding maken via de DAC. Zie het bestand "Decodeer SQL 2005 opgeslagen procedures, functies, triggers, views.sql" in de download .

Om de stappen samen te vatten die het uitvoert voor de volgende opgeslagen proceduredefinitie

CREATE PROC dbo.myproc
WITH ENCRYPTION
AS
SELECT 'FOO'
  1. Haalt de versleutelde objecttekst op uit de imageval kolom in sys.sysobjvalues en slaat het op in een variabele @ContentOfEncryptedObject
  2. Berekent @ObjectDataLength van DATALENGTH(@ContentOfEncryptedObject)/2 .
  3. Genereert een ALTER PROCEDURE verklaring opgevuld tot de juiste lengte met de - karakter (dus in dit geval ALTER PROCEDURE [dbo].[myproc] WITH ENCRYPTION AS------------ )
  4. Voert de ALTER . uit statement, haalt de versleutelde versie op uit sys.sysobjvalues en slaat dat op in de variabele @ContentOfFakeEncryptedObject rolt vervolgens de wijziging terug.
  5. Genereert een CREATE PROCEDURE verklaring opgevuld tot de juiste lengte met de - karakter (dus in dit geval CREATE PROCEDURE [dbo].[myproc] WITH ENCRYPTION AS----------- ). Dit wordt opgeslagen in de variabele @ContentOfFakeObject

Het loopt dan door voor @i = 1 to @ObjectDataLength en decodeert de definitie teken voor teken met behulp van de volgende XOR berekening.

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


  1. mysql group_concat met een telling erin?

  2. postgresql onderscheiden werkt niet

  3. MySQL-status weergeven - actieve of totale verbindingen?

  4. Verbinding maken met orakel vanuit c#