Sql存储过程解密方法

在网上查到这样一个存储过程解密的方法,用起来简单,收藏到这里:

 1 CREATE     PROCEDURE   sp_decrypt_sp   (@objectName   varchar(50))  
 2   AS  
 3   ------------------------sql2000大于40000的-----------------  
 4   --原作:j9988   号:J老师  
 5    
 6   begin   tran  
 7   begin  
 8   declare   @objectname1   varchar(100)  
 9   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)      
10   DECLARE     @OrigSpText1   nvarchar(4000),     @OrigSpText2   nvarchar(4000)   ,   @OrigSpText3   nvarchar(4000),   @resultsp   nvarchar(4000)  
11   declare     @i   int   ,   @t   bigint  
12   declare   @m   int,@n   int,@q   int  
13   set   @m=(SELECT   max(colid)   FROM   syscomments     WHERE   id   =   object_id(@objectName))  
14   set   @n=1  
15   --get   encrypted   data  
16   create   table     #temp(colid   int,ctext   varbinary(8000))  
17   insert   #temp   SELECT   colid,ctext   FROM   syscomments     WHERE   id   =   object_id(@objectName)  
18   set   @sql1='ALTER   PROCEDURE   '+   @objectName   +'   WITH   ENCRYPTION   AS   '  
19   --set   @sql1='ALTER   PROCEDURE   '+   @objectName   +'   WITH   ENCRYPTION   AS   '  
20   set   @q=len(@sql1)  
21   set   @sql1=@sql1+REPLICATE('-',4000-@q)  
22   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)  
23   exec(@sql1+@sql2+@sql3+@sql4+@sql5+@sql6+@sql7+@sql8+@sql9+@sql10)  
24   while   @n<=@m  
25   begin  
26   SET   @OrigSpText1=(SELECT   ctext   FROM   #temp     WHERE   colid=@n)  
27   set   @objectname1=@objectname+'_t'  
28   SET   @OrigSpText3=(SELECT   ctext   FROM   syscomments   WHERE   id=object_id(@objectName)   and   colid=@n)  
29   if   @n=1  
30   begin  
31   SET   @OrigSpText2='CREATE   PROCEDURE   '+   @objectName   +'   WITH   ENCRYPTION   AS   '--  
32   set   @q=4000-len(@OrigSpText2)  
33   set   @OrigSpText2=@OrigSpText2+REPLICATE('-',@q)  
34   end  
35   else  
36   begin  
37   SET   @OrigSpText2=REPLICATE('-',   4000)  
38   end  
39   --start   counter  
40   SET   @i=1  
41   --fill   temporary   variable  
42   SET   @resultsp   =   replicate(N'A',   (datalength(@OrigSpText1)   /   2))  
43    
44   --loop  
45   WHILE   @i<=datalength(@OrigSpText1)/2  
46   BEGIN  
47   --reverse   encryption   (XOR   original+bogus+bogus   encrypted)  
48   SET   @resultsp   =   stuff(@resultsp,   @i,   1,   NCHAR(UNICODE(substring(@OrigSpText1,   @i,   1))   ^  
49                                                                   (UNICODE(substring(@OrigSpText2,   @i,   1))   ^  
50                                                                   UNICODE(substring(@OrigSpText3,   @i,   1)))))  
51           SET   @i=@i+1  
52   END  
53   --drop   original   SP  
54   --EXECUTE   ('drop   PROCEDURE   '+   @objectName)  
55   --remove   encryption  
56   --preserve   case  
57   SET   @resultsp=REPLACE((@resultsp),'WITH   ENCRYPTION',   '')  
58   SET   @resultsp=REPLACE((@resultsp),'With   Encryption',   '')  
59   SET   @resultsp=REPLACE((@resultsp),'with   encryption',   '')  
60   IF   CHARINDEX('WITH   ENCRYPTION',UPPER(@resultsp)   )>0    
61       SET   @resultsp=REPLACE(UPPER(@resultsp),'WITH   ENCRYPTION',   '')  
62   --replace   Stored   procedure   without   enryption  
63   print   @resultsp  
64   --execute(   @resultsp)  
65   set   @n=@n+1  
66   end  
67   drop   table   #temp  
68   end  
69   rollback   tran  
70   --适合40000字符。  
71   --每次4000 print出来,自已贴。  
72   --切记:我见过的解过程都是对原过程进行破坏。破解前一定要备份!!!!  
73   --超过40000的,自已加SQL(我上面用SQL.SQL2--SQL10)  
74   --超长的可加SQL11--sql20........  
75    
76    
77   GO
原文地址:https://www.cnblogs.com/Chaser-Eagle/p/3684864.html