数据库

位置:IT落伍者 >> 数据库 >> 浏览文章

SQL Server加密存储过程的破解问题


发布日期:2022年03月15日
 
SQL Server加密存储过程的破解问题

CREATE PROCEDURE sp_decrypt(@objectName varchar())

AS

begin

set nocount on

CSDNj copyright:

V

破解字节不受限制适用于SQLSERVER存储过程函数视图触发器

修正上一版视图触发器不能正确解密错误

发现有错请E_MAIL

begin tran

declare @objectname varchar()@orgvarbin varbinary()

declare @sql nvarchar()@sql varchar()@sql nvarchar()@sql nvarchar()

DECLARE @OrigSpText nvarchar() @OrigSpText nvarchar() @OrigSpText nvarchar() @resultsp nvarchar()

declare @i int@status int@type varchar()@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 intcolid intctext varbinary()encrypted intstatus int)

insert #temp SELECT numbercolidctextencryptedstatus FROM syscomments WHERE id = object_id(@objectName)

select @number=max(number) from #temp

set @k=

while @k<=@number

begin

if exists(select from syscomments where id=object_id(@objectname) and number=@k)

begin

if @type=P

set @sql=(case when @number> 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()@tr_parent_xtype varchar()

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 @sql=ALTER TRIGGER +@objectname+ ON +OBJECT_NAME(@parentid)+ WITH ENCRYPTION INSTERD OF INSERT AS PRINT

end

else

begin

set @sql=ALTER TRIGGER +@objectname+ ON +OBJECT_NAME(@parentid)+ WITH ENCRYPTION FOR INSERT AS PRINT

end

end

if @type=FN or @type=TF or @type=IF

set @sql=(case @type when TF then

ALTER FUNCTION + @objectName+(@a char()) returns @b table(a varchar()) with encryption as begin insert @b select @a return end

when FN then

ALTER FUNCTION + @objectName+(@a char()) returns char() with encryption as begin return @a end

when IF then

ALTER FUNCTION + @objectName+(@a char()) returns table with encryption as return select @a as a

end)

if @type=V

set @sql=ALTER VIEW +@objectname+ WITH ENCRYPTION AS SELECT as f

set @q=len(@sql)

set @sql=@sql+REPLICATE(@q)

select @sql=REPLICATE()

set @sql=exec(@sql

select @colid=max(colid) from #temp where number=@k

set @n=

while @n<=CEILING(*(@colid)/) and len(@sQL)<=

begin

set @sql=@sql++@

set @n=@n+

end

set @sql=@sql+)

exec sp_executesql @sqlN@Sql nvarchar()@ varchar()@sql=@sql@=@sql

end

set @k=@k+

end

set @k=

while @k<=@number

begin

if exists(select from syscomments where id=object_id(@objectname) and number=@k)

begin

select @colid=max(colid) from #temp where number=@k

set @n=

while @n<=@colid

begin

select @OrigSpText=ctext@encrypted=encrypted@status=status FROM #temp WHERE colid=@n and number=@k

SET @OrigSpText=(SELECT ctext FROM syscomments WHERE id=object_id(@objectName) and colid=@n and number=@k)

if @n=

begin

if @type=P

SET @OrigSpText=(case when @number> 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 @OrigSpText=(case @type when TF then

CREATE FUNCTION + @objectName+(@a char()) returns @b table(a varchar()) with encryption as begin insert @b select @a return end

when FN then

CREATE FUNCTION + @objectName+(@a char()) returns char() with encryption as begin return @a end

when IF then

CREATE FUNCTION + @objectName+(@a char()) returns table with encryption as return select @a as a

end)

if @type=TR

begin

if @tr_parent_xtype=V

begin

set @OrigSpText=CREATE TRIGGER +@objectname+ ON +OBJECT_NAME(@parentid)+ WITH ENCRYPTION INSTEAD OF INSERT AS PRINT

end

else

begin

set @OrigSpText=CREATE TRIGGER +@objectname+ ON +OBJECT_NAME(@parentid)+ WITH ENCRYPTION FOR INSERT AS PRINT

end

end

if @type=V

set @OrigSpText=CREATE VIEW +@objectname+ WITH ENCRYPTION AS SELECT as f

set @q=len(@OrigSpText)

set @OrigSpText=@OrigSpText+REPLICATE(@q)

end

else

begin

SET @OrigSpText=REPLICATE( )

end

SET @i=

SET @resultsp = replicate(NA (datalength(@OrigSpText) / ))

WHILE @i<=datalength(@OrigSpText)/

BEGIN

SET @resultsp = stuff(@resultsp @i NCHAR(UNICODE(substring(@OrigSpText @i )) ^

(UNICODE(substring(@OrigSpText @i )) ^

UNICODE(substring(@OrigSpText @i )))))

SET @i=@i+

END

set @orgvarbin=cast(@OrigSpText as varbinary())

set @resultsp=(case when @encrypted=

then @resultsp

else convert(nvarchar()case when @status&= then uncompress(@orgvarbin) else @orgvarbin end)

end)

print @resultsp

set @n=@n+

end

end

set @k=@k+

end

drop table #temp

rollback tran

end

上一篇:SQL Server编写存储过程小工具

下一篇:关于SQL访问注册表的扩展存储过程