sqlserver2000存储过程解密(转贴)

 

  1 None.gif if   exists  ( select   *   from  dbo.sysobjects  where  id  =   object_id (N ' [dbo].[sp_decrypt] ' and   OBJECTPROPERTY (id, N ' IsProcedure ' =   1 )
  2 None.gif drop   procedure   [ dbo ] . [ sp_decrypt ]
  3 None.gif GO
  4 None.gif
  5 ExpandedBlockStart.gifContractedBlock.gif /**/ /*--破解函数,过程,触发器,视图.仅限于SQLSERVER2000
  6InBlock.gif
  7ExpandedBlockEnd.gif--作者:J9988--*/

  8 ExpandedBlockStart.gifContractedBlock.gif /**/ /*--调用示例
  9InBlock.gif
 10InBlock.gif    --解密指定存储过程
 11InBlock.gif    exec sp_decrypt 'AppSP_test'
 12InBlock.gif
 13InBlock.gif    --对所有的存储过程解密
 14InBlock.gif    declare tb cursor for
 15InBlock.gif    select name from sysobjects where xtype='P' and status>0 and name<>'sp_decrypt'
 16InBlock.gif    
 17InBlock.gif    declare @name sysname
 18InBlock.gif    open tb
 19InBlock.gif    fetch next from tb into @name
 20InBlock.gif    while @@fetch_status=0
 21InBlock.gif    begin
 22ExpandedBlockEnd.gif        print '/*-------存储过程 ['+@name+'] -----------*/
'
 23 None.gif        exec sp_decrypt @name
 24 None.gif        fetch next from tb into @name
 25 None.gif    end
 26 None.gif    close tb
 27 None.gif    deallocate tb
 28 None.gif--*/
 29 None.gif
 30 None.gifif exists (select * from dbo.sysobjects where id = object_id(N '[ dbo ] . [ SP_DECRYPT ]' ) and OBJECTPROPERTY(id, N ' IsProcedure ' ) = 1)
 31 None.gif    drop procedure [dbo].[SP_DECRYPT]
 32 None.gifGO
 33 None.gif
 34 None.gifCREATE  PROCEDURE sp_decrypt(@objectName varchar(50))
 35 None.gifAS
 36 None.gifbegin
 37 None.gifset nocount on
 38 None.gif--CSDN:j9988 copyright:2004.04.15 
 39 None.gif--V3.1 
 40 None.gif--破解字节不受限制,适用于SQLSERVER2000存储过程,函数,视图,触发器
 41 None.gif--修正上一版视图触发器不能正确解密错误
 42 None.gif--发现有错,请E_MAIL:CSDNj9988@tom.com
 43 None.gifbegin tran
 44 None.gifdeclare @objectname1 varchar(100),@orgvarbin varbinary(8000)
 45 None.gifdeclare @sql1 nvarchar(4000),@sql2 varchar(8000),@sql3 nvarchar(4000),@sql4 nvarchar(4000)
 46 None.gifDECLARE  @OrigSpText1 nvarchar(4000),  @OrigSpText2 nvarchar(4000) , @OrigSpText3 nvarchar(4000), @resultsp nvarchar(4000)
 47 None.gifdeclare  @i int,@status int,@type varchar(10),@parentid int
 48 None.gifdeclare @colid int,@n int,@q int,@j int,@k int,@encrypted int,@number int
 49 None.gifselect @type=xtype,@parentid=parent_obj from sysobjects where id=object_id(@ObjectName)
 50 None.gif
 51 None.gifcreate table  #temp(number int,colid int,ctext varbinary(8000),encrypted int,status int)
 52 None.gifinsert #temp SELECT number,colid,ctext,encrypted,status FROM syscomments  WHERE id = object_id(@objectName)
 53 None.gifselect @number=max(number) from #temp
 54 None.gifset @k=0
 55 None.gif
 56 None.gifwhile @k<=@number 
 57 None.gifbegin
 58 None.gifif exists(select 1 from syscomments where id=object_id(@objectname) and number=@k)
 59 None.gifbegin
 60 None.gifif @type= ' P '
 61 None.gifset @sql1=(case when @number>1 then  ' ALTER   PROCEDURE   ' + @objectName + ' ; ' +rtrim(@k)+ '   WITH  ENCRYPTION  AS   '
 62 None.gif                          else  ' ALTER   PROCEDURE   ' + @objectName+ '   WITH  ENCRYPTION  AS   '
 63 None.gif                          end)
 64 None.gif
 65 None.gifif @type= ' TR '
 66 None.gifbegin
 67 None.gifdeclare @parent_obj varchar(255),@tr_parent_xtype varchar(10)
 68 None.gifselect @parent_obj=parent_obj from sysobjects where id=object_id(@objectName)
 69 None.gifselect @tr_parent_xtype=xtype from sysobjects where id=@parent_obj
 70 None.gifif @tr_parent_xtype= ' V '
 71 None.gifbegin
 72 None.gifset @sql1= ' ALTER   TRIGGER   ' +@objectname+ '   ON   ' +OBJECT_NAME(@parentid)+ '   WITH  ENCRYPTION INSTERD  OF   INSERT   AS   PRINT   1   '
 73 None.gifend
 74 None.gifelse
 75 None.gifbegin
 76 None.gifset @sql1= ' ALTER   TRIGGER   ' +@objectname+ '   ON   ' +OBJECT_NAME(@parentid)+ '   WITH  ENCRYPTION  FOR   INSERT   AS   PRINT   1   '
 77 None.gifend
 78 None.gif
 79 None.gifend
 80 None.gifif @type= ' FN '  or @type= ' TF '  or @type= ' IF '
 81 None.gifset @sql1=(case @type when  ' TF '  then 
 82 None.gif ' ALTER   FUNCTION   ' + @objectName+ ' ( @a   char ( 1 ))  returns   @b   table (a  varchar ( 10 ))  with  encryption  as   begin   insert   @b   select   @a   return   end   '
 83 None.gifwhen  ' FN '  then
 84 None.gif ' ALTER   FUNCTION   ' + @objectName+ ' ( @a   char ( 1 ))  returns   char ( 1 with  encryption  as   begin   return   @a   end '
 85 None.gifwhen  ' IF '  then
 86 None.gif ' ALTER   FUNCTION   ' + @objectName+ ' ( @a   char ( 1 ))  returns   table   with  encryption  as   return   select   @a   as  a '
 87 None.gifend)
 88 None.gif
 89 None.gifif @type= ' V '
 90 None.gifset @sql1= ' ALTER   VIEW   ' +@objectname+ '   WITH  ENCRYPTION  AS   SELECT   1   as  f '
 91 None.gif
 92 None.gifset @q=len(@sql1)
 93 None.gifset @sql1=@sql1+REPLICATE( ' - ' ,4000-@q)
 94 None.gifselect @sql2=REPLICATE( ' - ' ,8000)
 95 None.gifset @sql3= ' exec ( @sql1 '
 96 None.gifselect @colid=max(colid) from #temp where number=@k 
 97 None.gifset @n=1
 98 None.gifwhile @n<=CEILING(1.0*(@colid-1)/2) and len(@sQL3)<=3996
 99 None.gifbegin 
100 None.gifset @sql3=@sql3+ ' + @ '
101 None.gifset @n=@n+1
102 None.gifend
103 None.gifset @sql3=@sql3+ ' ) '
104 None.gifexec sp_executesql @sql3,N ' @sql1   nvarchar ( 4000 ),@  varchar ( 8000 ) ' ,@sql1=@sql1,@=@sql2
105 None.gif
106 None.gifend
107 None.gifset @k=@k+1
108 None.gifend
109 None.gif
110 None.gifset @k=0
111 None.gifwhile @k<=@number 
112 None.gifbegin
113 None.gif
114 None.gifif exists(select 1 from syscomments where id=object_id(@objectname) and number=@k)
115 None.gifbegin
116 None.gifselect @colid=max(colid) from #temp where number=@k 
117 None.gifset @n=1
118 None.gif
119 None.gifwhile @n<=@colid
120 None.gifbegin
121 None.gifselect @OrigSpText1=ctext,@encrypted=encrypted,@status=status FROM #temp  WHERE colid=@n and number=@k
122 None.gif
123 None.gifSET @OrigSpText3=(SELECT ctext FROM syscomments WHERE id=object_id(@objectName) and colid=@n and number=@k)
124 None.gifif @n=1
125 None.gifbegin
126 None.gifif @type= ' P '
127 None.gifSET @OrigSpText2=(case when @number>1 then  ' CREATE   PROCEDURE   ' + @objectName + ' ; ' +rtrim(@k)+ '   WITH  ENCRYPTION  AS   '
128 None.gif                       else  ' CREATE   PROCEDURE   ' + @objectName + '   WITH  ENCRYPTION  AS   '
129 None.gif                       end)
130 None.gif
131 None.gif
132 None.gifif @type= ' FN '  or @type= ' TF '  or @type= ' IF '
133 None.gifSET @OrigSpText2=(case @type when  ' TF '  then 
134 None.gif ' CREATE   FUNCTION   ' + @objectName+ ' ( @a   char ( 1 ))  returns   @b   table (a  varchar ( 10 ))  with  encryption  as   begin   insert   @b   select   @a   return   end   '
135 None.gifwhen  ' FN '  then
136 None.gif ' CREATE   FUNCTION   ' + @objectName+ ' ( @a   char ( 1 ))  returns   char ( 1 with  encryption  as   begin   return   @a   end '
137 None.gifwhen  ' IF '  then
138 None.gif ' CREATE   FUNCTION   ' + @objectName+ ' ( @a   char ( 1 ))  returns   table   with  encryption  as   return   select   @a   as  a '
139 None.gifend)
140 None.gif
141 None.gifif @type= ' TR '  
142 None.gifbegin
143 None.gif
144 None.gifif @tr_parent_xtype= ' V '
145 None.gifbegin
146 None.gifset @OrigSpText2= ' CREATE   TRIGGER   ' +@objectname+ '   ON   ' +OBJECT_NAME(@parentid)+ '   WITH  ENCRYPTION INSTEAD  OF   INSERT   AS   PRINT   1   '
147 None.gifend
148 None.gifelse
149 None.gifbegin
150 None.gifset @OrigSpText2= ' CREATE   TRIGGER   ' +@objectname+ '   ON   ' +OBJECT_NAME(@parentid)+ '   WITH  ENCRYPTION  FOR   INSERT   AS   PRINT   1   '
151 None.gifend
152 None.gif
153 None.gifend
154 None.gif
155 None.gifif @type= ' V '
156 None.gifset @OrigSpText2= ' CREATE   VIEW   ' +@objectname+ '   WITH  ENCRYPTION  AS   SELECT   1   as  f '
157 None.gif
158 None.gifset @q=4000-len(@OrigSpText2)
159 None.gifset @OrigSpText2=@OrigSpText2+REPLICATE( ' - ' ,@q)
160 None.gifend
161 None.gifelse
162 None.gifbegin
163 None.gifSET @OrigSpText2=REPLICATE( ' - ' , 4000)
164 None.gifend
165 None.gifSET @i=1
166 None.gif
167 None.gifSET @resultsp = replicate(N ' A ' , (datalength(@OrigSpText1) / 2))
168 None.gif
169 None.gifWHILE @i<=datalength(@OrigSpText1)/2
170 None.gifBEGIN
171 None.gif
172 None.gifSET @resultsp = stuff(@resultsp, @i, 1, NCHAR(UNICODE(substring(@OrigSpText1, @i, 1)) ^
173 None.gif                                (UNICODE(substring(@OrigSpText2, @i, 1)) ^
174 None.gif                                UNICODE(substring(@OrigSpText3, @i, 1)))))
175 None.gif    SET @i=@i+1
176 None.gifEND
177 None.gifset @orgvarbin=cast(@OrigSpText1 as varbinary(8000))
178 None.gifset @resultsp=(case when @encrypted=1 
179 None.gif                    then @resultsp 
180 None.gif                    else convert(nvarchar(4000),case when @status&2=2 then uncompress(@orgvarbin) else @orgvarbin end)
181 None.gif               end)
182 None.gifprint @resultsp
183 None.gif
184 None.gifset @n=@n+1
185 None.gif
186 None.gifend
187 None.gif
188 None.gifend
189 None.gifset @k=@k+1
190 None.gifend
191 None.gif
192 None.gifdrop table #temp
193 None.gifrollback tran
194 None.gifend
195 None.gif

转载于:https://www.cnblogs.com/rock_chen/archive/2005/05/15/155674.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值