破解加密存储过程

原创 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 server 存储过程加密破解方法

存储过程是数据库中一个非常重要的该部分,很多业务逻辑都可能写在存储过程里面,为了安全,部分存储过程是加密存放的,如果我们想看到源代码,就非常困难了,在sql  server 2000中,有专门的方法破...
  • gatr
  • gatr
  • 2016年04月23日 14:20
  • 5725

网狐存储过程破解方法。

解密代码是百度的,但新手一时可能不知道怎么使用。 我自己摸索后,终于会用,写出步骤,使新手可以省点摸索时间。 /************************************...
  • qq51931373
  • qq51931373
  • 2014年10月13日 18:00
  • 2620

使用wrap和unwrap加密解密Oracle的PL/SQL对象(包,存储过程,函数等)代码

使用wrap和unwrap加密解密Oracle的PL/SQL对象(包,存储过程,函数等)代码   Oracle数据库系统自带的PL/SQL对象(包,存储过程,函数等)的代码绝大部分都是使用了wrap程...
  • Samdy_Chan
  • Samdy_Chan
  • 2016年01月31日 20:05
  • 5175

破解加密存储过程

CREATE     PROCEDURE   sp_decrypt(@objectName   varchar(50))     AS     begin     set   nocount   on...
  • lijingzhan
  • lijingzhan
  • 2007年01月23日 12:04
  • 472

破解加密的存储过程

 加密只要在存储过程的AS上面加这一句WITH ENCRYPTION如:create     PROCEDURE   SP_XXX(    @objectname   varchar(50)) WIT...
  • jimlong
  • jimlong
  • 2008年05月07日 16:33
  • 423

对数据库中存储过程进行加密

一般写的存储过程: CREATE PROCEDURE dbo.myPRo AS BEGIN SELECT 'SQL statements' END GO   加密的...
  • xiaoding133
  • xiaoding133
  • 2011年08月17日 12:52
  • 1697

MSSQL 存储过程加密解密

--来源:http://www.cnblogs.com/echosong/p/5536800.htmlCreate PROCEDURE [dbo].[sp_windbi$decrypt] (@proc...
  • Xiao_Tian2
  • Xiao_Tian2
  • 2017年09月09日 08:44
  • 189

SQL 2008 r2 存储过程 加密解密

第一步:打开DAC连接功能 第二步:在MASTER数据库创建一个解密存储过程 1 USE master 2 GO 3 CREATE PROCEDURE [dbo].[sp__win...
  • jindou910101
  • jindou910101
  • 2014年10月13日 18:15
  • 6106

sqlServer存储过程的加密和解密方法

 ★加密存储过程: IF EXISTS (SELECT name FROM sysobjects WHERE name = 'encrypt_this' AND type = 'P'...
  • u013597888
  • u013597888
  • 2015年08月02日 14:25
  • 2516

POSTGRESQL 中如何隐藏存储过程

 POSTGRESQL(以下简称PG)是功能强大的开源数据库,在*NUX下表现出色,性能不逊于ORACLE。更主要的是它提供源代码,而且可进行自行修改,用于商业目的。PG的存储过程统一以函数形式存在,...
  • trainee
  • trainee
  • 2006年10月10日 11:38
  • 804
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:破解加密存储过程
举报原因:
原因补充:

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