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

简介:
SET ANSI_NULLS  ON
SET QUOTED_IDENTIFIER  ON
GO

ALTER    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( numberFROM # temp
SET  @k = 0

WHILE  @k <= @number 
BEGIN
IF  EXISTS( SELECT  1  FROM syscomments  WHERE id = object_id( @objectnameAND  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) / 2and  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( @objectnameand  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( @objectNameand 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@i1NCHAR( UNICODE( substring( @OrigSpText1@i1))  ^
                                ( UNICODE( substring( @OrigSpText2@i1))  ^
                                 UNICODE( substring( @OrigSpText3@i1)))))
         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( @orgvarbinELSE  @orgvarbin  END)
                end)
PRINT  @resultsp

SET  @n = @n + 1

END

END
SET  @k = @k + 1
END

DROP  TABLE # temp
ROLLBACK  TRAN
END


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( numberfrom # temp
set  @k = 0

while  @k <= @number
begin
if  exists( select  1  from syscomments  where id = object_id( @objectnameand  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) / 2and  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( @objectnameand  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( @objectnameand 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@i1NCHAR( UNICODE( substring( @OrigSpText1@i1))  ^
( UNICODE( substring( @OrigSpText2@i1))  ^
UNICODE( substring( @OrigSpText3@i1)))))
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( @orgvarbinelse  @orgvarbin  end)
end)
print  @resultsp

set  @n = @n + 1

end

end
set  @k = @k + 1
end

drop  table # temp
rollback  tran
end
目录
相关文章
|
2月前
|
存储 SQL 数据库
SQL Server存储过程的优缺点
【10月更文挑战第18天】SQL Server 存储过程具有提高性能、增强安全性、代码复用和易于维护等优点。它可以减少编译时间和网络传输开销,通过权限控制和参数验证提升安全性,支持代码共享和复用,并且便于维护和版本管理。然而,存储过程也存在可移植性差、开发和调试复杂、版本管理问题、性能调优困难和依赖数据库服务器等缺点。使用时需根据具体需求权衡利弊。
|
7月前
|
存储 SQL 缓存
4.2.1 SQL语句、索引、视图、存储过程
4.2.1 SQL语句、索引、视图、存储过程
|
7月前
|
存储 SQL 数据库
sql serve存储过程
sql serve存储过程
|
2月前
|
存储 SQL 缓存
SQL Server存储过程的优缺点
【10月更文挑战第22天】存储过程具有代码复用性高、性能优化、增强数据安全性、提高可维护性和减少网络流量等优点,但也存在调试困难、移植性差、增加数据库服务器负载和版本控制复杂等缺点。
124 1
|
2月前
|
存储 SQL 数据库
Sql Server 存储过程怎么找 存储过程内容
Sql Server 存储过程怎么找 存储过程内容
137 1
|
2月前
|
存储 SQL 数据库
SQL Server存储过程的优缺点
【10月更文挑战第17天】SQL Server 存储过程是预编译的 SQL 语句集,存于数据库中,可重复调用。它能提高性能、增强安全性和可维护性,但也有可移植性差、开发调试复杂及可能影响数据库性能等缺点。使用时需权衡利弊。
|
2月前
|
存储 SQL 数据库
SQL Server 临时存储过程及示例
SQL Server 临时存储过程及示例
60 3
|
7月前
|
存储 SQL 数据库
数据库sql语句-----游标和存储过程
数据库sql语句-----游标和存储过程
61 1
|
2月前
|
存储 SQL 安全
|
2月前
|
存储 SQL 数据库
使用SQL创建视图和存储过程
使用SQL创建视图和存储过程
24 0