如何破解函数加密
如何破解函数加密。听说有个系统自代的方法。
------解决方案--------------------破解SQL SERVER 加密存储过程,函数,触发器,视图  
 create PROCEDURE sp_decrypt(@objectName varchar(50)) 
 AS 
 begin 
 set nocount on 
 --CSDN:j9988 copyright:2004.01.05  
 --V3.1 
 --破解字节不受限制,适用于SQLSERVER2000存储过程,函数,视图,触发器 
 --发现有错,请E_MAIL:CSDNj9988@tom.com 
 begin tran 
 declare @objectname1 varchar(100),@orgvarbin varbinary(8000) 
 declare @sql1 nvarchar(4000),@sql2 varchar(8000),@sql3 nvarchar(4000),@sql4 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 as f\ '   
 set @q=len(@sql1) 
 set @sql1=@sql1+REPLICATE(\ '-\ ',4000-@q) 
 select @sql2=REPLICATE(\ '-\ ',8000) 
 set @sql3=\ 'exec(@sql1\ ' 
 select @colid=max(colid) from #temp where number=@k  
 set @n=1 
 while @n <=CEILING(1.0*(@colid-1)/2) and len(@sQL3) <=3996 
 begin  
 set @sql3=@sql3+\ '+@\ ' 
 set @n=@n+1 
 end 
 set @sql3=@sql3+\ ')\ ' 
 exec sp_executesql @sql3,N\ '@Sql1 nvarchar(4000),@ varchar(8000)\ ',@sql1=@sql1,@=@sql2   
 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)+\ '