SQL2000 2005 破解函数,过程,触发器,视图

简介:

 

 --破解函数,过程,触发器,视图.仅限于SQLSERVER2000   
    
  
--作者:J9988--  
  --调用示例   
    
  
--解密指定存储过程   
  exec   sp_decrypt   'AppSP_test'   
    
  
--对所有的存储过程解密   
  declare   tb   cursor   for   
  
select   name   from   sysobjects   where   xtype='P'   and   status>0   
    
  
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 

 

 

 

 

sql2005破解

 

 

    本文转自曾祥展博客园博客,原文链接:http://www.cnblogs.com/zengxiangzhan/archive/2009/09/12/1565387.html,如需转载请自行联系原作者


相关文章
|
30天前
|
SQL Oracle 关系型数据库
SQL优化-使用联合索引和函数索引
在一次例行巡检中,发现一条使用 `to_char` 函数将日期转换为字符串的 SQL 语句 CPU 利用率很高。为了优化该语句,首先分析了 where 条件中各列的选择性,并创建了不同类型的索引,包括普通索引、函数索引和虚拟列索引。通过对比不同索引的执行计划,最终确定了使用复合索引(包含函数表达式)能够显著降低查询成本,提高执行效率。
|
1月前
|
SQL 数据库 数据库管理
数据库SQL函数应用技巧与方法
在数据库管理中,SQL函数是处理和分析数据的强大工具
|
1月前
|
SQL 数据库 索引
SQL中COUNT函数结合条件使用的技巧与方法
在SQL查询中,COUNT函数是一个非常常用的聚合函数,用于计算表中满足特定条件的记录数
|
1月前
|
SQL 存储 数据库
实验4:SQL视图操作与技巧
在SQL数据库管理中,视图(View)是一种虚拟表,它基于SQL查询的结果集创建,并不存储实际数据,而是存储查询定义
|
1月前
|
SQL 存储 数据库
实验4:SQL视图操作技巧与方法
在数据库管理系统中,视图(View)是一种虚拟表,它基于SQL查询的结果集创建,并不实际存储数据
|
1月前
|
SQL 关系型数据库 MySQL
SQL日期函数
SQL日期函数
|
1月前
|
存储 SQL 安全
|
1月前
|
SQL 数据库
SQL使用视图的优缺点
SQL使用视图的优缺点
27 0
|
1月前
|
存储 SQL 数据库
使用SQL创建视图和存储过程
使用SQL创建视图和存储过程
16 0
|
2月前
|
SQL 关系型数据库 C语言
PostgreSQL SQL扩展 ---- C语言函数(三)
可以用C(或者与C兼容,比如C++)语言编写用户自定义函数(User-defined functions)。这些函数被编译到动态可加载目标文件(也称为共享库)中并被守护进程加载到服务中。“C语言函数”与“内部函数”的区别就在于动态加载这个特性,二者的实际编码约定本质上是相同的(因此,标准的内部函数库为用户自定义C语言函数提供了丰富的示例代码)