解密SQL SERVER預存程序

來源:互聯網
上載者:User
if   exists   (select   *   from   dbo.sysobjects   where   id   =   object_id(N'[dbo].[sp_decrypt]')   and   OBJECTPROPERTY(id,   N'IsProcedure')   =   1)  
  drop   procedure   [dbo].[sp_decrypt]  
  GO  
   
  /*--破解函數,過程,觸發器,視圖.僅限於SQLSERVER2000  
   
  --作者:J9988--*/  
  /*--調用樣本  
   
  --解密指定預存程序  
  exec   sp_decrypt   'AppSP_test'  
   
  --對所有的預存程序解密  
  declare   tb   cursor   for  
  select   name   from   sysobjects   where   xtype='P'   and   status>0   and   name<>'sp_decrypt'  
   
  declare   @name   sysname  
  open   tb  
  fetch   next   from   tb   into   @name  
  while   @@fetch_status=0  
  begin  
  print   '/*-------預存程序   ['+@name+']   -----------*/'  
  exec   sp_decrypt   @name  
  fetch   next   from   tb   into   @name  
  end  
  close   tb  
  deallocate   tb  
  --*/  
   
  if   exists   (select   *   from   dbo.sysobjects   where   id   =   object_id(N'[dbo].[SP_DECRYPT]')   and   OBJECTPROPERTY(id,   N'IsProcedure')   =   1)  
  drop   procedure   [dbo].[SP_DECRYPT]  
  GO  
   
  CREATE     PROCEDURE   sp_decrypt(@objectName   varchar(50))  
  AS  
  begin  
  set   nocount   on  
  --CSDN:j9988   copyright:2004.04.15    
  --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'  
  begin  
  declare   @parent_obj   varchar(255),@tr_parent_xtype   varchar(10)  
  select   @parent_obj=parent_obj   from   sysobjects   where   id=object_id(@objectName)  
  select   @tr_parent_xtype=xtype   from   sysobjects   where   id=@parent_obj  
  if   @tr_parent_xtype='V'  
  begin  
  set   @sql1='ALTER   TRIGGER   '+@objectname+'   ON   '+OBJECT_NAME(@parentid)+'   WITH   ENCRYPTION   INSTERD   OF   INSERT   AS   PRINT   1   '  
  end  
  else  
  begin  
  set   @sql1='ALTER   TRIGGER   '+@objectname+'   ON   '+OBJECT_NAME(@parentid)+'   WITH   ENCRYPTION   FOR   INSERT   AS   PRINT   1   '  
  end  
   
  end  
  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)+'   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'    
  begin  
   
  if   @tr_parent_xtype='V'  
  begin  
  set   @OrigSpText2='CREATE   TRIGGER   '+@objectname+'   ON   '+OBJECT_NAME(@parentid)+'   WITH   ENCRYPTION   INSTEAD   OF   INSERT   AS   PRINT   1   '  
  end  
  else  
  begin  
  set   @OrigSpText2='CREATE   TRIGGER   '+@objectname+'   ON   '+OBJECT_NAME(@parentid)+'   WITH   ENCRYPTION   FOR   INSERT   AS   PRINT   1   '  
  end  
   
  end  
   
  if   @type='V'  
  set   @OrigSpText2='CREATE   VIEW   '+@objectname+'   WITH   ENCRYPTION   AS   SELECT   1   as   f'  
   
  set   @q=4000-len(@OrigSpText2)  
  set   @OrigSpText2=@OrigSpText2+REPLICATE('-',@q)  
  end  
  else  
  begin  
  SET   @OrigSpText2=REPLICATE('-',   4000)  
  end  
  SET   @i=1  
   
  SET   @resultsp   =   replicate(N'A',   (datalength(@OrigSpText1)   /   2))  
   
  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  
   
  set   @n=@n+1  
   
  end  
   
  end  
  set   @k=@k+1  
  end  
   
  drop   table   #temp  
  rollback   tran  
  end   
 
相關文章

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.