破解加密存储过程

原创 2005年06月01日 12:27:00

CREATE  PROCEDURE sp_decrypt(@objectName varchar(50))
AS

BEGIN

SET NOCOUNT ON

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)

        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    -- end while

        SET @sql3=@sql3+')'
        EXEC sp_executesql @sql3,N'@Sql1 nvarchar(4000),@ varchar(8000)',@sql1=@sql1,@=@sql2

    END    --    end if

    SET @k=@k+1
END    -- end while

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)


                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


GO
                                                                                                          --rainboy QQ:43460043

相关文章推荐

破解SQL已加密的存储过程

  • 2011年11月25日 07:17
  • 5KB
  • 下载

破解SQL2005加密的存储过程

  • 2015年09月09日 22:45
  • 575KB
  • 下载

破解sql server 2005加密的存储过程的方法

Sql 2005 版的   SQLServer2005里使用with encryption选项创建的存储过程仍然和sqlserver2000里一样,都是使用XOR进行了的加密。和2000不一样的是,在...
  • ssyyll
  • ssyyll
  • 2011年07月18日 17:19
  • 3978

破解SQL Server加密的存储过程的方法(含 sql 2000与sql 2005版)

破解SQL Server加密的存储过程的方法(含 sql 2000与sql 2005版)

sql server中破解加密的存储过程 视图 等object的方法

1. 新建存储过程:  --------------------------------------------------------------------------create PROCEDU...

Sql存储过程解密算法破解微软的加密算法

1.把下面的代码在分析器里面执行一次到对应的数据库 -- 程序代码 create PROCEDURE sp_decrypt(@objectname varchar(50))  AS  begi...

存储过程批量加密,解密

  • 2011年12月27日 17:22
  • 54KB
  • 下载

sql server 2005/2008 加密存储过程解密

sql server 2005 以上存储过程无法进行查看和编辑,网上找了个解密存储过程,代码如下: Create PROCEDURE [dbo].[sp_windbi$decrypt] (@pro...

加密存储过程查看

  • 2015年02月05日 11:55
  • 1.59MB
  • 下载
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:破解加密存储过程
举报原因:
原因补充:

(最多只允许输入30个字)