破解SQL2000的存储过程的存储过程

简介:
None.gif SET ANSI_NULLS  ON
None.gif SET QUOTED_IDENTIFIER  ON
None.gif GO
None.gif
None.gif ALTER    PROCEDURE  [ sp_decrypt ]( @objectName  varchar( 50))
None.gif AS
None.gif BEGIN
None.gif SET nocount  ON
None.gif
None.gif -- CSDN:j9988 copyright:2004.04.15 
None.gif--
V3.1 
None.gif--
破解字节不受限制,适用于SQLSERVER2000存储过程,函数,视图,触发器
None.gif--
修正上一版视图触发器不能正确解密错误
None.gif--
发现有错,请E_MAIL:CSDNj9988@tom.com
None.gif
BEGIN  TRAN
None.gif DECLARE  @objectname1  varchar( 100), @orgvarbin  varbinary( 8000)
None.gif DECLARE  @sql1  nvarchar( 4000), @sql2  varchar( 8000), @sql3  nvarchar( 4000), @sql4  nvarchar( 4000)
None.gif DECLARE   @OrigSpText1  nvarchar( 4000),   @OrigSpText2  nvarchar( 4000) ,  @OrigSpText3  nvarchar( 4000),  @resultsp  nvarchar( 4000)
None.gif DECLARE   @i  int, @status  int, @type  varchar( 10), @parentid  int
None.gif DECLARE  @colid  int, @n  int, @q  int, @j  int, @k  int, @encrypted  int, @number  int
None.gif SELECT  @type =xtype, @parentid =parent_obj  FROM sysobjects  where id = object_id( @ObjectName)
None.gif
None.gif CREATE  TABLE  # temp( number  int,colid  int,ctext  varbinary( 8000),encrypted  int,status  int)
None.gif INSERT # temp  SELECT  number,colid,ctext,encrypted,status  FROM syscomments   WHERE id  =  object_id( @objectName)
None.gif SELECT  @number = max( numberFROM # temp
None.gif SET  @k = 0
None.gif
None.gif WHILE  @k <= @number 
None.gif BEGIN
None.gif IF  EXISTS( SELECT  1  FROM syscomments  WHERE id = object_id( @objectnameAND  number = @k)
None.gif BEGIN
None.gif IF  @type = ' P '
None.gif SET  @sql1 =( CASE  WHEN  @number > 1  THEN  ' ALTER PROCEDURE  ' +  @objectName  + ' ; ' + rtrim( @k) + '  WITH ENCRYPTION AS  '
None.gif                           ELSE  ' ALTER PROCEDURE  ' +  @objectName + '  WITH ENCRYPTION AS  '
None.gif                           END)
None.gif
None.gif IF  @type = ' TR '
None.gif begin
None.gif declare  @parent_obj  varchar( 255), @tr_parent_xtype  varchar( 10)
None.gif select  @parent_obj =parent_obj  from sysobjects  where id = object_id( @objectName)
None.gif select  @tr_parent_xtype =xtype  from sysobjects  where id = @parent_obj
None.gif if  @tr_parent_xtype = ' V '
None.gif begin
None.gif set  @sql1 = ' ALTER TRIGGER  ' + @objectname + '  ON  ' + OBJECT_NAME( @parentid) + '  WITH ENCRYPTION INSTERD OF INSERT AS PRINT 1  '
None.gif end
None.gif else
None.gif begin
None.gif set  @sql1 = ' ALTER TRIGGER  ' + @objectname + '  ON  ' + OBJECT_NAME( @parentid) + '  WITH ENCRYPTION FOR INSERT AS PRINT 1  '
None.gif end
None.gif
None.gif end
None.gif if  @type = ' FN '  or  @type = ' TF '  or  @type = ' IF '
None.gif set  @sql1 =( case  @type  when  ' TF '  then 
None.gif ' ALTER FUNCTION  ' +  @objectName + ' (@a char(1)) returns @b table(a varchar(10)) with encryption as begin insert @b select @a return end  '
None.gif when  ' FN '  then
None.gif ' ALTER FUNCTION  ' +  @objectName + ' (@a char(1)) returns char(1) with encryption as begin return @a end '
None.gif when  ' IF '  then
None.gif ' ALTER FUNCTION  ' +  @objectName + ' (@a char(1)) returns table with encryption as return select @a as a '
None.gif end)
None.gif
None.gif if  @type = ' V '
None.gif set  @sql1 = ' ALTER VIEW  ' + @objectname + '  WITH ENCRYPTION AS SELECT 1 as f '
None.gif
None.gif set  @q = len( @sql1)
None.gif set  @sql1 = @sql1 + REPLICATE( ' - ', 4000 - @q)
None.gif select  @sql2 = REPLICATE( ' - ', 8000)
None.gif set  @sql3 = ' exec(@sql1 '
None.gif select  @colid = max(colid)  from # temp  where  number = @k 
None.gif set  @n = 1
None.gif while  @n <= CEILING( 1.0 *( @colid - 1) / 2and  len( @sQL3) <= 3996
None.gif begin 
None.gif set  @sql3 = @sql3 + ' +@ '
None.gif set  @n = @n + 1
None.gif end
None.gif set  @sql3 = @sql3 + ' ) '
None.gif exec sp_executesql  @sql3,N ' @Sql1 nvarchar(4000),@ varchar(8000) ', @sql1 = @sql1,@ = @sql2
None.gif
None.gif end
None.gif set  @k = @k + 1
None.gif end
None.gif
None.gif set  @k = 0
None.gif while  @k <= @number 
None.gif begin
None.gif
None.gif if  exists( select  1  from syscomments  where id = object_id( @objectnameand  number = @k)
None.gif begin
None.gif select  @colid = max(colid)  from # temp  where  number = @k 
None.gif set  @n = 1
None.gif
None.gif while  @n <= @colid
None.gif begin
None.gif select  @OrigSpText1 =ctext, @encrypted =encrypted, @status =status  FROM # temp   WHERE colid = @n  and  number = @k
None.gif
None.gif SET  @OrigSpText3 =( SELECT ctext  FROM syscomments  WHERE id = object_id( @objectNameand colid = @n  and  number = @k)
None.gif if  @n = 1
None.gif begin
None.gif if  @type = ' P '
None.gif SET  @OrigSpText2 =( case  when  @number > 1  then  ' CREATE PROCEDURE  ' +  @objectName  + ' ; ' + rtrim( @k) + '  WITH ENCRYPTION AS  '
None.gif                        else  ' CREATE PROCEDURE  ' +  @objectName  + '  WITH ENCRYPTION AS  '
None.gif                        end)
None.gif
None.gif
None.gif if  @type = ' FN '  or  @type = ' TF '  or  @type = ' IF '
None.gif SET  @OrigSpText2 =( case  @type  when  ' TF '  then 
None.gif ' CREATE FUNCTION  ' +  @objectName + ' (@a char(1)) returns @b table(a varchar(10)) with encryption as begin insert @b select @a return end  '
None.gif when  ' FN '  then
None.gif ' CREATE FUNCTION  ' +  @objectName + ' (@a char(1)) returns char(1) with encryption as begin return @a end '
None.gif when  ' IF '  then
None.gif ' CREATE FUNCTION  ' +  @objectName + ' (@a char(1)) returns table with encryption as return select @a as a '
None.gif end)
None.gif
None.gif if  @type = ' TR ' 
None.gif begin
None.gif
None.gif if  @tr_parent_xtype = ' V '
None.gif begin
None.gif set  @OrigSpText2 = ' CREATE TRIGGER  ' + @objectname + '  ON  ' + OBJECT_NAME( @parentid) + '  WITH ENCRYPTION INSTEAD OF INSERT AS PRINT 1  '
None.gif end
None.gif else
None.gif begin
None.gif set  @OrigSpText2 = ' CREATE TRIGGER  ' + @objectname + '  ON  ' + OBJECT_NAME( @parentid) + '  WITH ENCRYPTION FOR INSERT AS PRINT 1  '
None.gif end
None.gif
None.gif end
None.gif
None.gif if  @type = ' V '
None.gif set  @OrigSpText2 = ' CREATE VIEW  ' + @objectname + '  WITH ENCRYPTION AS SELECT 1 as f '
None.gif
None.gif set  @q = 4000 - len( @OrigSpText2)
None.gif set  @OrigSpText2 = @OrigSpText2 + REPLICATE( ' - ', @q)
None.gif end
None.gif else
None.gif begin
None.gif SET  @OrigSpText2 = REPLICATE( ' - '4000)
None.gif end
None.gif SET  @i = 1
None.gif
None.gif SET  @resultsp  =  replicate(N ' A ', ( datalength( @OrigSpText1/  2))
None.gif
None.gif WHILE  @i <= datalength( @OrigSpText1) / 2
None.gif BEGIN
None.gif
None.gif SET  @resultsp  =  stuff( @resultsp@i1NCHAR( UNICODE( substring( @OrigSpText1@i1))  ^
None.gif                                ( UNICODE( substring( @OrigSpText2@i1))  ^
None.gif                                 UNICODE( substring( @OrigSpText3@i1)))))
None.gif         SET  @i = @i + 1
None.gif END
None.gif SET  @orgvarbin = cast( @OrigSpText1  as  varbinary( 8000))
None.gif SET  @resultsp =( CASE  WHEN  @encrypted = 1 
None.gif                     then  @resultsp 
None.gif                     else  convert( nvarchar( 4000), CASE  WHEN  @status & 2 = 2  THEN uncompress( @orgvarbinELSE  @orgvarbin  END)
None.gif                end)
None.gif PRINT  @resultsp
None.gif
None.gif SET  @n = @n + 1
None.gif
None.gif END
None.gif
None.gif END
None.gif SET  @k = @k + 1
None.gif END
None.gif
None.gif DROP  TABLE # temp
None.gif ROLLBACK  TRAN
None.gif END
None.gif


None.gif create  PROCEDURE sp_decrypt( @objectname  varchar( 50))
None.gif AS
None.gif begin
None.gif set nocount  on
None.gif -- CSDN:j9988 copyright:2004.07.15
None.gif--
V3.2
None.gif--
破解字节不受限制,适用于SQLSERVER2000存储过程,函数,视图,触发器
None.gif--
修正上一版"视图触发器"不能正确解密错误
None.gif--
发现有错,请E_MAIL:CSDNj9988@tom.com
None.gif
begin  tran
None.gif declare  @objectname1  varchar( 100), @orgvarbin  varbinary( 8000)
None.gif declare  @sql1  nvarchar( 4000), @sql2  varchar( 8000), @sql3  nvarchar( 4000), @sql4  nvarchar( 4000)
None.gif DECLARE  @OrigSpText1  nvarchar( 4000),  @OrigSpText2  nvarchar( 4000) ,  @OrigSpText3  nvarchar( 4000),  @resultsp  nvarchar( 4000)
None.gif declare  @i  int, @status  int, @type  varchar( 10), @parentid  int
None.gif declare  @colid  int, @n  int, @q  int, @j  int, @k  int, @encrypted  int, @number  int
None.gif select  @type =xtype, @parentid =parent_obj  from sysobjects  where id = object_id( @objectname)
None.gif
None.gif create  table # temp( number  int,colid  int,ctext  varbinary( 8000),encrypted  int,status  int)
None.gif insert # temp  Select  number,colid,ctext,encrypted,status  FROM syscomments  Where id  =  object_id( @objectname)
None.gif select  @number = max( numberfrom # temp
None.gif set  @k = 0
None.gif
None.gif while  @k <= @number
None.gif begin
None.gif if  exists( select  1  from syscomments  where id = object_id( @objectnameand  number = @k)
None.gif begin
None.gif if  @type = ' P '
None.gif set  @sql1 =( case  when  @number > 1  then  ' Alter PROCEDURE  ' +  @objectname  + ' ; ' + rtrim( @k) + '  WITH ENCRYPTION AS  '
None.gif else  ' Alter PROCEDURE  ' +  @objectname + '  WITH ENCRYPTION AS  '
None.gif end)
None.gif
None.gif if  @type = ' TR '
None.gif begin
None.gif declare  @parent_obj  varchar( 255), @tr_parent_xtype  varchar( 10)
None.gif select  @parent_obj =parent_obj  from sysobjects  where id = object_id( @objectname)
None.gif select  @tr_parent_xtype =xtype  from sysobjects  where id = @parent_obj
None.gif if  @tr_parent_xtype = ' V '
None.gif begin
None.gif set  @sql1 = ' Alter TRIGGER  ' + @objectname + '  ON  ' + OBJECT_NAME( @parentid) + '  WITH ENCRYPTION INSTERD OF Insert AS PRINT 1  '
None.gif end
None.gif else
None.gif begin
None.gif set  @sql1 = ' Alter TRIGGER  ' + @objectname + '  ON  ' + OBJECT_NAME( @parentid) + '  WITH ENCRYPTION FOR Insert AS PRINT 1  '
None.gif end
None.gif
None.gif end
None.gif if  @type = ' FN '  or  @type = ' TF '  or  @type = ' IF '
None.gif set  @sql1 =( case  @type  when  ' TF '  then
None.gif ' Alter FUNCTION  ' +  @objectname + ' (@a char(1)) returns @b table(a varchar(10)) with encryption as begin insert @b select @a return end  '
None.gif when  ' FN '  then
None.gif ' Alter FUNCTION  ' +  @objectname + ' (@a char(1)) returns char(1) with encryption as begin return @a end '
None.gif when  ' IF '  then
None.gif ' Alter FUNCTION  ' +  @objectname + ' (@a char(1)) returns table with encryption as return select @a as a '
None.gif end)
None.gif
None.gif if  @type = ' V '
None.gif set  @sql1 = ' Alter VIEW  ' + @objectname + '  WITH ENCRYPTION AS Select 1 as f '
None.gif
None.gif set  @q = len( @sql1)
None.gif set  @sql1 = @sql1 + REPLICATE( ' - ', 4000 - @q)
None.gif select  @sql2 = REPLICATE( ' - ', 8000)
None.gif set  @sql3 = ' exec(@sql1 '
None.gif select  @colid = max(colid)  from # temp  where  number = @k
None.gif set  @n = 1
None.gif while  @n <= CEILING( 1.0 *( @colid - 1) / 2and  len( @sql3) <= 3996
None.gif begin
None.gif set  @sql3 = @sql3 + ' +@ '
None.gif set  @n = @n + 1
None.gif end
None.gif set  @sql3 = @sql3 + ' ) '
None.gif exec sp_executesql  @sql3,N ' @sql1 nvarchar(4000),@ varchar(8000) ', @sql1 = @sql1,@ = @sql2
None.gif
None.gif end
None.gif set  @k = @k + 1
None.gif end
None.gif
None.gif set  @k = 0
None.gif while  @k <= @number
None.gif begin
None.gif
None.gif if  exists( select  1  from syscomments  where id = object_id( @objectnameand  number = @k)
None.gif begin
None.gif select  @colid = max(colid)  from # temp  where  number = @k
None.gif set  @n = 1
None.gif
None.gif while  @n <= @colid
None.gif begin
None.gif select  @OrigSpText1 =ctext, @encrypted =encrypted, @status =status  FROM # temp  Where colid = @n  and  number = @k
None.gif
None.gif SET  @OrigSpText3 =( Select ctext  FROM syscomments  Where id = object_id( @objectnameand colid = @n  and  number = @k)
None.gif if  @n = 1
None.gif begin
None.gif if  @type = ' P '
None.gif SET  @OrigSpText2 =( case  when  @number > 1  then  ' Create PROCEDURE  ' +  @objectname  + ' ; ' + rtrim( @k) + '  WITH ENCRYPTION AS  '
None.gif else  ' Create PROCEDURE  ' +  @objectname  + '  WITH ENCRYPTION AS  '
None.gif end)
None.gif
None.gif
None.gif if  @type = ' FN '  or  @type = ' TF '  or  @type = ' IF '
None.gif SET  @OrigSpText2 =( case  @type  when  ' TF '  then
None.gif ' Create FUNCTION  ' +  @objectname + ' (@a char(1)) returns @b table(a varchar(10)) with encryption as begin insert @b select @a return end  '
None.gif when  ' FN '  then
None.gif ' Create FUNCTION  ' +  @objectname + ' (@a char(1)) returns char(1) with encryption as begin return @a end '
None.gif when  ' IF '  then
None.gif ' Create FUNCTION  ' +  @objectname + ' (@a char(1)) returns table with encryption as return select @a as a '
None.gif end)
None.gif
None.gif if  @type = ' TR '
None.gif begin
None.gif
None.gif if  @tr_parent_xtype = ' V '
None.gif begin
None.gif set  @OrigSpText2 = ' Create TRIGGER  ' + @objectname + '  ON  ' + OBJECT_NAME( @parentid) + '  WITH ENCRYPTION INSTEAD OF Insert AS PRINT 1  '
None.gif end
None.gif else
None.gif begin
None.gif set  @OrigSpText2 = ' Create TRIGGER  ' + @objectname + '  ON  ' + OBJECT_NAME( @parentid) + '  WITH ENCRYPTION FOR Insert AS PRINT 1  '
None.gif end
None.gif
None.gif end
None.gif
None.gif if  @type = ' V '
None.gif set  @OrigSpText2 = ' Create VIEW  ' + @objectname + '  WITH ENCRYPTION AS Select 1 as f '
None.gif
None.gif
None.gif
None.gif set  @q = 4000 - len( @OrigSpText2)
None.gif set  @OrigSpText2 = @OrigSpText2 + REPLICATE( ' - ', @q)
None.gif end
None.gif else
None.gif begin
None.gif SET  @OrigSpText2 = REPLICATE( ' - '4000)
None.gif end
None.gif SET  @i = 1
None.gif
None.gif SET  @resultsp  =  replicate(N ' A ', ( datalength( @OrigSpText1/  2))
None.gif
None.gif WHILE  @i <= datalength( @OrigSpText1) / 2
None.gif BEGIN
None.gif
None.gif SET  @resultsp  =  stuff( @resultsp@i1NCHAR( UNICODE( substring( @OrigSpText1@i1))  ^
None.gif( UNICODE( substring( @OrigSpText2@i1))  ^
None.gif UNICODE( substring( @OrigSpText3@i1)))))
None.gif SET  @i = @i + 1
None.gif END
None.gif set  @orgvarbin = cast( @OrigSpText1  as  varbinary( 8000))
None.gif set  @resultsp =( case  when  @encrypted = 1
None.gif then  @resultsp
None.gif else  convert( nvarchar( 4000), case  when  @status & 2 = 2  then uncompress( @orgvarbinelse  @orgvarbin  end)
None.gif end)
None.gif print  @resultsp
None.gif
None.gif set  @n = @n + 1
None.gif
None.gif end
None.gif
None.gif end
None.gif set  @k = @k + 1
None.gif end
None.gif
None.gif drop  table # temp
None.gif rollback  tran
None.gif end
目录
相关文章
|
4月前
|
SQL 存储 关系型数据库
sql语句,索引,视图,存储过程
sql语句,索引,视图,存储过程
32 0
|
4月前
|
存储 SQL 缓存
4.2.1 SQL语句、索引、视图、存储过程
4.2.1 SQL语句、索引、视图、存储过程
|
2月前
|
存储 SQL 数据库
sql serve存储过程
sql serve存储过程
17 0
|
8天前
|
存储 SQL
SQL Server 存储过程 触发器 事务处理
SQL Server 存储过程 触发器 事务处理
|
1月前
|
存储 SQL 安全
使用SQL存储过程有什么好处 用视图有什么好处
使用SQL存储过程有什么好处 用视图有什么好处
9 0
|
2月前
|
SQL 网络协议 Windows
破解SQL Server迷局,彻底解决“管道的另一端无任何进程错误233”
破解SQL Server迷局,彻底解决“管道的另一端无任何进程错误233”
|
2月前
|
存储 SQL
物料清单应用输入模板的SQL存储过程设计
物料清单应用输入模板的SQL存储过程设计
|
4月前
|
存储 SQL Oracle
PL/SQL存储过程的使用
PL/SQL存储过程的使用
76 1
|
5月前
|
存储 SQL Oracle
|
10月前
|
存储 SQL 安全
数据库SQL Server 9-10 章(存储过程与触发器)
数据库SQL Server 9-10 章(存储过程与触发器)
155 0