Jak wyświetlić zaszyfrowany widok lub procedurę przechowywaną


27

Pracuję na bazie danych stron trzecich.

Gdy próbuję wyświetlić definicję widoku, klikając prawym przyciskiem myszy, CREATE TOa następnie NEW QUERY EDIT WINDOW, pojawia się błąd:

Ta właściwość może nie istnieć dla tego obiektu lub może nie być możliwa do odzyskania z powodu niewystarczających praw dostępu. Tekst jest zaszyfrowany.


W razie potrzeby można również uruchomić śledzenie profilowania SQL i uchwycić, co SP SP robi w ten sposób.
Pimp Juice IT

Czy możliwe jest uzyskanie zaszyfrowanego tsql poprzez profiler sql? @PimpJuiceIT
wenzzzel

@wenzzzel Wydaje mi się, że tak, ale nie pamiętam, aby powiedzieć to ze 100% dokładnością, ale wierzę, że w przeszłości z zaszyfrowanym SP, uruchomiłem śledzenie profilera, aby zobaczyć, co było potrzebne. W tej chwili nie obsługuję żadnych środowisk, w których mogę to potwierdzić, ale wierzę, że możesz zobaczyć, co działa ze śledzeniem profilu, nawet jeśli pochodzi on z zaszyfrowanego procesu.
Pimp Juice IT

Okej, nie jestem tego taki pewien, bo dostaję tylko-- Encrypted text
wenzzzel

Odpowiedzi:



18

Mam dość szczegółowy opis o tym problemie tutaj .

Krótko mówiąc, obiekt nie jest tak naprawdę zaszyfrowany, ale raczej zaciemniony. Dlatego możemy odzyskać oryginał. Metoda jest trochę zaangażowana, ale składa się z następujących kroków:

  1. Połącz się z instancją za pomocą dedykowanego połączenia administracyjnego
  2. Wybierz zaciemniony kod w ten sposób:

    SELECT @secret = imageval
    FROM   sys.sysobjvalues
    WHERE  objid = OBJECT_ID(@object_name);
    
  3. Zastąp obiekt innym, który ma tę samą nazwę identyczny identyfikator_obiektu i taką samą długość w bajtach (np. Używając ALTER PROCEDURE)

  4. Pobierz nowo zaciemniony kod w taki sam sposób jak powyżej
  5. XOR trzy wartości razem (zaciemniony oryginał, zamiennik i zaciemniony zamiennik)

To da ci oryginalny kod. Jednak, jak wspomniano Kin, może to być wsparcie, a nawet konsekwencje prawne, dlatego najpierw skonsultuj się z prawnikiem.


14

Tekst modułu jest szyfrowany za pomocą szyfru strumieniowego RC4 .

Klucz inicjalizacji RC4 jest obliczany na podstawie skrótu SHA-1 :

  • GUID rodzina bazy danych (z sys.database_recovery_status )
    Budynek z uniqueidentifier do binarnego (16)
  • Identyfikator obiektu modułu (z widoków katalogu)
    Przekształcony z liczb całkowitych na binarne little-endian (4)
  • Sub-ID obiektu modułu
    Przekształcony z smallint na binarny little-endian (2) .

Sub-ID obiektu modułu to:

  • 1 dla nienumerowanej procedury składowanej; lub
  • Numer procedury dla (nieaktualnej) numerowanej procedury składowanej; lub
  • 0 w przeciwnym razie.

Odpowiednio uprzywilejowany użytkownik może następnie odszyfrować moduł poprzez:

  1. Uzyskiwanie zaszyfrowanego pliku binarnego z sys.sysobjvalues (przy użyciu DAC)
  2. Obliczanie klucza RC4 jak opisano powyżej
  3. Uruchamianie znanego standardowego algorytmu RC4 na pliku binarnym
  4. Konwersja wyniku z pliku binarnego na nvarchar (maks.)

Więcej szczegółów i pełne wdrożenie kodu w moim artykule:

The Internals of WITH ENCRYPTION


Myślę, że jest to najprostsze, niekomercyjne podejście, w którym zainstalowanie narzędzia innej firmy nie jest wykonalnym rozwiązaniem.
John Eisbrener

12

Możesz połączyć się z SQL Server za pomocą Dedicated Administrator Connection (DAC), a następnie wyświetlić tekst SQL procedury składowanej. Podłącz do DAC za pomocą:

admin:Your_Servername

Pełne kroki potrzebne w tej odpowiedzi można znaleźć na stronie Przepełnienie stosu autorstwa Martina Smitha .

Inną alternatywą jest użycie niektórych skryptów stron trzecich, jak wspomniano w Deszyfrowaniu zaszyfrowanych procedur przechowywanych, widoków, funkcji w SQL Server 2005, 2008 i R2

Na marginesie - jeśli jest to baza danych strony trzeciej i jeśli robisz to na prod, to czy sprzedawca ją obsługuje? Może istnieć dobry powód do szyfrowania SP lub widoków. Prawdopodobnie lepiej jest zrobić kopię zapasową, a następnie bawić się nią.


8

Jeśli chcesz wyświetlić podgląd oryginalnego skryptu DDL lub odszyfrować zaszyfrowany obiekt, możesz sprawdzić Deszyfrowanie ApexSQL

To bezpłatne, samodzielne narzędzie z opcją integracji z SSMS, podgląd oryginalnego skryptu DDL. Ponadto możesz odszyfrować obiekty znajdujące się na wielu serwerach w jednej turze. Kolejnym narzędziem, które może ci pomóc, jest dbForge SQL Decryptor


0

Metoda, której często używam do odszyfrowywania kilku procedur przechowywanych jednocześnie ...

Użyj narzędzia SQL Compare firmy RedGate i porównaj bazę danych z pustą bazą danych (lub dowolną znaną bazą danych, która nie będzie miała procedur przechowywanych). Utwórz skrypt wdrażania i skopiuj do SSMS. Znajdź i zamień NA SZYFROWANIE na białe spacje. Następnie zmień opcję CREATE PROCEDURE na ALTER PROCEDURE. Uruchom skrypt RedGate w stosunku do oryginalnej bazy danych, a całe szyfrowanie procedury przechowywanej zostało usunięte.

Miałem bazę danych z ponad 400 procedurami przechowywanymi i chociaż podpowiedź SQL jest przydatna, nie warto poświęcać czasu na klikanie prawym przyciskiem, kopiowanie i wklejanie ponad 400 procedur przechowywanych. Za pomocą RedGate SQL Compare byłem w stanie usunąć szyfrowanie z moich ponad 400 procedur przechowywanych w mniej więcej 10 minut.

Korzystając z naszej strony potwierdzasz, że przeczytałeś(-aś) i rozumiesz nasze zasady używania plików cookie i zasady ochrony prywatności.
Licensed under cc by-sa 3.0 with attribution required.