' Using sql code by Joseph Gama & ShoeBoy ' http://searchwindevelopment.techtarget.com/tip/0,289483,sid8_gci841704,00.html ' server = computername or ip address server = "127.0.0.1" ' database = database where encrypted sp's are database = "northwind" ' drop = if you want to make sure the decryption sp is dropped set to 1 else set to 0 drop = 1 'on error resume next set conn = createobject("adodb.connection") set rs = createobject("adodb.recordset") connstring = "Driver={SQL Server};Server=" & server & ";Database=" & database & ";Trusted_Connection=yes;" conn.open connstring set dropsp = conn.execute("drop PROCEDURE sp_decrypt_sp") set dropsp = nothing set createsp = conn.execute(getdecryptsp()) set createsp = nothing sql = "select name, count(*) as c from sysobjects inner join syscomments on sysobjects.id = syscomments.id where xtype = 'P' and encrypted = 1 group by name;" rs.open sql,conn set name = rs("name") set c = rs("c") do if c > 1 then wscript.echo name & " - To large to decrypt " else sql = "sp_decrypt_sp " & name & ";" set decrypt = conn.execute(sql) set decrypt = nothing if err.number = 0 then wscript.echo name & " - Decrypted " else wscript.echo name & " - Decryption Error " end if end if err.clear rs.movenext loop until rs.eof if drop = 1 then set dropsp = conn.execute("drop PROCEDURE sp_decrypt_sp") set dropsp = nothing end if function getdecryptsp() decryptsp = "" decryptsp = decryptsp & "create PROCEDURE sp_decrypt_sp (@objectName varchar(50))" & vbcrlf decryptsp = decryptsp & "AS" & vbcrlf decryptsp = decryptsp & "DECLARE @OrigSpText1 nvarchar(4000), @OrigSpText2 nvarchar(4000) , @OrigSpText3 nvarchar(4000), @resultsp nvarchar(4000)" & vbcrlf decryptsp = decryptsp & "declare @i int , @t bigint" & vbcrlf decryptsp = decryptsp & "" & vbcrlf decryptsp = decryptsp & "--get encrypted data" & vbcrlf decryptsp = decryptsp & "SET @OrigSpText1=(SELECT ctext FROM syscomments WHERE id = object_id(@objectName))" & vbcrlf decryptsp = decryptsp & "SET @OrigSpText2='ALTER PROCEDURE '+ @objectName +' WITH ENCRYPTION AS '+REPLICATE('-', 3938)" & vbcrlf decryptsp = decryptsp & "EXECUTE (@OrigSpText2)" & vbcrlf decryptsp = decryptsp & "" & vbcrlf decryptsp = decryptsp & "SET @OrigSpText3=(SELECT ctext FROM syscomments WHERE id = object_id(@objectName))" & vbcrlf decryptsp = decryptsp & "SET @OrigSpText2='CREATE PROCEDURE '+ @objectName +' WITH ENCRYPTION AS '+REPLICATE('-', 4000-62)" & vbcrlf decryptsp = decryptsp & "" & vbcrlf decryptsp = decryptsp & "--start counter" & vbcrlf decryptsp = decryptsp & "SET @i=1" & vbcrlf decryptsp = decryptsp & "--fill temporary variable" & vbcrlf decryptsp = decryptsp & "SET @resultsp = replicate(N'A', (datalength(@OrigSpText1) / 2))" & vbcrlf decryptsp = decryptsp & "" & vbcrlf decryptsp = decryptsp & "--loop" & vbcrlf decryptsp = decryptsp & "WHILE @i<=datalength(@OrigSpText1)/2" & vbcrlf decryptsp = decryptsp & "BEGIN" & vbcrlf decryptsp = decryptsp & "--reverse encryption (XOR original+bogus+bogus encrypted)" & vbcrlf decryptsp = decryptsp & "SET @resultsp = stuff(@resultsp, @i, 1, NCHAR(UNICODE(substring(@OrigSpText1, @i, 1)) ^" & vbcrlf decryptsp = decryptsp & " (UNICODE(substring(@OrigSpText2, @i, 1)) ^" & vbcrlf decryptsp = decryptsp & " UNICODE(substring(@OrigSpText3, @i, 1)))))" & vbcrlf decryptsp = decryptsp & " SET @i=@i+1" & vbcrlf decryptsp = decryptsp & "END" & vbcrlf decryptsp = decryptsp & "--drop original SP" & vbcrlf decryptsp = decryptsp & "EXECUTE ('drop PROCEDURE '+ @objectName)" & vbcrlf decryptsp = decryptsp & "--remove encryption" & vbcrlf decryptsp = decryptsp & "--preserve case" & vbcrlf decryptsp = decryptsp & "SET @resultsp=REPLACE((@resultsp),'WITH ENCRYPTION', '')" & vbcrlf decryptsp = decryptsp & "SET @resultsp=REPLACE((@resultsp),'With Encryption', '')" & vbcrlf decryptsp = decryptsp & "SET @resultsp=REPLACE((@resultsp),'with encryption', '')" & vbcrlf decryptsp = decryptsp & "IF CHARINDEX('WITH ENCRYPTION',UPPER(@resultsp) )>0 " & vbcrlf decryptsp = decryptsp & " SET @resultsp=REPLACE(UPPER(@resultsp),'WITH ENCRYPTION', '')" & vbcrlf decryptsp = decryptsp & "--replace Stored procedure without enryption" & vbcrlf decryptsp = decryptsp & "execute( @resultsp)" & vbcrlf getdecryptsp = decryptsp end function