sql2000查看解密存储过程

首先在查询分析器中新建存储过程,如下:
use master
go
if exists(select 1 from sysobjects where xtype = 'p'
    and name = 'sp_decrypt')
drop proc sp_decrypt
go
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

在线美化sql工具:http://tools.jb51.net/code/sqlcodeformat

在对应数据库执行查看存储过程语句,如下:

sp_decrypt 'SP_InsertUser'
执行后显示存储过程内容

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值