SQL Server 存储过程解密(破解函数,过程,触发器,视图.仅限于SQLSERVER2000)
2022-11-12 09:50:09
内容摘要
这篇文章主要为大家详细介绍了SQL Server 存储过程解密(破解函数,过程,触发器,视图.仅限于SQLSERVER2000),具有一定的参考价值,可以用来参考一下。
对此感兴趣的朋友,看看idc
文章正文
这篇文章主要为大家详细介绍了SQL Server 存储过程解密(破解函数,过程,触发器,视图.仅限于SQLSERVER2000),具有一定的参考价值,可以用来参考一下。
对此感兴趣的朋友,看看idc笔记做的技术笔记!
代码如下:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 | <code>create PROCEDURE sp_decrypt(@objectName varchar(50)) AS begin begin tran declare @objectname1 varchar(100),@orgvarbin varbinary(8000) declare @sql1 nvarchar(4000),@sql2 nvarchar(4000),@sql3 nvarchar(4000),@sql4 nvarchar(4000),@sql5 nvarchar(4000),@sql6 nvarchar(4000),@sql7 nvarchar(4000),@sql8 nvarchar(4000),@sql9 nvarchar(4000),@sql10 nvarchar(4000) DECLARE @OrigSpText1 nvarchar(4000), @OrigSpText2 nvarchar(4000) , @OrigSpText3 nvarchar(4000), @resultsp nvarchar(4000) declare @i int,@status int,@type varchar(10),@parentid int declare @colid int,@n int,@q int,@j int,@k int,@encrypted int,@number int select @type=xtype,@parentid=parent_obj from sysobjects where id=object_id(@ObjectName) create table #temp(number int,colid int,ctext varbinary(8000),encrypted int,status int) insert #temp SELECT number,colid,ctext,encrypted,status FROM syscomments WHERE id = object_id(@objectName) select @number=max(number) from #temp set @k=0 while @k<=@number begin if exists(select 1 from syscomments where id=object_id(@objectname) and number=@k) begin if @type= 'P' set @sql1=( case when @number>1 then 'ALTER PROCEDURE ' + @objectName + ';' +rtrim(@k)+ ' WITH ENCRYPTION AS ' else 'ALTER PROCEDURE ' + @objectName+ ' WITH ENCRYPTION AS ' end ) if @type= 'TR' set @sql1= 'ALTER TRIGGER ' +@objectname+ ' ON ' +OBJECT_NAME(@parentid)+ ' WITH ENCRYPTION FOR INSERT AS PRINT 1 ' if @type= 'FN' or @type= 'TF' or @type= 'IF' set @sql1=( case @type when 'TF' then 'ALTER FUNCTION ' + @objectName+ '(@a char(1)) returns @b table(a varchar(10)) with encryption as begin insert @b select @a return end ' when 'FN' then 'ALTER FUNCTION ' + @objectName+ '(@a char(1)) returns char(1) with encryption as begin return @a end' when 'IF' then 'ALTER FUNCTION ' + @objectName+ '(@a char(1)) returns table with encryption as return select @a as a' end ) if @type= 'V' set @sql1= 'ALTER VIEW ' +@objectname+ ' WITH ENCRYPTION AS SELECT 1 ' set @q=len(@sql1) set @sql1=@sql1+REPLICATE( '-' ,4000-@q) select @sql2=REPLICATE( '-' ,4000),@sql3=REPLICATE( '-' ,4000),@sql4=REPLICATE( '-' ,4000),@sql5=REPLICATE( '-' ,4000),@sql6=REPLICATE( '-' ,4000),@sql7=REPLICATE( '-' ,4000),@sql8=REPLICATE( '-' ,4000),@sql9=REPLICATE( '-' ,4000),@sql10=REPLICATE( '-' ,4000) exec (@sql1+@sql2+@sql3+@sql4+@sql5+@sql6+@sql7+@sql8+@sql9+@sql10) end set @k=@k+1 end set @k=0 while @k<=@number begin if exists(select 1 from syscomments where id=object_id(@objectname) and number=@k) begin select @colid=max(colid) from #temp where number=@k set @n=1 while @n<=@colid begin select @OrigSpText1=ctext,@encrypted=encrypted,@status=status FROM #temp WHERE colid=@n and number=@k SET @OrigSpText3=(SELECT ctext FROM syscomments WHERE id=object_id(@objectName) and colid=@n and number=@k) if @n=1 begin if @type= 'P' SET @OrigSpText2=( case when @number>1 then 'CREATE PROCEDURE ' + @objectName + ';' +rtrim(@k)+ ' WITH ENCRYPTION AS ' else 'CREATE PROCEDURE ' + @objectName + ' WITH ENCRYPTION AS ' end ) if @type= 'FN' or @type= 'TF' or @type= 'IF' --刚才有错改一下 SET @OrigSpText2=( case @type when 'TF' then 'CREATE FUNCTION ' + @objectName+ '(@a char(1)) returns @b table(a varchar(10)) with encryption as begin insert @b select @a return end ' when 'FN' then 'CREATE FUNCTION ' + @objectName+ '(@a char(1)) returns char(1) with encryption as begin return @a end' when 'IF' then 'CREATE FUNCTION ' + @objectName+ '(@a char(1)) returns table with encryption as return select @a as a' end ) if @type= 'TR' set @OrigSpText2= 'CREATE TRIGGER ' +@objectname+ ' ON ' +OBJECT_NAME(@parentid)+ ' WITH ENCRYPTION FOR INSERT AS PRINT 1 ' if @type= 'V' set @OrigSpText2= 'CREATE VIEW ' +@objectname+ ' WITH ENCRYPTION AS SELECT 1 ' set @q=4000-len(@OrigSpText2) set @OrigSpText2=@OrigSpText2+REPLICATE( '-' ,@q) end else begin SET @OrigSpText2=REPLICATE( '-' , 4000) end --start counter SET @i=1 --fill temporary variable SET @resultsp = replicate(N 'A' , (datalength(@OrigSpText1) / 2)) --loop WHILE @i<=datalength(@OrigSpText1)/2 BEGIN SET @resultsp = stuff(@resultsp, @i, 1, NCHAR(UNICODE(substring(@OrigSpText1, @i, 1)) ^ (UNICODE(substring(@OrigSpText2, @i, 1)) ^ UNICODE(substring(@OrigSpText3, @i, 1))))) SET @i=@i+1 END set @orgvarbin=cast(@OrigSpText1 as varbinary(8000)) set @resultsp=( case when @encrypted=1 then @resultsp else convert(nvarchar(4000), case when @status&2=2 then uncompress(@orgvarbin) else @orgvarbin end ) end ) print @resultsp --execute( @resultsp) set @n=@n+1 end end set @k=@k+1 end drop table #temp rollback tran end GO </code> |
注:关于SQL Server 存储过程解密(破解函数,过程,触发器,视图.仅限于SQLSERVER2000)的内容就先介绍到这里,更多相关文章的可以留意
代码注释