Hej! Det går inte, man måste ha källkoden till proceduren på annat håll för att ändra i dem om man krypterar dem på servern. Det är för att man ska kunna skydda sitt intellektuella kapital om man säljer standardlösningar. Men va i... Vilken version är det? MS SQL 7.0 naturligtvis.. Kommer ej ihåg, har haft det ett tag. Nån säkerhetssite, eller kanske i bugtraq listan.... Annars finns förresten det utmärkta verktyget dSQLSRVD. Ladda ner från http://www.geocities.com/d0mn4r/dSQLSRVD.html. Med det kan du få definitionen på alla de krypterade procedurerna på en gång, i ett script. Bara att ändra vad du vill och sen köra in igen, okrypterat. :) Hmm.. Alltså.. För att jag ska fatta vad du menade.. CREATE PROCEDURE foo Tänkte bara berätta att det där programmet funkade så jäklans bra!!!Dekryptera Stored procedure...
Var ute hos en kund och behövde ändra lite i en stored procedure som gör nåt galet..
Men när jag ska titta på den ser den ut mycket mysko..
exec(decrypt(0x22F1E519B1838846315FEB877F3CE31F01702806C714ACBBECB169571837F868631FD7C.......
Jag har aldrig sett nåt liknande men det kan väl inte vara så hemligt eller?
Hur löser man upp den?
Mvh
RickardSv: Dekryptera Stored procedure...
Om någon gjort så på mitt företag och inte sparat sp'n någon annan stans skulle jag nog halshugga dem ;)
/johan/Sv: Dekryptera Stored procedure...
Läste lite grann hos microsoft om det där också.. Det går inte enligt dom
heller...
Men det är väl klart att det gör??
Det är ingen på mitt företag som gjort den utan nåt som en
konkurrerande lev till oss gjort åt en av våra kunder..
Dom har lovat all källkod till kunden men lämnar aldrig ut den vilket fått
mej att tröttna..
(Dom är dessutom history där numera vilket nog bidrar till besväret..)
Excel dokumentet med vbscript som använder den här spn knäckte jag ju lätt lösenordet på men det här verkar ju lurigare..
Finns det ingen nyckel nånstanns lagrad som svarar mot den här
krypteringen som med ett "enkelt" litet program kan lösa upp det..
eller?
Mvh
RickardSv: Dekryptera Stored procedure...
Om det gäller SQL Server 2k kan du använda följande lilla enkla metod för att se originalkoden. OBS! Denna kod ändrar definitionen på proceduren, så om du vill ha tillbaks den till originalet så avkommentera de två sista raderna.
SET NOCOUNT ON
go
CREATE PROCEDURE foo
WITH ENCRYPTION
AS
PRINT 'Den superhemliga proceduren'
GO
CREATE TABLE #tempcomments (
ID int PRIMARY KEY NOT NULL
,ctext nvarchar(4000) NOT NULL
)
GO
INSERT INTO #tempcomments
SELECT 1, ctext FROM syscomments WHERE id = object_id('foo')
GO
ALTER PROCEDURE foo
WITH ENCRYPTION
AS
------------------------------------------------------------------------------
------------------------------------------------------------------------------
print 'Jag är en hacker.'
GO
INSERT INTO #tempcomments
SELECT 2, ctext FROM syscomments WHERE id = object_id('foo')
GO
DECLARE @origcryptstr nvarchar(4000)
,@origplainstr nvarchar(4000)
,@knownplainstr nvarchar(4000)
,@knowncryptstr nvarchar(4000)
DECLARE @length int
,@counter int
SELECT @origcryptstr = ctext FROM #tempcomments WHERE ID = 1
SELECT @knowncryptstr = ctext FROM #tempcomments WHERE ID = 2
SELECT @knownplainstr = N'CREATE PROCEDURE foo
WITH ENCRYPTION
AS
------------------------------------------------------------------------------
------------------------------------------------------------------------------
print ''Jag är en hacker.''
'
set @length = datalength(@origcryptstr)
set @origplainstr = replicate(N'A', (@length / 2))
set @counter = 1
while (@counter <= (@length / 2))
begin
SELECT @origplainstr = stuff(@origplainstr, @counter, 1,
NCHAR(UNICODE(substring(@origcryptstr, @counter, 1)) ^
(UNICODE(substring(@knowncryptstr, @counter, 1)) ^
UNICODE(substring(@knownplainstr, @counter, 1)))))
set @counter = @counter + 1
end
select @origplainstr
-- exec ('drop procedure foo')
-- exec (@origplainstr)
På egen risk förstås...Sv: Dekryptera Stored procedure...
Vi hade tänkt uppgradera den till 2000 men nu vetesjuttsingen.. Tänk
om man måste ladda om dom där sp:na.. då går ju inte det om jag fattat
problemet rätt..
Men nu är vi helt klart på rätt väg..
Var har du hittat det där micklet??
Mvh
RickardSv: Dekryptera Stored procedure...
Jag har inte provat den själv, men detta ska fungera på SQL Server 7:
...
hmm. Gick inte att posta till forumet. Jag mailar dig istället.Sv: Dekryptera Stored procedure...
Sv: Dekryptera Stored procedure...
Det här kan jag köra från Query Analyser..
Print 'Den superhemliga proceduren' ska bytas ut mot
print 'D0010' som den heter eller?
Vad gör print 'jag är en hacker' ? Ingenting eller?
Mvh
RickardSv: Dekryptera Stored procedure...
WITH ENCRYPTION
AS
PRINT 'Den superhemliga proceduren'
GO
Alltså, detta behöver du egentligen inte köra. Det var bara ett exempel. Men detta är alltså den procedur du vill avkoda. Om du vill testa det kan du skapa denna proceduren foo, annars är det ju bara att skippa att skapa proceduren och byta ut foo mot namnet på den procedur du vill avkoda på riktigt.
> Vad gör print 'jag är en hacker' ? Ingenting eller?
Jo, det skriver ut Jag är en hacker. :)
Nej, men allvarligt, det är bara till för att du ska ha en känd sträng vilken du även har i krypterat format, för att kunna dekryptera den andra strängen. Därav att jag la med de två sista raderna som kan lägga tillbaks originalproceduren igen efter att ha skrivit ut den (observera att den t o m krypteras igen).Sv: Dekryptera Stored procedure...
Kan helt klart rekommenderas vidare..
Dundertack!
//Rickard