破解加密的存储过程

 

加密只要在存储过程的AS上面加这一句WITH ENCRYPTION
如:
create       PROCEDURE    SP_XXX
(
    
@objectname     varchar ( 50 )

WITH  ENCRYPTION 
AS
......

解密
用法:把下面代码粘贴成新的存储过程,运行他的时候参数填要破解的存储过程,显示的结果就是要破解的存储过程的全部代码
create       PROCEDURE    sp_decrypt( @objectname     varchar ( 50 ))   
  
AS    
  
begin    
  
set    nocount    on    
  
-- CSDN:j9988   copyright:2004.07.15     
   -- V3.2     
   -- 破解字节不受限制,适用于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    
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值